Port IPR and liaisons feed setup to new feed API too
- Legacy-Id: 6943
This commit is contained in:
parent
5021ed5629
commit
e6b12350d2
|
@ -5,10 +5,11 @@ import datetime
|
|||
from django.contrib.syndication.views import Feed
|
||||
from django.utils.feedgenerator import Atom1Feed
|
||||
from django.core.urlresolvers import reverse_lazy
|
||||
from django.utils.safestring import mark_safe
|
||||
|
||||
from ietf.ipr.models import IprDetail
|
||||
|
||||
class LatestIprDisclosures(Feed):
|
||||
class LatestIprDisclosuresFeed(Feed):
|
||||
feed_type = Atom1Feed
|
||||
title = "IPR Disclosures to the IETF"
|
||||
link = reverse_lazy('ipr_showlist')
|
||||
|
@ -18,16 +19,24 @@ class LatestIprDisclosures(Feed):
|
|||
|
||||
def items(self):
|
||||
return IprDetail.objects.filter(status__in=[1,3]).order_by('-submitted_date')[:30]
|
||||
|
||||
def item_title(self, item):
|
||||
return mark_safe(item.title)
|
||||
|
||||
def item_description(self, item):
|
||||
return unicode(item.title)
|
||||
|
||||
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.submitted_date, datetime.time(0,0,0))
|
||||
|
||||
def item_author_name(self, item):
|
||||
s = item.get_submitter()
|
||||
if s:
|
||||
return s.name
|
||||
return None
|
||||
|
||||
def item_author_email(self, item):
|
||||
s = item.get_submitter()
|
||||
if s:
|
||||
|
|
|
@ -5,8 +5,9 @@ import re, datetime
|
|||
from django.conf import settings
|
||||
from django.contrib.syndication.views import Feed, FeedDoesNotExist
|
||||
from django.utils.feedgenerator import Atom1Feed
|
||||
from django.template.loader import render_to_string
|
||||
from django.db.models import Q
|
||||
from django.core.urlresolvers import reverse as urlreverse
|
||||
from django.core.urlresolvers import reverse as urlreverse, reverse_lazy
|
||||
|
||||
from ietf.group.models import Group
|
||||
from ietf.liaisons.models import LiaisonStatement
|
||||
|
@ -14,23 +15,25 @@ from ietf.liaisons.models import LiaisonStatement
|
|||
# A slightly funny feed class, the 'object' is really
|
||||
# just a dict with some parameters that items() uses
|
||||
# to construct a queryset.
|
||||
class Liaisons(Feed):
|
||||
class LiaisonStatementsFeed(Feed):
|
||||
feed_type = Atom1Feed
|
||||
link = reverse_lazy("liaison_list")
|
||||
description_template = "liaisons/feed_item_description.html"
|
||||
|
||||
def get_object(self, bits):
|
||||
obj = {}
|
||||
if bits[0] == 'recent':
|
||||
if len(bits) != 1:
|
||||
raise FeedDoesNotExist
|
||||
obj['title'] = 'Recent Liaison Statements'
|
||||
def get_object(self, request, kind, search=None):
|
||||
obj = {}
|
||||
|
||||
if kind == 'recent':
|
||||
obj['title'] = 'Recent Liaison Statements'
|
||||
obj['limit'] = 15
|
||||
return obj
|
||||
|
||||
if bits[0] == 'from':
|
||||
if len(bits) != 2:
|
||||
raise FeedDoesNotExist
|
||||
if kind == 'from':
|
||||
if not search:
|
||||
raise FeedDoesNotExist
|
||||
|
||||
try:
|
||||
group = Group.objects.get(acronym=bits[1])
|
||||
group = Group.objects.get(acronym=search)
|
||||
obj['filter'] = { 'from_group': group }
|
||||
obj['title'] = u'Liaison Statements from %s' % group.name
|
||||
return obj
|
||||
|
@ -38,54 +41,35 @@ class Liaisons(Feed):
|
|||
# turn all-nonword characters into one-character
|
||||
# wildcards to make it easier to construct a URL that
|
||||
# matches
|
||||
search_string = re.sub(r"[^a-zA-Z1-9]", ".", bits[1])
|
||||
statements = LiaisonStatement.objects.filter(from_name__iregex=search_string)
|
||||
if statements:
|
||||
name = statements[0].from_name
|
||||
obj['filter'] = { 'from_name': name }
|
||||
obj['title'] = u'Liaison Statements from %s' % name
|
||||
return obj
|
||||
else:
|
||||
search_string = re.sub(r"[^a-zA-Z1-9]", ".", search)
|
||||
statement = LiaisonStatement.objects.filter(from_name__iregex=search_string).first()
|
||||
if not statement:
|
||||
raise FeedDoesNotExist
|
||||
|
||||
if bits[0] == 'to':
|
||||
if len(bits) != 2:
|
||||
raise FeedDoesNotExist
|
||||
obj['filter'] = dict(to_name__icontains=bits[1])
|
||||
obj['title'] = 'Liaison Statements where to matches %s' % bits[1]
|
||||
name = statement.from_name
|
||||
obj['filter'] = { 'from_name': name }
|
||||
obj['title'] = u'Liaison Statements from %s' % name
|
||||
return obj
|
||||
|
||||
if kind == 'to':
|
||||
if not search:
|
||||
raise FeedDoesNotExist
|
||||
|
||||
obj['filter'] = dict(to_name__icontains=search)
|
||||
obj['title'] = 'Liaison Statements where to matches %s' % search
|
||||
return obj
|
||||
|
||||
if bits[0] == 'subject':
|
||||
if len(bits) != 2:
|
||||
if kind == 'subject':
|
||||
if not search:
|
||||
raise FeedDoesNotExist
|
||||
|
||||
obj['q'] = [ Q(title__icontains=bits[1]) | Q(attachments__title__icontains=bits[1]) ]
|
||||
obj['title'] = 'Liaison Statements where subject matches %s' % bits[1]
|
||||
return obj
|
||||
obj['q'] = [ Q(title__icontains=search) | Q(attachments__title__icontains=search) ]
|
||||
obj['title'] = 'Liaison Statements where subject matches %s' % search
|
||||
return obj
|
||||
|
||||
raise FeedDoesNotExist
|
||||
|
||||
def get_feed(self, url=None):
|
||||
if url:
|
||||
return Feed.get_feed(self, url=url)
|
||||
else:
|
||||
raise FeedDoesNotExist
|
||||
|
||||
def title(self, obj):
|
||||
return obj['title']
|
||||
|
||||
def link(self, obj):
|
||||
# no real equivalent for any objects
|
||||
return '/liaison/'
|
||||
|
||||
def item_link(self, obj):
|
||||
# no real equivalent for any objects
|
||||
return urlreverse("liaison_detail", kwargs={ "object_id": obj.pk })
|
||||
|
||||
def description(self, obj):
|
||||
return self.title(obj)
|
||||
|
||||
def items(self, obj):
|
||||
# Start with the common queryset
|
||||
qs = LiaisonStatement.objects.all().order_by("-submitted")
|
||||
if obj.has_key('q'):
|
||||
qs = qs.filter(*obj['q'])
|
||||
|
@ -95,6 +79,18 @@ class Liaisons(Feed):
|
|||
qs = qs[:obj['limit']]
|
||||
return qs
|
||||
|
||||
def title(self, obj):
|
||||
return obj['title']
|
||||
|
||||
def description(self, obj):
|
||||
return self.title(obj)
|
||||
|
||||
def item_title(self, item):
|
||||
return render_to_string("liaisons/liaison_title.html", { 'liaison': item }).strip()
|
||||
|
||||
def item_link(self, item):
|
||||
return urlreverse("liaison_detail", kwargs={ "object_id": item.pk })
|
||||
|
||||
def item_pubdate(self, item):
|
||||
# this method needs to return a datetime instance, even
|
||||
# though the database has only date, not time
|
||||
|
|
|
@ -103,7 +103,7 @@ class LiaisonTests(TestCase):
|
|||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(liaison.title in r.content)
|
||||
|
||||
r = self.client.get('/feed/liaison/from/%s/' % liaison.from_group.acronym)
|
||||
r = self.client.get('/feed/liaison/from/%s/' % liaison.from_group.name)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(liaison.title in r.content)
|
||||
|
||||
|
|
Loading…
Reference in a new issue