X-Git-Url: https://git.openstreetmap.org/osqa.git/blobdiff_plain/543fee4a008ac7144d64eb606c67f19883ba00b2..99d077e46d0eb3efd5e96a65f120e6e4b6197db0:/forum/feed.py diff --git a/forum/feed.py b/forum/feed.py index d91fc22..810a742 100644 --- a/forum/feed.py +++ b/forum/feed.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- + try: from django.contrib.syndication.views import Feed, FeedDoesNotExist, add_domain old_version = False @@ -6,15 +8,17 @@ except: old_version = True from django.http import HttpResponse +from django.utils.encoding import smart_unicode from django.utils.translation import ugettext as _ from django.utils.safestring import mark_safe from models import Question from forum import settings from forum.modules import decorate +from forum.utils.pagination import generate_uri @decorate(add_domain, needs_origin=False) -def add_domain(domain, url): - return "%s%s" % (settings.APP_URL, url) +def add_domain(domain, url, *args, **kwargs): + return "%s%s" % (settings.APP_BASE_URL, url) class BaseNodeFeed(Feed): if old_version: @@ -22,33 +26,33 @@ class BaseNodeFeed(Feed): description_template = "feeds/rss_description.html" def __init__(self, request, title, description, url): - self._title = title - self._description = mark_safe(unicode(description)) + self._title = u"%s" % smart_unicode(title) + self._description = mark_safe(u"%s" % smart_unicode(description)) self._url = url if old_version: super(BaseNodeFeed, self).__init__('', request) def title(self): - return self._title + return u"%s" % smart_unicode(self._title) def link(self): return self._url def description(self): - return self._description + return u"%s" % smart_unicode(self._description) def item_title(self, item): - return item.title + return u"%s" % smart_unicode(item.title) def item_description(self, item): - return item.html + return u"%s" % smart_unicode(item.html) def item_link(self, item): return item.leaf.get_absolute_url() def item_author_name(self, item): - return item.author.username + return u"%s" % smart_unicode(item.author.username) def item_author_link(self, item): return item.author.get_profile_url() @@ -59,14 +63,14 @@ class BaseNodeFeed(Feed): if old_version: def __call__(self, request): feedgen = self.get_feed('') - response = HttpResponse(mimetype=feedgen.mime_type) + response = HttpResponse(content_type=feedgen.mime_type) feedgen.write(response, 'utf-8') return response class RssQuestionFeed(BaseNodeFeed): def __init__(self, request, question_list, title, description): - url = request.path + "&" + "&".join(["%s=%s" % (k, v) for k, v in request.GET.items() if not k in (_('page'), _('pagesize'), _('sort'))]) + url = request.path + "?" + generate_uri(request.GET, (_('page'), _('pagesize'), _('sort'))) super(RssQuestionFeed, self).__init__(request, title, description, url) self._question_list = question_list @@ -74,34 +78,42 @@ class RssQuestionFeed(BaseNodeFeed): def item_categories(self, item): return item.tagname_list() + def _items(self): + return self._question_list + def items(self): - return self._question_list[:30] + return self._items()[:30] class RssAnswerFeed(BaseNodeFeed): if old_version: title_template = "feeds/rss_answer_title.html" def __init__(self, request, question, include_comments=False): - super(RssAnswerFeed, self).__init__(request, _("Answers to: %s") % question.title, question.html, question.get_absolute_url()) + super(RssAnswerFeed, self).__init__( + request, _("Answers to: %s") % smart_unicode(question.title), + question.html, + question.get_absolute_url() + ) self._question = question self._include_comments = include_comments - def items(self): + def _items(self): if self._include_comments: qs = self._question.all_children else: qs = self._question.answers - return qs.filter_state(deleted=False).order_by('-added_at')[:30] + return qs.filter_state(deleted=False).order_by('-added_at') + + def items(self): + return self._items()[:30] def item_title(self, item): if item.node_type == "answer": - return _("Answer by %s") % item.author.username + return _("Answer by %s") % smart_unicode(item.author.username) else: return _("Comment by %(cauthor)s on %(pauthor)s's %(qora)s") % dict( - cauthor=item.author.username, pauthor=item.parent.author.username, qora=(item.parent.node_type == "answer" and _("answer") or _("question")) + cauthor=smart_unicode(item.author.username), + pauthor=smart_unicode(item.parent.author.username), + qora=(item.parent.node_type == "answer" and _("answer") or _("question")) ) - - - -