73 lines
2.3 KiB
Python
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))
|
|
|