From 5021ed5629dbbb346cdca3189d6d7d8f2981d71d Mon Sep 17 00:00:00 2001 From: Ole Laursen Date: Mon, 16 Dec 2013 16:29:22 +0000 Subject: [PATCH] Port feed setup to new feed API where each feed is a class-based view - Legacy-Id: 6939 --- ietf/doc/feeds.py | 11 ++++------ ietf/feed_urls.py | 21 +++++++++++++++++++ ietf/iesg/feeds.py | 13 +++++------- ietf/iesg/tests.py | 4 +--- ietf/meeting/feeds.py | 10 +++++++-- ietf/templates/feeds/.gitignore | 1 - ietf/templates/feeds/group_description.html | 3 --- ietf/templates/feeds/ipr_description.html | 1 - ietf/templates/feeds/ipr_title.html | 1 - ietf/templates/feeds/liaison_description.html | 15 ------------- ietf/templates/feeds/liaison_title.html | 7 ------- .../feeds/wg-proceedings_description.html | 0 .../templates/feeds/wg-proceedings_title.html | 1 - .../feed_item_description.html} | 0 .../liaisons/feed_item_description.html | 14 +++++++++++++ .../wgcharter/feed_item_description.html | 1 + ietf/urls.py | 19 +---------------- ietf/wgcharter/feeds.py | 11 +++++----- 18 files changed, 60 insertions(+), 73 deletions(-) create mode 100644 ietf/feed_urls.py delete mode 100644 ietf/templates/feeds/.gitignore delete mode 100644 ietf/templates/feeds/group_description.html delete mode 100644 ietf/templates/feeds/ipr_description.html delete mode 100644 ietf/templates/feeds/ipr_title.html delete mode 100644 ietf/templates/feeds/liaison_description.html delete mode 100644 ietf/templates/feeds/liaison_title.html delete mode 100644 ietf/templates/feeds/wg-proceedings_description.html delete mode 100644 ietf/templates/feeds/wg-proceedings_title.html rename ietf/templates/{feeds/iesg-agenda_description.html => iesg/feed_item_description.html} (100%) create mode 100644 ietf/templates/liaisons/feed_item_description.html create mode 100644 ietf/templates/wgcharter/feed_item_description.html diff --git a/ietf/doc/feeds.py b/ietf/doc/feeds.py index c27274041..dea665cf7 100644 --- a/ietf/doc/feeds.py +++ b/ietf/doc/feeds.py @@ -13,14 +13,11 @@ from ietf.doc.models import * from ietf.doc.utils import augment_events_with_revision from ietf.doc.templatetags.ietf_filters import format_textarea -class DocumentChanges(Feed): +class DocumentChangesFeed(Feed): feed_type = Atom1Feed - def get_object(self, bits): - if len(bits) != 1: - raise Document.DoesNotExist - - return Document.objects.get(docalias__name=bits[0]) + def get_object(self, request, name): + return Document.objects.get(docalias__name=name) def title(self, obj): return "Changes for %s" % obj.display_name() @@ -55,7 +52,7 @@ class DocumentChanges(Feed): def item_link(self, item): return self.cached_link + "#history-%s" % item.pk -class InLastCall(Feed): +class InLastCallFeed(Feed): title = "Documents in Last Call" subtitle = "Announcements for documents in last call." feed_type = Atom1Feed diff --git a/ietf/feed_urls.py b/ietf/feed_urls.py new file mode 100644 index 000000000..95a9d50c1 --- /dev/null +++ b/ietf/feed_urls.py @@ -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.*)/$', RedirectView.as_view(url='/feed/document-changes/%(remainder)s/')), + (r'^document-changes/(?P[A-Za-z0-9._+-]+)/$', DocumentChangesFeed()), + (r'^last-call/$', InLastCallFeed()), + (r'^group-changes/(?P[a-zA-Z0-9-]+)/$', GroupChangesFeed()), + (r'^iesg-agenda/$', IESGAgendaFeed()), + (r'^ipr/$', LatestIprDisclosuresFeed()), + (r'^liaison/(?Precent|from|to|subject)/(?:(?P[^/]+)/)?$', LiaisonStatementsFeed()), + (r'^wg-proceedings/$', LatestMeetingMaterialFeed()), +) diff --git a/ietf/iesg/feeds.py b/ietf/iesg/feeds.py index d9111e579..01ae1e4cb 100644 --- a/ietf/iesg/feeds.py +++ b/ietf/iesg/feeds.py @@ -1,20 +1,17 @@ -# Copyright The IETF Trust 2007, 2008, All Rights Reserved - import datetime -from django.conf import settings from django.contrib.syndication.views import Feed 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" - link = settings.IDTRACKER_BASE_URL + "/iesg/agenda/" + link = "/iesg/agenda/" feed_type = Atom1Feed + description_template = "iesg/feed_item_description.html" def items(self): - from ietf.doc.models import TelechatDocEvent docs = Document.objects.filter(docevent__telechatdocevent__telechat_date__gte=datetime.date.today()).distinct() for d in docs: d.latest_telechat_event = d.latest_event(TelechatDocEvent, type="scheduled_for_telechat") @@ -23,7 +20,7 @@ class IESGAgenda(Feed): return docs def item_categories(self, doc): - return [ str(doc.telechat_date) ] + return [ str(doc.latest_telechat_event.time.date()) ] def item_pubdate(self, doc): return doc.latest_telechat_event.time diff --git a/ietf/iesg/tests.py b/ietf/iesg/tests.py index 16c23ebc6..4e8f7f7bd 100644 --- a/ietf/iesg/tests.py +++ b/ietf/iesg/tests.py @@ -231,9 +231,7 @@ class IESGAgendaTests(TestCase): # print n, s.get("docs") if "docs" in s else s["title"] def test_feed(self): - url = "/feed/iesg-agenda/" - - r = self.client.get(url) + r = self.client.get("/feed/iesg-agenda/") self.assertEquals(r.status_code, 200) for d in self.telechat_docs.values(): diff --git a/ietf/meeting/feeds.py b/ietf/meeting/feeds.py index 915387f1e..0182ccf7a 100644 --- a/ietf/meeting/feeds.py +++ b/ietf/meeting/feeds.py @@ -3,14 +3,14 @@ import re, os, datetime from django.contrib.syndication.views import Feed from django.utils.feedgenerator import Atom1Feed from django.conf import settings +from django.utils.html import escape from ietf.doc.models import Document -class LatestMeetingMaterial(Feed): +class LatestMeetingMaterialFeed(Feed): feed_type = Atom1Feed link = "/meeting/" language = "en" - feed_url = "/feed/wg-proceedings/" base_url = "http://www3.ietf.org/proceedings/" def items(self): @@ -30,6 +30,12 @@ class LatestMeetingMaterial(Feed): def title(self, obj): 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): return item['link'] diff --git a/ietf/templates/feeds/.gitignore b/ietf/templates/feeds/.gitignore deleted file mode 100644 index a74b07aee..000000000 --- a/ietf/templates/feeds/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/*.pyc diff --git a/ietf/templates/feeds/group_description.html b/ietf/templates/feeds/group_description.html deleted file mode 100644 index 8cb921700..000000000 --- a/ietf/templates/feeds/group_description.html +++ /dev/null @@ -1,3 +0,0 @@ -{# Copyright The IETF Trust 2011, All Rights Reserved #} -{% load ietf_filters %} -

