summaryrefslogtreecommitdiff
path: root/src/meetingtools
diff options
context:
space:
mode:
authorLeif Johansson <leifj@sunet.se>2011-05-13 11:15:32 +0200
committerLeif Johansson <leifj@sunet.se>2011-05-13 11:15:32 +0200
commit3bb6c880d2d0476245cfe7bf8afa579e4ee5ba11 (patch)
treeb890373234e94c3630660b84a7bbdf961c2ec7c9 /src/meetingtools
parent3b80bf37445404bed158f45daf240aaa5599453e (diff)
replace hand-drawn feeds with the django syndication framework
Diffstat (limited to 'src/meetingtools')
-rw-r--r--src/meetingtools/apps/room/feeds.py76
-rw-r--r--src/meetingtools/apps/room/views.py16
-rw-r--r--src/meetingtools/urls.py5
3 files changed, 84 insertions, 13 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'):
diff --git a/src/meetingtools/urls.py b/src/meetingtools/urls.py
index c6913d7..d927409 100644
--- a/src/meetingtools/urls.py
+++ b/src/meetingtools/urls.py
@@ -4,6 +4,7 @@ from django.conf.urls.defaults import patterns,include
from django.contrib import admin
from meetingtools.settings import ADMIN_MEDIA_ROOT, MEDIA_ROOT
from meetingtools.multiresponse import redirect_to
+from meetingtools.apps.room.feeds import RoomAtomTagFeed,RoomRSSTagField
admin.autodiscover()
def welcome(request):
@@ -29,7 +30,9 @@ urlpatterns = patterns('',
(r'^room/(\d+)/tag$','meetingtools.apps.room.views.tag'),
(r'^room/(\d+)/untag/(.+)$','meetingtools.apps.room.views.untag'),
(r'^widget/\+(.+)$','meetingtools.apps.room.views.widget'),
- (r'^room/\+(.+)\.(?:json|xml|html|htm|atom|rss)$','meetingtools.apps.room.views.list_by_tag'),
+ (r'^room/\+(.+)\.(?:json|html|htm)$','meetingtools.apps.room.views.list_by_tag'),
+ (r'^room/\+(.+)\.(?:atom)$',RoomAtomTagFeed()),
+ (r'^room/\+(.+)\.(?:rss)$',RoomRSSTagField()),
(r'^room/\+(.+)$','meetingtools.apps.room.views.list_by_tag'),
# Uncomment the admin/doc line below to enable admin documentation:
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),