datatracker/ietf/idtracker/feeds.py
Ole Laursen 5d291f222c Remove .state and .*_state on Document in favour of generic states
mapping, port the codebase to use these states
 - Legacy-Id: 3660
2011-11-16 18:18:06 +00:00

73 lines
2.3 KiB
Python

# Copyright The IETF Trust 2007, All Rights Reserved
from django.conf import settings
from django.contrib.syndication.feeds import Feed, FeedDoesNotExist
from django.utils.feedgenerator import Atom1Feed
from ietf.idtracker.models import IDInternal
import datetime
import re
class DocumentComments(Feed):
feed_type = Atom1Feed
def get_object(self, bits):
if len(bits) != 1:
raise IDInternal.DoesNotExist
rfc = re.match('rfc(\d+)', bits[0])
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
return IDInternal.objects.get(docalias__name=bits[0])
if rfc:
return IDInternal.objects.get(draft=int(rfc.group(1)), rfc_flag=1)
else:
return IDInternal.objects.get(draft__filename=bits[0], rfc_flag=0)
def title(self, obj):
# filename is a function for RFCs and an attribute for I-Ds.
# This works transparently for templates but is not transparent
# for python.
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
return "I-D Tracker comments for %s" % obj.filename
if obj.rfc_flag:
filename = obj.document().filename()
else:
filename = obj.document().filename
return "I-D Tracker comments for %s" % filename
def link(self, obj):
if obj is None:
raise FeedDoesNotExist
return obj.get_absolute_url()
def description(self, obj):
return self.title(obj)
def items(self, obj):
return obj.public_comments().order_by("-date","-id")
def item_pubdate(self, item):
return item.datetime()
def item_author_name(self, item):
return item.get_author()
class InLastCall(Feed):
title = "Documents in Last Call"
feed_type = Atom1Feed
author_name = 'IESG Secretary'
link = "/idtracker/status/last-call/"
def items(self):
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
ret = list(IDInternal.objects.filter(states__type="draft-iesg", states__slug="lc"))
else:
ret = list(IDInternal.objects.filter(primary_flag=1).filter(cur_state__state='In Last Call'))
ret.sort(key=lambda item: (item.document().lc_expiration_date or datetime.date.today()))
return ret
def item_pubdate(self, item):
# this method needs to return a datetime instance, even
# though the database has only date, not time
return datetime.datetime.combine((item.document().lc_sent_date or datetime.datetime.now().date()), datetime.time(0,0,0))