{{ obj.desc|safe|linebreaksbr }}

diff --git a/ietf/templates/feeds/ipr_description.html b/ietf/templates/feeds/ipr_description.html deleted file mode 100644 index fb46d93cf..000000000 --- a/ietf/templates/feeds/ipr_description.html +++ /dev/null @@ -1 +0,0 @@ -{{ obj|escape }} diff --git a/ietf/templates/feeds/ipr_title.html b/ietf/templates/feeds/ipr_title.html deleted file mode 100644 index 9c9b28345..000000000 --- a/ietf/templates/feeds/ipr_title.html +++ /dev/null @@ -1 +0,0 @@ -{% load ietf_filters %}{{ obj|safe }} diff --git a/ietf/templates/feeds/liaison_description.html b/ietf/templates/feeds/liaison_description.html deleted file mode 100644 index 871a18348..000000000 --- a/ietf/templates/feeds/liaison_description.html +++ /dev/null @@ -1,15 +0,0 @@ -{# Copyright The IETF Trust 2007, All Rights Reserved #} -{% if obj.by_secretariat %} -

Attached Document(s)

-{% if obj.uploads_set.count %} - -{% else %} -NONE -{% endif %} -{% else %} -{{ obj.body|truncatewords:"30"|wordwrap:"71"|escape|linebreaksbr }} -{% endif %} diff --git a/ietf/templates/feeds/liaison_title.html b/ietf/templates/feeds/liaison_title.html deleted file mode 100644 index 66fe7b0f3..000000000 --- a/ietf/templates/feeds/liaison_title.html +++ /dev/null @@ -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 %} diff --git a/ietf/templates/feeds/wg-proceedings_description.html b/ietf/templates/feeds/wg-proceedings_description.html deleted file mode 100644 index e69de29bb..000000000 diff --git a/ietf/templates/feeds/wg-proceedings_title.html b/ietf/templates/feeds/wg-proceedings_title.html deleted file mode 100644 index 73e14b927..000000000 --- a/ietf/templates/feeds/wg-proceedings_title.html +++ /dev/null @@ -1 +0,0 @@ -{{ obj.group_acronym }}: {{ obj.title|escape }} diff --git a/ietf/templates/feeds/iesg-agenda_description.html b/ietf/templates/iesg/feed_item_description.html similarity index 100% rename from ietf/templates/feeds/iesg-agenda_description.html rename to ietf/templates/iesg/feed_item_description.html diff --git a/ietf/templates/liaisons/feed_item_description.html b/ietf/templates/liaisons/feed_item_description.html new file mode 100644 index 000000000..7575aee35 --- /dev/null +++ b/ietf/templates/liaisons/feed_item_description.html @@ -0,0 +1,14 @@ +{{ obj.body|truncatewords:"30"|wordwrap:"71"|escape|linebreaksbr }} + +{% with obj.attachments.all as attachments %} +

Attached Document{{ attachments|pluralize }}

+ {% if attachments %} + + {% else %} +

NONE

+ {% endif %} +{% endwith %} diff --git a/ietf/templates/wgcharter/feed_item_description.html b/ietf/templates/wgcharter/feed_item_description.html new file mode 100644 index 000000000..9414a3f9e --- /dev/null +++ b/ietf/templates/wgcharter/feed_item_description.html @@ -0,0 +1 @@ +

{{ obj.desc|safe|linebreaksbr }}

diff --git a/ietf/urls.py b/ietf/urls.py index acb228b37..516c10006 100644 --- a/ietf/urls.py +++ b/ietf/urls.py @@ -4,13 +4,6 @@ from django.conf.urls import patterns, include, handler404, handler500 from django.contrib import admin 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.ipr.sitemaps import IPRMap @@ -28,16 +21,6 @@ except KeyError: from dajaxice.core import 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 = { 'liaison': LiaisonMap, 'ipr': IPRMap, @@ -54,7 +37,7 @@ urlpatterns = patterns('', (r'^doc/', include('ietf.doc.urls')), (r'^drafts/', include('ietf.doc.redirect_drafts_urls')), (r'^feed/comments/(?P.*)/$', RedirectView.as_view(url='/feed/document-changes/%(remainder)s/')), - (r'^feed/(?P.*)/$', 'django.contrib.syndication.views.Feed', { 'feed_dict': feeds }), + (r'^feed/', include('ietf.feed_urls')), (r'^help/', include('ietf.help.urls')), (r'^idtracker/', include('ietf.doc.redirect_idtracker_urls')), (r'^iesg/', include('ietf.iesg.urls')), diff --git a/ietf/wgcharter/feeds.py b/ietf/wgcharter/feeds.py index d536cae81..799a2f796 100644 --- a/ietf/wgcharter/feeds.py +++ b/ietf/wgcharter/feeds.py @@ -12,13 +12,12 @@ from django.template.defaultfilters import truncatewords from ietf.group.models import Group, GroupEvent from ietf.doc.models import DocEvent -class GroupChanges(Feed): +class GroupChangesFeed(Feed): feed_type = Atom1Feed - description_template = "feeds/group_description.html" - def get_object(self, bits): - if len(bits) != 1: - raise Group.DoesNotExist - return Group.objects.get(acronym=bits[0]) + description_template = "wgcharter/feed_item_description.html" + + def get_object(self, request, acronym): + return Group.objects.get(acronym=acronym) def title(self, obj): return u"Changes for %s %s" % (obj.acronym, obj.type)