from django.contrib.syndication.views import Feed from django.core.urlresolvers import reverse from django.shortcuts import get_object_or_404 from boards.models import Post, Tag, Thread from boards import settings from boards.models.thread import STATUS_ARCHIVE __author__ = 'nekorin' MAX_ITEMS = settings.get_int('RSS', 'MaxItems') # TODO Make tests for all of these class AllThreadsFeed(Feed): title = settings.get('Version', 'SiteName') + ' - All threads' link = '/' description_template = 'boards/rss/post.html' def items(self): return Post.objects.filter(opening=True).exclude(thread__status=STATUS_ARCHIVE).order_by('-id')[:MAX_ITEMS] def item_title(self, item): return item.title def item_link(self, item): return item.get_absolute_url() def item_pubdate(self, item): return item.pub_time class TagThreadsFeed(Feed): link = '/' description_template = 'boards/rss/post.html' def items(self, obj): return Post.objects.filter(opening=True, thread__tags__in=[obj]).exclude(thread__status=STATUS_ARCHIVE).order_by('-id')[:MAX_ITEMS] def get_object(self, request, tag_name): return get_object_or_404(Tag, name=tag_name) def item_title(self, item): return item.title def item_link(self, item): return item.get_absolute_url() def item_pubdate(self, item): return item.pub_time def title(self, obj): return obj.name class ThreadPostsFeed(Feed): link = '/' description_template = 'boards/rss/post.html' def items(self, obj): return obj.get_thread().get_replies().order_by('-pub_time')[:MAX_ITEMS] def get_object(self, request, post_id): return get_object_or_404(Post, id=post_id) def item_title(self, item): return item.title def item_link(self, item): return item.get_absolute_url() def item_pubdate(self, item): return item.pub_time def title(self, obj): return obj.title