diff --git a/gracedb/feeds.py b/gracedb/feeds.py new file mode 100644 index 0000000000000000000000000000000000000000..a67398676d1bf6fdc9c5e18a62ff73ab8ae03073 --- /dev/null +++ b/gracedb/feeds.py @@ -0,0 +1,65 @@ + +from django.contrib.syndication.feeds import FeedDoesNotExist +from django.core.exceptions import ObjectDoesNotExist +from django.contrib.syndication.feeds import Feed + +from django.core.urlresolvers import reverse +from django.template import RequestContext +from django.shortcuts import render_to_response + +from models import Event, Group +from views import view + +class EventFeed(Feed): + def get_object(self, bits): + # [] , ['cbc'], ['cbc','lowmass'] + if len(bits) not in [0,1,2]: + raise FeedDoesNotExist + if not bits: + title = "GraCEDB Events" + objs = Event.objects.order_by("-id") + else: + group = Group.objects.filter(name__iexact=bits[0]) + if not group.count(): + raise FeedDoesNotExist + group = group[0] + objs = Event.objects.filter(group=group) + if len(bits) == 1: + title = "GraCEDB Events for %s Group" % group.name + else: + requestedtype = bits[1] + type = [(c,t) for (c,t) in Event.ANALYSIS_TYPE_CHOICES \ + if t.lower() == requestedtype] + if not type: + raise FeedDoesNotExist + typecode, type = type[0] + title = "GraCEDB Events for %s / %s" % (group.name, type) + objs = objs.filter(analysisType=typecode) + return title, objs[:10] + + def title(self, obj): + title, _ = obj + return title + + def link(self, obj): + # XXX WHAT is THIS?? + # Breaks the feed if it's not there. Appears in <link> tags. Eh? + return "/linky" + + def item_link(self, obj): + return reverse(view, args=[obj.graceid()]) + + def description(self, obj): + # XXX Descriptive text for the feed itself. + # I don't know what to put here + return "" + + def items(self, obj): + _, x = obj + return x + +def feedview(request): + return render_to_response( + 'feeds/index.html', + {}, + context_instance=RequestContext(request)) diff --git a/gracedb/models.py b/gracedb/models.py index 46237bab9cc96b7dc28f848fd45b7d1fa4544985..3ab65516d2a0725b96ae50a127a25eb5668a658e 100644 --- a/gracedb/models.py +++ b/gracedb/models.py @@ -45,7 +45,7 @@ class Event(models.Model): ("Q", "Q"), ("X", "X"), ("CWB", "CWB"), - ("MBTA", "MBTA Online"), + ("MBTA", "MBTAOnline"), ) submitter = models.ForeignKey(User) created = models.DateTimeField(auto_now_add=True) @@ -81,6 +81,13 @@ class Event(models.Model): def virgoApproved(self): return self.approval_set.filter(approvingCollaboration='V').count() + @classmethod + def getByGraceid(cls, id): + if not id: return None + if id[0] == "G": + return cls.objects.get(id=int(id[1:])) + return cls.objects.get(uid=id) + class Approval(models.Model): COLLABORATION_CHOICES = ( ('L','LIGO'), ('V','Virgo'), ) approver = models.ForeignKey(User) diff --git a/gracedb/urls.py b/gracedb/urls.py index 6c80eed0e96b0f9b11fea57073375a7c4dec9a14..56f0900ad55188717573eb961c9485285822de2a 100644 --- a/gracedb/urls.py +++ b/gracedb/urls.py @@ -7,6 +7,8 @@ urlpatterns = patterns('gracedb.gracedb.views', (r'^$', 'index'), url (r'^create/$', 'create', name="create"), url (r'^search/$', 'search', name="search"), + url (r'^view/(?P<graceid>[\w\d]+)', 'view', name="view"), + # (r'^view/(?P<uid>[\w\d]+)', 'view'), # (r'^edit/(?P<uid>[\w\d]+)', 'edit'), # (r'^request_archive/(?P<uid>[\w\d]+)(?P<rescind>/rescind)?', 'request_archive'), diff --git a/gracedb/views.py b/gracedb/views.py index 937bfebd5a865ba794c40e2b3e5e5928ca7672e5..04650f798819895dc80a91221722b2bad4d851ef 100644 --- a/gracedb/views.py +++ b/gracedb/views.py @@ -16,7 +16,6 @@ def index(request): # assert request.ligouser return render_to_response( 'gracedb/index.html', -# {'hi':request.ligouser}, {}, context_instance=RequestContext(request)) @@ -102,6 +101,16 @@ def create(request): { 'form' : form }, context_instance=RequestContext(request)) +def view(request, graceid): + context = {} + a = Event.getByGraceid(graceid) + if not a: + return HttpResponseNotFound() + context['object'] = a + return render_to_response( + 'gracedb/event_detail.html', + context, + context_instance=RequestContext(request)) def search(request): assert request.ligouser diff --git a/settings.py b/settings.py index a10506e9ff691c3278138730729e5c047092665c..de978c921b3c899ac7a9919a95f0963e3d89d931 100644 --- a/settings.py +++ b/settings.py @@ -93,6 +93,6 @@ INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.contenttypes', 'django.contrib.sessions', - 'django.contrib.sites', + #'django.contrib.sites', 'gracedb.gracedb', ) diff --git a/settings_dev.py b/settings_dev.py index 0a0a43fd6d4f489800e187e31e9750adaa9ceaeb..e1ebcee5867ddceedd21326919f513287ba59913 100644 --- a/settings_dev.py +++ b/settings_dev.py @@ -90,6 +90,6 @@ INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.contenttypes', 'django.contrib.sessions', - 'django.contrib.sites', + #'django.contrib.sites', 'gracedb.gracedb', ) diff --git a/templates/feeds/index.html b/templates/feeds/index.html new file mode 100644 index 0000000000000000000000000000000000000000..154b03cecee6fddff09034b135f48c457e8a1127 --- /dev/null +++ b/templates/feeds/index.html @@ -0,0 +1,39 @@ +{% extends "base.html" %} + +{% block title %}RSS Feeds{% endblock %} +{% block heading %}GraceDB{% endblock %} + +{% block content %} + +<h2>RSS Feeds</h2> +<p> +<a href="/gracedb/feeds/latest/">All Latest Events</a> + <ul> + <li><a href="/gracedb/feeds/latest/burst/">Burst</a></li> + <ul> + <li><a href="/gracedb/feeds/latest/burst/omega">Omega</a></li> + <li><a href="/gracedb/feeds/latest/burst/q">Q</a></li> + <li><a href="/gracedb/feeds/latest/burst/x">X</a></li> + </ul> + </ul> + + <ul> + <li><a href="/gracedb/feeds/latest/cbc/">CBC</a></li> + <ul> + <li><a href="/gracedb/feeds/latest/cbc/lowmass">Low Mass</a></li> + <li><a href="/gracedb/feeds/latest/cbc/highmass">High Mass</a></li> + <li><a href="/gracedb/feeds/latest/cbc/grb">GRB</a></li> + <li><a href="/gracedb/feeds/latest/cbc/ringdown">Ringdown</a></li> + <li><a href="/gracedb/feeds/latest/cbs/mbtaonline">MBTA Online</a></li> + </ul> + </ul> + + <ul> + <li><a href="/gracedb/feeds/latest/stochastic/">Stochastic</a></li> + <ul> + <li><a href="/gracedb/feeds/latest/stochastic/cwb">CWB</a></li> + </ul> + </ul> +</p> + +{% endblock %} diff --git a/templates/feeds/latest_description.html b/templates/feeds/latest_description.html new file mode 100644 index 0000000000000000000000000000000000000000..61dd235691b95003fc83352b5119af871325d40e --- /dev/null +++ b/templates/feeds/latest_description.html @@ -0,0 +1,6 @@ +<ul> + <li><a href="{{ obj.weburl }}">Data</a></li> + <li><a href="{{ obj.wikiurl }}">TWiki</a></li> +</ul> +Sumbmitter: {{ obj.submitter.name }}<br/> +Created: {{ obj.created }} diff --git a/templates/feeds/latest_title.html b/templates/feeds/latest_title.html new file mode 100644 index 0000000000000000000000000000000000000000..d0b8c11b23bce87dc4fcff131e4bcfc904817976 --- /dev/null +++ b/templates/feeds/latest_title.html @@ -0,0 +1 @@ +{{ obj.graceid }} {{ obj.group.name }} / {{ obj.get_analysisType_display }} diff --git a/templates/gracedb/event_detail.html b/templates/gracedb/event_detail.html new file mode 100644 index 0000000000000000000000000000000000000000..a3266ad9da929b6d4d6e112f60dfc48649a698a3 --- /dev/null +++ b/templates/gracedb/event_detail.html @@ -0,0 +1,21 @@ +{% extends "base.html" %} + +{% block title %}View {{ object.graceid }}{% endblock %} +{% block heading %}View {{ object.graceid }}{% endblock %} + +{% block content %} +<p>{{ message }}</p> + +<table> + <tr><th>ID</th><td>{{ object.graceid }}</td></tr> + <tr><th>Data</th><td> + <a href="{{ object.weburl }}">{{ object.weburl }}</a> + </td></tr> + <tr><th>TWiki</th><td> + <a href="{{ object.wikiurl }}">{{ object.wikiurl }}</a> + </td></tr> + <tr><th>Sumitter</th><td>{{ object.submitter.name }}</td></tr> + <tr><th>Created</th><td>{{ object.created }}</td></tr> +</table> + +{% endblock %} diff --git a/urls.py b/urls.py index 3d7a2033d441d13f3b8216c8b46988c1c9a963d3..50b8bdc4c3c672dc21005cea32c7b135b5b6d5b4 100644 --- a/urls.py +++ b/urls.py @@ -4,13 +4,20 @@ from django.conf.urls.defaults import * from django.contrib import admin admin.autodiscover() +from gracedb.feeds import EventFeed, feedview + +feeds = { + 'latest' : EventFeed +} + urlpatterns = patterns('', - # Example: - # (r'^gracedb/', include('gracedb.foo.urls')), (r'^$', 'gracedb.gracedb.views.index'), (r'^events/', include('gracedb.gracedb.urls')), (r'^cli/create', 'gracedb.gracedb.views.create'), + (r'^feeds/(?P<url>.*)/$', 'django.contrib.syndication.views.feed', + {'feed_dict': feeds}), + (r'^feeds/$', feedview), # Uncomment the admin/doc line below and add 'django.contrib.admindocs' # to INSTALLED_APPS to enable admin documentation: