Port feed setup to new feed API where each feed is a class-based view

- Legacy-Id: 6939
This commit is contained in:
Ole Laursen 2013-12-16 16:29:22 +00:00
parent d86789608a
commit 5021ed5629
18 changed files with 60 additions and 73 deletions

View file

@ -13,14 +13,11 @@ from ietf.doc.models import *
from ietf.doc.utils import augment_events_with_revision from ietf.doc.utils import augment_events_with_revision
from ietf.doc.templatetags.ietf_filters import format_textarea from ietf.doc.templatetags.ietf_filters import format_textarea
class DocumentChanges(Feed): class DocumentChangesFeed(Feed):
feed_type = Atom1Feed feed_type = Atom1Feed
def get_object(self, bits): def get_object(self, request, name):
if len(bits) != 1: return Document.objects.get(docalias__name=name)
raise Document.DoesNotExist
return Document.objects.get(docalias__name=bits[0])
def title(self, obj): def title(self, obj):
return "Changes for %s" % obj.display_name() return "Changes for %s" % obj.display_name()
@ -55,7 +52,7 @@ class DocumentChanges(Feed):
def item_link(self, item): def item_link(self, item):
return self.cached_link + "#history-%s" % item.pk return self.cached_link + "#history-%s" % item.pk
class InLastCall(Feed): class InLastCallFeed(Feed):
title = "Documents in Last Call" title = "Documents in Last Call"
subtitle = "Announcements for documents in last call." subtitle = "Announcements for documents in last call."
feed_type = Atom1Feed feed_type = Atom1Feed

21
ietf/feed_urls.py Normal file
View file

@ -0,0 +1,21 @@
from django.conf.urls import patterns, url
from django.views.generic import RedirectView
from ietf.doc.feeds import DocumentChangesFeed, InLastCallFeed
from ietf.wgcharter.feeds import GroupChangesFeed
from ietf.iesg.feeds import IESGAgendaFeed
from ietf.ipr.feeds import LatestIprDisclosuresFeed
from ietf.liaisons.feeds import LiaisonStatementsFeed
from ietf.meeting.feeds import LatestMeetingMaterialFeed
urlpatterns = patterns(
'',
(r'^comments/(?P<remainder>.*)/$', RedirectView.as_view(url='/feed/document-changes/%(remainder)s/')),
(r'^document-changes/(?P<name>[A-Za-z0-9._+-]+)/$', DocumentChangesFeed()),
(r'^last-call/$', InLastCallFeed()),
(r'^group-changes/(?P<acronym>[a-zA-Z0-9-]+)/$', GroupChangesFeed()),
(r'^iesg-agenda/$', IESGAgendaFeed()),
(r'^ipr/$', LatestIprDisclosuresFeed()),
(r'^liaison/(?P<kind>recent|from|to|subject)/(?:(?P<search>[^/]+)/)?$', LiaisonStatementsFeed()),
(r'^wg-proceedings/$', LatestMeetingMaterialFeed()),
)

View file

@ -1,20 +1,17 @@
# Copyright The IETF Trust 2007, 2008, All Rights Reserved
import datetime import datetime
from django.conf import settings
from django.contrib.syndication.views import Feed from django.contrib.syndication.views import Feed
from django.utils.feedgenerator import Atom1Feed from django.utils.feedgenerator import Atom1Feed
from ietf.doc.models import Document from ietf.doc.models import Document, TelechatDocEvent
class IESGAgenda(Feed): class IESGAgendaFeed(Feed):
title = "Documents on Future IESG Telechat Agendas" title = "Documents on Future IESG Telechat Agendas"
link = settings.IDTRACKER_BASE_URL + "/iesg/agenda/" link = "/iesg/agenda/"
feed_type = Atom1Feed feed_type = Atom1Feed
description_template = "iesg/feed_item_description.html"
def items(self): def items(self):
from ietf.doc.models import TelechatDocEvent
docs = Document.objects.filter(docevent__telechatdocevent__telechat_date__gte=datetime.date.today()).distinct() docs = Document.objects.filter(docevent__telechatdocevent__telechat_date__gte=datetime.date.today()).distinct()
for d in docs: for d in docs:
d.latest_telechat_event = d.latest_event(TelechatDocEvent, type="scheduled_for_telechat") d.latest_telechat_event = d.latest_event(TelechatDocEvent, type="scheduled_for_telechat")
@ -23,7 +20,7 @@ class IESGAgenda(Feed):
return docs return docs
def item_categories(self, doc): def item_categories(self, doc):
return [ str(doc.telechat_date) ] return [ str(doc.latest_telechat_event.time.date()) ]
def item_pubdate(self, doc): def item_pubdate(self, doc):
return doc.latest_telechat_event.time return doc.latest_telechat_event.time

