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')