78 lines
2.6 KiB
Python
78 lines
2.6 KiB
Python
# Copyright The IETF Trust 2007, All Rights Reserved
|
|
|
|
from django.contrib.syndication.views import Feed, FeedDoesNotExist
|
|
from django.utils.feedgenerator import Atom1Feed
|
|
from django.core.urlresolvers import reverse as urlreverse
|
|
from django.template.defaultfilters import truncatewords, truncatewords_html, date as datefilter, linebreaks
|
|
from django.utils.html import strip_tags
|
|
|
|
from ietf.doc.models import Document, State, LastCallDocEvent
|
|
from ietf.doc.utils import augment_events_with_revision
|
|
from ietf.doc.templatetags.ietf_filters import format_textarea
|
|
|
|
class DocumentChangesFeed(Feed):
|
|
feed_type = Atom1Feed
|
|
|
|
def get_object(self, request, name):
|
|
return Document.objects.get(docalias__name=name)
|
|
|
|
def title(self, obj):
|
|
return "Changes for %s" % obj.display_name()
|
|
|
|
def link(self, obj):
|
|
if obj is None:
|
|
raise FeedDoesNotExist
|
|
return urlreverse("doc_history", kwargs=dict(name=obj.canonical_name()))
|
|
|
|
def subtitle(self, obj):
|
|
return "History of change entries for %s." % obj.display_name()
|
|
|
|
def items(self, obj):
|
|
events = obj.docevent_set.all().order_by("-time","-id")
|
|
augment_events_with_revision(obj, events)
|
|
return events
|
|
|
|
def item_title(self, item):
|
|
return u"[%s] %s [rev. %s]" % (item.by, truncatewords(strip_tags(item.desc), 15), item.rev)
|
|
|
|
def item_description(self, item):
|
|
return truncatewords_html(format_textarea(item.desc), 20)
|
|
|
|
def item_pubdate(self, item):
|
|
return item.time
|
|
|
|
def item_author_name(self, item):
|
|
return unicode(item.by)
|
|
|
|
def item_link(self, item):
|
|
return urlreverse("doc_history", kwargs=dict(name=item.doc.canonical_name())) + "#history-%s" % item.pk
|
|
|
|
class InLastCallFeed(Feed):
|
|
title = "Documents in Last Call"
|
|
subtitle = "Announcements for documents in last call."
|
|
feed_type = Atom1Feed
|
|
author_name = 'IESG Secretary'
|
|
link = "/doc/iesg/last-call/"
|
|
|
|
def items(self):
|
|
docs = list(Document.objects.filter(type="draft", states=State.objects.get(type="draft-iesg", slug="lc")))
|
|
for d in docs:
|
|
d.lc_event = d.latest_event(LastCallDocEvent, type="sent_last_call")
|
|
|
|
docs = [d for d in docs if d.lc_event]
|
|
docs.sort(key=lambda d: d.lc_event.expires)
|
|
|
|
return docs
|
|
|
|
def item_title(self, item):
|
|
return u"%s (%s - %s)" % (item.name,
|
|
datefilter(item.lc_event.time, "F j"),
|
|
datefilter(item.lc_event.expires, "F j, Y"))
|
|
|
|
def item_description(self, item):
|
|
return linebreaks(item.lc_event.desc)
|
|
|
|
def item_pubdate(self, item):
|
|
return item.lc_event.time
|
|
|