feed.py
127 lines
| 4.4 KiB
| text/x-python
|
PythonLexer
r861 | # -*- coding: utf-8 -*- | |||
""" | ||||
rhodecode.controllers.feed | ||||
~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||
Feed controller for rhodecode | ||||
r1203 | ||||
r861 | :created_on: Apr 23, 2010 | |||
:author: marcink | ||||
r1824 | :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com> | |||
r861 | :license: GPLv3, see COPYING for more details. | |||
""" | ||||
r1206 | # This program is free software: you can redistribute it and/or modify | |||
# it under the terms of the GNU General Public License as published by | ||||
# the Free Software Foundation, either version 3 of the License, or | ||||
# (at your option) any later version. | ||||
r1203 | # | |||
r547 | # This program is distributed in the hope that it will be useful, | |||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | ||||
r1203 | # | |||
r547 | # You should have received a copy of the GNU General Public License | |||
r1206 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
r861 | ||||
import logging | ||||
r1045 | from pylons import url, response, tmpl_context as c | |||
r1038 | from pylons.i18n.translation import _ | |||
r862 | ||||
r2109 | from rhodecode.lib.utils2 import safe_unicode | |||
r862 | from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | |||
r1045 | from rhodecode.lib.base import BaseRepoController | |||
r862 | ||||
r547 | from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed | |||
r861 | ||||
r547 | log = logging.getLogger(__name__) | |||
r1212 | ||||
r1045 | class FeedController(BaseRepoController): | |||
r861 | ||||
r1120 | @LoginRequired(api_access=True) | |||
r862 | @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | |||
'repository.admin') | ||||
r547 | def __before__(self): | |||
super(FeedController, self).__before__() | ||||
#common values for feeds | ||||
r1038 | self.description = _('Changes on %s repository') | |||
r1088 | self.title = self.title = _('%s %s feed') % (c.rhodecode_name, '%s') | |||
r547 | self.language = 'en-us' | |||
self.ttl = "5" | ||||
self.feed_nr = 10 | ||||
r1897 | def _get_title(self, cs): | |||
return "R%s:%s - %s" % ( | ||||
cs.revision, cs.short_id, cs.message | ||||
) | ||||
r1162 | def __changes(self, cs): | |||
r1359 | changes = [] | |||
r1162 | ||||
r1295 | a = [safe_unicode(n.path) for n in cs.added] | |||
r1162 | if a: | |||
r1359 | changes.append('\nA ' + '\nA '.join(a)) | |||
r1162 | ||||
r1295 | m = [safe_unicode(n.path) for n in cs.changed] | |||
r1162 | if m: | |||
r1359 | changes.append('\nM ' + '\nM '.join(m)) | |||
r1162 | ||||
r1295 | d = [safe_unicode(n.path) for n in cs.removed] | |||
r1162 | if d: | |||
r1359 | changes.append('\nD ' + '\nD '.join(d)) | |||
r1162 | ||||
r1359 | changes.append('</pre>') | |||
r1162 | ||||
r1359 | return ''.join(changes) | |||
r1162 | ||||
r547 | def atom(self, repo_name): | |||
"""Produce an atom-1.0 feed via feedgenerator module""" | ||||
r1897 | feed = Atom1Feed( | |||
title=self.title % repo_name, | ||||
link=url('summary_home', repo_name=repo_name, | ||||
qualified=True), | ||||
description=self.description % repo_name, | ||||
language=self.language, | ||||
ttl=self.ttl | ||||
) | ||||
r1162 | for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])): | |||
r1897 | desc_msg = [] | |||
r1359 | desc_msg.append('%s - %s<br/><pre>' % (cs.author, cs.date)) | |||
desc_msg.append(self.__changes(cs)) | ||||
r1162 | ||||
r1897 | feed.add_item(title=self._get_title(cs), | |||
r547 | link=url('changeset_home', repo_name=repo_name, | |||
r636 | revision=cs.raw_id, qualified=True), | |||
r1162 | author_name=cs.author, | |||
r1359 | description=''.join(desc_msg)) | |||
r861 | ||||
r547 | response.content_type = feed.mime_type | |||
return feed.writeString('utf-8') | ||||
def rss(self, repo_name): | ||||
"""Produce an rss2 feed via feedgenerator module""" | ||||
r1897 | feed = Rss201rev2Feed( | |||
title=self.title % repo_name, | ||||
link=url('summary_home', repo_name=repo_name, | ||||
qualified=True), | ||||
description=self.description % repo_name, | ||||
language=self.language, | ||||
ttl=self.ttl | ||||
) | ||||
r1162 | for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])): | |||
r1897 | desc_msg = [] | |||
r1359 | desc_msg.append('%s - %s<br/><pre>' % (cs.author, cs.date)) | |||
desc_msg.append(self.__changes(cs)) | ||||
r1162 | ||||
r1897 | feed.add_item(title=self._get_title(cs), | |||
r547 | link=url('changeset_home', repo_name=repo_name, | |||
r636 | revision=cs.raw_id, qualified=True), | |||
r1162 | author_name=cs.author, | |||
r1359 | description=''.join(desc_msg), | |||
r1162 | ) | |||
r861 | ||||
r547 | response.content_type = feed.mime_type | |||
return feed.writeString('utf-8') | ||||