View file

@ -231,9 +231,7 @@ class IESGAgendaTests(TestCase):
# print n, s.get("docs") if "docs" in s else s["title"] # print n, s.get("docs") if "docs" in s else s["title"]
def test_feed(self): def test_feed(self):
url = "/feed/iesg-agenda/" r = self.client.get("/feed/iesg-agenda/")
r = self.client.get(url)
self.assertEquals(r.status_code, 200) self.assertEquals(r.status_code, 200)
for d in self.telechat_docs.values(): for d in self.telechat_docs.values():

View file

@ -3,14 +3,14 @@ import re, os, datetime
from django.contrib.syndication.views import Feed from django.contrib.syndication.views import Feed
from django.utils.feedgenerator import Atom1Feed from django.utils.feedgenerator import Atom1Feed
from django.conf import settings from django.conf import settings
from django.utils.html import escape
from ietf.doc.models import Document from ietf.doc.models import Document
class LatestMeetingMaterial(Feed): class LatestMeetingMaterialFeed(Feed):
feed_type = Atom1Feed feed_type = Atom1Feed
link = "/meeting/" link = "/meeting/"
language = "en" language = "en"
feed_url = "/feed/wg-proceedings/"
base_url = "http://www3.ietf.org/proceedings/" base_url = "http://www3.ietf.org/proceedings/"
def items(self): def items(self):
@ -30,6 +30,12 @@ class LatestMeetingMaterial(Feed):
def title(self, obj): def title(self, obj):
return "Meeting Materials Activity" return "Meeting Materials Activity"
def item_title(self, item):
return u"%s: %s" % (item["group_acronym"], escape(item["title"]))
def item_description(self, item):
return ""
def item_link(self, item): def item_link(self, item):
return item['link'] return item['link']

View file

