Mercurial > kallithea
comparison rhodecode/controllers/feed.py @ 1512:bf263968da47
merge beta in stable branch
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Fri, 07 Oct 2011 01:08:50 +0200 |
parents | 0dc8d578ff49 54fc83f2192c |
children | 82a88013a3fd |
comparison
equal
deleted
inserted
replaced
1329:e058df3ff2b4 | 1512:bf263968da47 |
---|---|
23 # You should have received a copy of the GNU General Public License | 23 # You should have received a copy of the GNU General Public License |
24 # along with this program. If not, see <http://www.gnu.org/licenses/>. | 24 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
25 | 25 |
26 import logging | 26 import logging |
27 | 27 |
28 from pylons import url, response | 28 from pylons import url, response, tmpl_context as c |
29 from pylons.i18n.translation import _ | |
29 | 30 |
31 from rhodecode.lib import safe_unicode | |
30 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | 32 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator |
31 from rhodecode.lib.base import BaseController | 33 from rhodecode.lib.base import BaseRepoController |
32 from rhodecode.model.scm import ScmModel | |
33 | 34 |
34 from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed | 35 from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed |
35 | 36 |
36 log = logging.getLogger(__name__) | 37 log = logging.getLogger(__name__) |
37 | 38 |
38 class FeedController(BaseController): | |
39 | 39 |
40 @LoginRequired() | 40 class FeedController(BaseRepoController): |
41 | |
42 @LoginRequired(api_access=True) | |
41 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | 43 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
42 'repository.admin') | 44 'repository.admin') |
43 def __before__(self): | 45 def __before__(self): |
44 super(FeedController, self).__before__() | 46 super(FeedController, self).__before__() |
45 #common values for feeds | 47 #common values for feeds |
46 self.description = 'Changes on %s repository' | 48 self.description = _('Changes on %s repository') |
47 self.title = "%s feed" | 49 self.title = self.title = _('%s %s feed') % (c.rhodecode_name, '%s') |
48 self.language = 'en-us' | 50 self.language = 'en-us' |
49 self.ttl = "5" | 51 self.ttl = "5" |
50 self.feed_nr = 10 | 52 self.feed_nr = 10 |
51 | 53 |
54 def __changes(self, cs): | |
55 changes = [] | |
56 | |
57 a = [safe_unicode(n.path) for n in cs.added] | |
58 if a: | |
59 changes.append('\nA ' + '\nA '.join(a)) | |
60 | |
61 m = [safe_unicode(n.path) for n in cs.changed] | |
62 if m: | |
63 changes.append('\nM ' + '\nM '.join(m)) | |
64 | |
65 d = [safe_unicode(n.path) for n in cs.removed] | |
66 if d: | |
67 changes.append('\nD ' + '\nD '.join(d)) | |
68 | |
69 changes.append('</pre>') | |
70 | |
71 return ''.join(changes) | |
72 | |
52 def atom(self, repo_name): | 73 def atom(self, repo_name): |
53 """Produce an atom-1.0 feed via feedgenerator module""" | 74 """Produce an atom-1.0 feed via feedgenerator module""" |
54 feed = Atom1Feed(title=self.title % repo_name, | 75 feed = Atom1Feed(title=self.title % repo_name, |
55 link=url('summary_home', repo_name=repo_name, qualified=True), | 76 link=url('summary_home', repo_name=repo_name, |
77 qualified=True), | |
56 description=self.description % repo_name, | 78 description=self.description % repo_name, |
57 language=self.language, | 79 language=self.language, |
58 ttl=self.ttl) | 80 ttl=self.ttl) |
81 desc_msg = [] | |
82 for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])): | |
83 desc_msg.append('%s - %s<br/><pre>' % (cs.author, cs.date)) | |
84 desc_msg.append(self.__changes(cs)) | |
59 | 85 |
60 changesets = ScmModel().get_repo(repo_name) | |
61 | |
62 for cs in changesets[:self.feed_nr]: | |
63 feed.add_item(title=cs.message, | 86 feed.add_item(title=cs.message, |
64 link=url('changeset_home', repo_name=repo_name, | 87 link=url('changeset_home', repo_name=repo_name, |
65 revision=cs.raw_id, qualified=True), | 88 revision=cs.raw_id, qualified=True), |
66 description=str(cs.date)) | 89 author_name=cs.author, |
90 description=''.join(desc_msg)) | |
67 | 91 |
68 response.content_type = feed.mime_type | 92 response.content_type = feed.mime_type |
69 return feed.writeString('utf-8') | 93 return feed.writeString('utf-8') |
70 | 94 |
71 | |
72 def rss(self, repo_name): | 95 def rss(self, repo_name): |
73 """Produce an rss2 feed via feedgenerator module""" | 96 """Produce an rss2 feed via feedgenerator module""" |
74 feed = Rss201rev2Feed(title=self.title % repo_name, | 97 feed = Rss201rev2Feed(title=self.title % repo_name, |
75 link=url('summary_home', repo_name=repo_name, qualified=True), | 98 link=url('summary_home', repo_name=repo_name, |
99 qualified=True), | |
76 description=self.description % repo_name, | 100 description=self.description % repo_name, |
77 language=self.language, | 101 language=self.language, |
78 ttl=self.ttl) | 102 ttl=self.ttl) |
103 desc_msg = [] | |
104 for cs in reversed(list(c.rhodecode_repo[-self.feed_nr:])): | |
105 desc_msg.append('%s - %s<br/><pre>' % (cs.author, cs.date)) | |
106 desc_msg.append(self.__changes(cs)) | |
79 | 107 |
80 changesets = ScmModel().get_repo(repo_name) | |
81 for cs in changesets[:self.feed_nr]: | |
82 feed.add_item(title=cs.message, | 108 feed.add_item(title=cs.message, |
83 link=url('changeset_home', repo_name=repo_name, | 109 link=url('changeset_home', repo_name=repo_name, |
84 revision=cs.raw_id, qualified=True), | 110 revision=cs.raw_id, qualified=True), |
85 description=str(cs.date)) | 111 author_name=cs.author, |
112 description=''.join(desc_msg), | |
113 ) | |
86 | 114 |
87 response.content_type = feed.mime_type | 115 response.content_type = feed.mime_type |
88 return feed.writeString('utf-8') | 116 return feed.writeString('utf-8') |