diff options
author | Leif Johansson <leifj@sunet.se> | 2011-05-13 11:15:32 +0200 |
---|---|---|
committer | Leif Johansson <leifj@sunet.se> | 2011-05-13 11:15:32 +0200 |
commit | 3bb6c880d2d0476245cfe7bf8afa579e4ee5ba11 (patch) | |
tree | b890373234e94c3630660b84a7bbdf961c2ec7c9 /src/meetingtools/apps | |
parent | 3b80bf37445404bed158f45daf240aaa5599453e (diff) |
replace hand-drawn feeds with the django syndication framework
Diffstat (limited to 'src/meetingtools/apps')
-rw-r--r-- | src/meetingtools/apps/room/feeds.py | 76 | ||||
-rw-r--r-- | src/meetingtools/apps/room/views.py | 16 |
2 files changed, 80 insertions, 12 deletions
diff --git a/src/meetingtools/apps/room/feeds.py b/src/meetingtools/apps/room/feeds.py new file mode 100644 index 0000000..0254339 --- /dev/null +++ b/src/meetingtools/apps/room/feeds.py @@ -0,0 +1,76 @@ +''' +Created on May 13, 2011 + +@author: leifj +''' + +from django.contrib.syndication.views import Feed +from meetingtools.apps.room.models import Room +from tagging.models import TaggedItem +from meetingtools.settings import BASE_URL +from django.utils.feedgenerator import Atom1Feed, Rss201rev2Feed + +class TagsWrapper(object): + + def __init__(self,tn): + self.tags = tn.split('+') + self.rooms = TaggedItem.objects.get_by_model(Room, tn.split('+')) + + def title(self): + return "Rooms tagged with %s" % " and ".join(self.tags) + + def description(self): + return self.title() + + def link(self,ext): + return "%s/room/+%s.%s" % (BASE_URL,"+".join(self.tags),ext) + +class RoomTagFeed(Feed): + + item_author_name = 'SUNET e-meeting tools' + + def ext(self): + if self.feed_type == Atom1Feed: + return "atom" + + if self.feed_type == Rss201rev2Feed: + return "rss" + + return "rss" + + def get_object(self,request,tn): + return TagsWrapper(tn) + + def title(self,t): + return t.title() + + def link(self,t): + return t.link(self.ext()) + + def description(self,t): + return t.description() + + def items(self,t): + return t.rooms + + def item_title(self,room): + return room.name + + def item_description(self,room): + return room.description + + def item_link(self,room): + return room.go_url() + + def item_guid(self,room): + return room.permalink() + + def item_pubdate(self,room): + return room.lastupdated + + +class RoomAtomTagFeed(RoomTagFeed): + feed_type = Atom1Feed + +class RoomRSSTagField(RoomTagFeed): + feed_type = Rss201rev2Feed
\ No newline at end of file diff --git a/src/meetingtools/apps/room/views.py b/src/meetingtools/apps/room/views.py index d0c5f37..3bbc74a 100644 --- a/src/meetingtools/apps/room/views.py +++ b/src/meetingtools/apps/room/views.py @@ -395,26 +395,18 @@ def widget(request,tn): title = 'Rooms tagged with %s' % " and ".join(tags) now = timeAsrfc822( datetime.now() ) return respond_to(request, - {'text/html':'apps/room/widget-test.html', - 'application/json': json_response([_room2dict(room) for room in rooms]), - 'application/rss+xml': 'apps/room/rss2.xml', - 'text/rss': 'apps/room/rss2.xml'}, - {'title':title,'description':title ,'edit':False,'date': now,'tags': tn,'rooms': [_room2dict(room) for room in rooms.all()]}) + {'text/html':'apps/room/widget-test.html'}, + {'title':title,'description':title ,'edit':False,'date': now,'tags': tn,'rooms':rooms.all()}) # should not require login def list_by_tag(request,tn): tags = tn.split('+') rooms = TaggedItem.objects.get_by_model(Room, tags) title = 'Rooms tagged with %s' % " and ".join(tags) - now = rfc3339_date(datetime.now()) - now822 = timeAsrfc822( datetime.now() ) return respond_to(request, {'text/html':'apps/room/list.html', - 'application/json': json_response([_room2dict(room) for room in rooms]), - 'application/atom+xml': 'apps/room/atom.xml', - 'application/rss+xml': 'apps/room/rss2.xml', - 'text/rss': 'apps/room/rss2.xml'}, - {'title':title,'description':title ,'edit':False,'baseurl': BASE_URL,'rfc3339_date': now,'rfc822_date': now822,'tags': tn,'rooms':[_room2dict(room) for room in rooms.all()]}) + 'application/json': json_response([_room2dict(room) for room in rooms])}, + {'title':title,'description':title ,'edit':False,'baseurl': BASE_URL,'tags': tn,'rooms':rooms.all()}) def _can_tag(request,tag): if tag in ('selfcleaning','public','private'): |