@ -1 +0,0 @@
/*.pyc

View file

@ -1,3 +0,0 @@
{# Copyright The IETF Trust 2011, All Rights Reserved #}
{% load ietf_filters %}
<p>{{ obj.desc|safe|linebreaksbr }}</p>

View file

@ -1 +0,0 @@
{{ obj|escape }}

View file

@ -1 +0,0 @@
{% load ietf_filters %}{{ obj|safe }}

View file

@ -1,15 +0,0 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% if obj.by_secretariat %}
<h3>Attached Document(s)</h3>
{% if obj.uploads_set.count %}
<ul>
{% for file in obj.uploads_set.all %}
<li><a href="https://datatracker.ietf.org/documents/LIAISON/file{{ file.file_id }}{{ file.file_extension }}">{{ file.file_title }}</a><br>
{% endfor %}
</ul>
{% else %}
NONE
{% endif %}
{% else %}
{{ obj.body|truncatewords:"30"|wordwrap:"71"|escape|linebreaksbr }}
{% endif %}

View file

@ -1,7 +0,0 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% load ietf_filters %}
{% if obj.by_secretariat %}
Liaison statement submitted by email from {{ obj.from_body|safe }} to {{ obj.submitter_name|safe }} on {{ obj.submitted_date }}
{% else %}
{{ obj.title|safe }}
{% endif %}

View file

@ -1 +0,0 @@
{{ obj.group_acronym }}: {{ obj.title|escape }}

View file

@ -0,0 +1,14 @@
{{ obj.body|truncatewords:"30"|wordwrap:"71"|escape|linebreaksbr }}
{% with obj.attachments.all as attachments %}
<h3>Attached Document{{ attachments|pluralize }}</h3>
{% if attachments %}
<ul>
{% for doc in attachments %}
<li><a href="https://datatracker.ietf.org/documents/LIAISON/{{ doc.external_url }}">{{ doc.title }}</a><br>
{% endfor %}
</ul>
{% else %}
<p>NONE</p>
{% endif %}
{% endwith %}

View file

@ -0,0 +1 @@
<p>{{ obj.desc|safe|linebreaksbr }}</p>

View file

@ -4,13 +4,6 @@ from django.conf.urls import patterns, include, handler404, handler500
from django.contrib import admin from django.contrib import admin
from django.views.generic import RedirectView, TemplateView from django.views.generic import RedirectView, TemplateView
from ietf.iesg.feeds import IESGAgenda
from ietf.doc.feeds import DocumentChanges, InLastCall
from ietf.ipr.feeds import LatestIprDisclosures
from ietf.meeting.feeds import LatestMeetingMaterial
from ietf.liaisons.feeds import Liaisons
from ietf.wgcharter.feeds import GroupChanges
from ietf.liaisons.sitemaps import LiaisonMap from ietf.liaisons.sitemaps import LiaisonMap
from ietf.ipr.sitemaps import IPRMap from ietf.ipr.sitemaps import IPRMap
@ -28,16 +21,6 @@ except KeyError:
from dajaxice.core import dajaxice_autodiscover from dajaxice.core import dajaxice_autodiscover
dajaxice_autodiscover() dajaxice_autodiscover()
feeds = {
'iesg-agenda': IESGAgenda,
'last-call': InLastCall,
'document-changes': DocumentChanges,
'group-changes': GroupChanges,
'ipr': LatestIprDisclosures,
'liaison': Liaisons,
'wg-proceedings' : LatestMeetingMaterial,
}
sitemaps = { sitemaps = {
'liaison': LiaisonMap, 'liaison': LiaisonMap,
'ipr': IPRMap, 'ipr': IPRMap,
@ -54,7 +37,7 @@ urlpatterns = patterns('',
(r'^doc/', include('ietf.doc.urls')), (r'^doc/', include('ietf.doc.urls')),
(r'^drafts/', include('ietf.doc.redirect_drafts_urls')), (r'^drafts/', include('ietf.doc.redirect_drafts_urls')),
(r'^feed/comments/(?P<remainder>.*)/$', RedirectView.as_view(url='/feed/document-changes/%(remainder)s/')), (r'^feed/comments/(?P<remainder>.*)/$', RedirectView.as_view(url='/feed/document-changes/%(remainder)s/')),
(r'^feed/(?P<url>.*)/$', 'django.contrib.syndication.views.Feed', { 'feed_dict': feeds }), (r'^feed/', include('ietf.feed_urls')),
(r'^help/', include('ietf.help.urls')), (r'^help/', include('ietf.help.urls')),
(r'^idtracker/', include('ietf.doc.redirect_idtracker_urls')), (r'^idtracker/', include('ietf.doc.redirect_idtracker_urls')),
(r'^iesg/', include('ietf.iesg.urls')), (r'^iesg/', include('ietf.iesg.urls')),

View file

@ -12,13 +12,12 @@ from django.template.defaultfilters import truncatewords
from ietf.group.models import Group, GroupEvent from ietf.group.models import Group, GroupEvent
from ietf.doc.models import DocEvent from ietf.doc.models import DocEvent
class GroupChanges(Feed): class GroupChangesFeed(Feed):
feed_type = Atom1Feed feed_type = Atom1Feed
description_template = "feeds/group_description.html" description_template = "wgcharter/feed_item_description.html"
def get_object(self, bits):
if len(bits) != 1: def get_object(self, request, acronym):
raise Group.DoesNotExist return Group.objects.get(acronym=acronym)
return Group.objects.get(acronym=bits[0])
def title(self, obj): def title(self, obj):
return u"Changes for %s %s" % (obj.acronym, obj.type) return u"Changes for %s %s" % (obj.acronym, obj.type)