diff gpp/forums/feeds.py @ 170:6f14970b103a

Implement #52 Forums RSS feeds.
author Brian Neal <bgneal@gmail.com>
date Thu, 11 Feb 2010 02:29:03 +0000
parents
children b7ac381996e8
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gpp/forums/feeds.py	Thu Feb 11 02:29:03 2010 +0000
@@ -0,0 +1,75 @@
+"""This file contains the feed class for the forums application."""
+import datetime
+
+from django.contrib.syndication.feeds import Feed
+from django.core.exceptions import ObjectDoesNotExist
+
+from forums.models import Forum
+from forums.models import Post
+
+BASE_YEAR = 2010
+
+class ForumsFeed(Feed):
+    """The Feed class for the forums application"""
+
+    def get_object(self, bits):
+        # only return public forums
+        if len(bits) == 1:
+            forum = Forum.objects.get(slug=bits[0])
+            if forum.category.groups.count() > 0:
+                raise ObjectDoesNotExist
+            return forum
+
+        elif len(bits) == 0:
+            # return None to indicate we want a combined feed
+            return None
+
+    def title(self, obj):
+        if obj is None:
+            forum_name = 'Combined'
+        else:
+            forum_name = obj.name
+
+        return 'SurfGuitar101.com %s Forum Feed' % forum_name
+
+    def link(self, obj):
+        if obj is None:
+            bits = ''
+        else:
+            bits = obj.slug + '/'
+
+        return '/feeds/forums/' + bits
+
+    def description(self, obj):
+        if obj is None:
+            return "User posts to SurfGuitar101.com forums."
+        return obj.description
+
+    def copyright(self):
+        curr_year = datetime.datetime.now().year
+        if curr_year == BASE_YEAR:
+            year_range = str(BASE_YEAR)
+        else:
+            year_range = "%d - %d" % (BASE_YEAR, curr_year)
+
+        return 'Copyright (C) %s, SurfGuitar101.com' % year_range
+
+    ttl = '720'
+
+    title_template = 'forums/feed_title.html'
+    description_template = 'forums/feed_description.html'
+    
+    def items(self, obj):
+        if obj is None:
+            # return a combined feed of public forum threads
+            items = Post.objects.filter(
+                    topic__forum__in=Forum.objects.public_forums())
+        else:
+            items = Post.objects.filter(topic__forum__id=obj.id)
+        return items.order_by('-creation_date').select_related()[:10]
+
+    def item_pubdate(self, item):
+       return item.creation_date
+
+    def item_categories(self, item):
+       return (item.topic.forum.name, )