Newer
Older
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, search, index
from django.conf import settings
FEED_MAX_RESULTS = getattr(settings, 'FEED_MAX_RESULTS', 20)
class EventFeed(Feed):
def get_object(self, bits):
# [] , ['cbc'], ['cbc','lowmass']
objs = Event.objects.order_by("-id")
if 'test' not in bits:
# Filter out test group
testGroup = Group.objects.filter(name__iexact='Test')
if testGroup.count():
objs = objs.exclude(group=testGroup[0])
if len(bits) not in [0,1,2]:
raise FeedDoesNotExist
if not bits:
title = "GraCEDb Events"
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 %s Events" % 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 %s / %s Events" % (group.name, type)
return title, objs[:FEED_MAX_RESULTS]
def title(self, obj):
title, _ = obj
return title
def link(self, obj):
# This is the link around the title for the entire feed.
return reverse("home")
def item_link(self, obj):
return reverse(view, args=[obj.graceid()])
def item_author_name(self, obj):
return obj.submitter.name
def item_pubdate(self, obj):
return obj.created
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))