Mercurial > public > sg101
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, )