from django.contrib.syndication.feeds import Feed, FeedDoesNotExist
from django.core.exceptions import ObjectDoesNotExist
from django.utils.feedgenerator import Atom1Feed
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from djangobb_forum.models import Post, Topic, Forum, Category
class ForumFeed(Feed):
feed_type = Atom1Feed
def link(self):
return reverse('djangobb:index')
def item_guid(self, obj):
return str(obj.id)
def item_pubdate(self, obj):
return obj.created
class LastPosts(ForumFeed):
title = _('Latest posts on forum')
description = _('Latest posts on forum')
title_template = 'forum/feeds/posts_title.html'
description_template = 'forum/feeds/posts_description.html'
def items(self):
return Post.objects.order_by('-created')[:15]
class LastTopics(ForumFeed):
title = _('Latest topics on forum')
description = _('Latest topics on forum')
title_template = 'forum/feeds/topics_title.html'
description_template = 'forum/feeds/topics_description.html'
return Topic.objects.order_by('-created')[:15]
class LastPostsOnTopic(ForumFeed):
def get_object(self, topics):
if len(topics) != 1:
raise ObjectDoesNotExist
return Topic.objects.get(id=topics[0])
def title(self, obj):
return _('Latest posts on %s topic' % obj.name)
def link(self, obj):
if not obj:
raise FeedDoesNotExist
return obj.get_absolute_url()
def description(self, obj):
def items(self, obj):
return Post.objects.filter(topic__id__exact=obj.id).order_by('-created')[:15]
class LastPostsOnForum(ForumFeed):
def get_object(self, forums):
if len(forums) != 1:
return Forum.objects.get(id=forums[0])
return _('Latest posts on %s forum' % obj.name)
return Post.objects.filter(topic__forum__id__exact=obj.id).order_by('-created')[:15]
class LastPostsOnCategory(ForumFeed):
def get_object(self, categories):
if len(categories) != 1:
return Category.objects.get(id=categories[0])
return _('Latest posts on %s category' % obj.name)
return Post.objects.filter(topic__forum__category__id__exact=obj.id).order_by('-created')[:15]