feed.py
115 lines
| 4.1 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 | ||||
r1203 | :copyright: (C) 2009-2011 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 | ||||
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 | ||||
r1162 | def __changes(self, cs): | |||
changes = '' | ||||
a = [n.path for n in cs.added] | ||||
if a: | ||||
changes += '\nA ' + '\nA '.join(a) | ||||
m = [n.path for n in cs.changed] | ||||
if m: | ||||
changes += '\nM ' + '\nM '.join(m) | ||||
d = [n.path for n in cs.removed] | ||||
if d: | ||||
changes += '\nD ' + '\nD '.join(d) | ||||
changes += '</pre>' | ||||
return changes | ||||
r547 | def atom(self, repo_name): | |||
"""Produce an atom-1.0 feed via feedgenerator module""" | ||||
feed = Atom1Feed(title=self.title % repo_name, | ||||
r1212 | link=url('summary_home', repo_name=repo_name, | |||
qualified=True), | ||||
r547 | description=self.description % repo_name, | |||
language=self.language, | ||||
ttl=self.ttl) | ||||
r861 | ||||
r1162 | for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])): | |||
desc = '%s - %s<br/><pre>' % (cs.author, cs.date) | ||||
desc += self.__changes(cs) | ||||
r547 | feed.add_item(title=cs.message, | |||
link=url('changeset_home', repo_name=repo_name, | ||||
r636 | revision=cs.raw_id, qualified=True), | |||
r1162 | author_name=cs.author, | |||
description=desc) | ||||
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""" | ||||
feed = Rss201rev2Feed(title=self.title % repo_name, | ||||
r1212 | link=url('summary_home', repo_name=repo_name, | |||
qualified=True), | ||||
r547 | description=self.description % repo_name, | |||
language=self.language, | ||||
ttl=self.ttl) | ||||
r861 | ||||
r1162 | for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])): | |||
desc = '%s - %s<br/><pre>' % (cs.author, cs.date) | ||||
desc += self.__changes(cs) | ||||
r547 | feed.add_item(title=cs.message, | |||
link=url('changeset_home', repo_name=repo_name, | ||||
r636 | revision=cs.raw_id, qualified=True), | |||
r1162 | author_name=cs.author, | |||
description=desc, | ||||
) | ||||
r861 | ||||
r547 | response.content_type = feed.mime_type | |||
return feed.writeString('utf-8') | ||||