from django.contrib.syndication.views import Feed from django.shortcuts import get_object_or_404 from tower import ugettext as _ from amo.helpers import absolutify, shared_url, url from addons.models import Addon, Review import urllib class ReviewsRss(Feed): addon = None def get_object(self, request, addon_id=None, app_slug=None): """Get the Addon for which we are about to output the RSS feed of it Review""" if app_slug: self.addon = get_object_or_404(Addon, app_slug=app_slug) else: self.addon = get_object_or_404(Addon.objects.id_or_slug(addon_id)) return self.addon def title(self, addon): """Title for the feed""" return _(u'Reviews for %s') % addon.name def link(self, addon): """Link for the feed""" return absolutify(url('home')) def description(self, addon): """Description for the feed""" return _('Review History for this Addon') def items(self, addon): """Return the Reviews for this Addon to be output as RSS 's""" qs = (Review.objects.valid().filter(addon=addon).order_by('-created')) return qs.all()[:30] def item_link(self, review): """Link for a particular review ()""" return absolutify(shared_url('reviews.detail', self.addon, review.id)) def item_title(self, review): """Title for particular review ()""" tag_line = rating = '' if getattr(review, 'rating', None): # L10n: This describes the number of stars given out of 5 rating = _('Rated %d out of 5 stars') % review.rating if getattr(review, 'title', None): tag_line = review.title divider = ' : ' if rating and tag_line else '' return u'%s%s%s' % (rating, divider, tag_line) def item_description(self, review): """Description for particular review (<item><description>)""" return review.body def item_guid(self, review): """Guid for a particuar review (<item><guid>)""" guid_url = absolutify(shared_url('reviews.list', self.addon)) return guid_url + urllib.quote(str(review.id)) def item_author_name(self, review): """Author for a particuar review (<item><dc:creator>)""" return review.user.name def item_pubdate(self, review): """Pubdate for a particuar review (<item><pubDate>)""" return review.created