annotate rhodecode/controllers/journal.py @ 3485:b19b1723ff10 beta

pullrequest: pullrequest from changelog view It seems like it didn't work ... perhaps because I broke it. But now we clean it up and make it work: Use rev_end as the revision to merge. We don't know where to merge ... but start_rev cannot be used for that. This might to some extent have been working before ... but we prefer to clean it up and start over again when the normal merge workflow is fully working.
author Mads Kiilerich <madski@unity3d.com>
date Fri, 01 Mar 2013 17:16:24 +0100
parents 0226b6d6b2b5
children cd50d1b5f35b 10b4e34841a4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
861
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 793
diff changeset
1 # -*- coding: utf-8 -*-
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 793
diff changeset
2 """
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 793
diff changeset
3 rhodecode.controllers.journal
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 793
diff changeset
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 793
diff changeset
5
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 793
diff changeset
6 Journal controller for pylons
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1175
diff changeset
7
861
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 793
diff changeset
8 :created_on: Nov 21, 2010
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 793
diff changeset
9 :author: marcink
1824
89efedac4e6c 2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents: 1749
diff changeset
10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
861
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 793
diff changeset
11 :license: GPLv3, see COPYING for more details.
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 793
diff changeset
12 """
1206
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
13 # This program is free software: you can redistribute it and/or modify
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
14 # it under the terms of the GNU General Public License as published by
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
15 # the Free Software Foundation, either version 3 of the License, or
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
16 # (at your option) any later version.
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1175
diff changeset
17 #
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
18 # This program is distributed in the hope that it will be useful,
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
21 # GNU General Public License for more details.
1203
6832ef664673 source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents: 1175
diff changeset
22 #
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
23 # You should have received a copy of the GNU General Public License
1206
a671db5bdd58 fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents: 1203
diff changeset
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
861
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 793
diff changeset
25 import logging
1722
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1421
diff changeset
26 from itertools import groupby
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
27
1041
98be43b888c4 Updated new Journal with users and dates aggregates
Marcin Kuzminski <marcin@python-works.com>
parents: 1019
diff changeset
28 from sqlalchemy import or_
1722
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1421
diff changeset
29 from sqlalchemy.orm import joinedload
3154
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
30 from sqlalchemy.sql.expression import func
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
31
1041
98be43b888c4 Updated new Journal with users and dates aggregates
Marcin Kuzminski <marcin@python-works.com>
parents: 1019
diff changeset
32 from webhelpers.paginate import Page
1722
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1421
diff changeset
33 from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed
861
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 793
diff changeset
34
2242
87e9718ab4a2 Use webob exception as often as possible
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
35 from webob.exc import HTTPBadRequest
1088
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
36 from pylons import request, tmpl_context as c, response, url
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
37 from pylons.i18n.translation import _
995
d14723711d17 fixes for journal, added paging now it's possible to view whole journal
Marcin Kuzminski <marcin@python-works.com>
parents: 994
diff changeset
38
1088
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
39 import rhodecode.lib.helpers as h
793
3025b0f9475e disabled journal for anonymous users
Marcin Kuzminski <marcin@python-works.com>
parents: 738
diff changeset
40 from rhodecode.lib.auth import LoginRequired, NotAnonymous
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
41 from rhodecode.lib.base import BaseController, render
1741
fcbc35ecb024 personal Journal UI
Marcin Kuzminski <marcin@python-works.com>
parents: 1722
diff changeset
42 from rhodecode.model.db import UserLog, UserFollowing, Repository, User
1722
e7eef7a1db6a #235 forking page repo group selection
Marcin Kuzminski <marcin@python-works.com>
parents: 1421
diff changeset
43 from rhodecode.model.meta import Session
3075
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
44 from rhodecode.lib.utils2 import safe_int, AttributeDict
3070
cc7eedb5323c final implementation of #210 journal filtering.
Marcin Kuzminski <marcin@python-works.com>
parents: 3068
diff changeset
45 from rhodecode.controllers.admin.admin import _journal_filter
3154
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
46 from rhodecode.model.repo import RepoModel
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
47 from rhodecode.lib.compat import json
861
fd2ea6ceadc8 updated docs on every controller
Marcin Kuzminski <marcin@python-works.com>
parents: 793
diff changeset
48
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
49 log = logging.getLogger(__name__)
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
50
1212
50e41777675d pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
51
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
52 class JournalController(BaseController):
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
53
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
54 def __before__(self):
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
55 super(JournalController, self).__before__()
1088
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
56 self.language = 'en-us'
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
57 self.ttl = "5"
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
58 self.feed_nr = 20
3075
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
59 c.search_term = request.GET.get('filter')
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
60
1120
a8d759613d8f fixed some bugs in api key auth, added access by api key into rss/atom feeds in global journal
Marcin Kuzminski <marcin@python-works.com>
parents: 1117
diff changeset
61 @LoginRequired()
1085
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
62 @NotAnonymous()
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
63 def index(self):
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
64 # Return a rendered template
2845
6b176c679896 failsafe the GET `page` argument
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
65 p = safe_int(request.params.get('page', 1), 1)
1741
fcbc35ecb024 personal Journal UI
Marcin Kuzminski <marcin@python-works.com>
parents: 1722
diff changeset
66 c.user = User.get(self.rhodecode_user.user_id)
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
67 c.following = self.sa.query(UserFollowing)\
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1088
diff changeset
68 .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\
1000
229437211bef Optimized queries on journal, and added quick stop following action button in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 995
diff changeset
69 .options(joinedload(UserFollowing.follows_repository))\
229437211bef Optimized queries on journal, and added quick stop following action button in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 995
diff changeset
70 .all()
793
3025b0f9475e disabled journal for anonymous users
Marcin Kuzminski <marcin@python-works.com>
parents: 738
diff changeset
71
1085
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
72 journal = self._get_journal_data(c.following)
994
7f9d23f6a526 Added grouping by days in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
73
3070
cc7eedb5323c final implementation of #210 journal filtering.
Marcin Kuzminski <marcin@python-works.com>
parents: 3068
diff changeset
74 def url_generator(**kw):
cc7eedb5323c final implementation of #210 journal filtering.
Marcin Kuzminski <marcin@python-works.com>
parents: 3068
diff changeset
75 return url.current(filter=c.search_term, **kw)
cc7eedb5323c final implementation of #210 journal filtering.
Marcin Kuzminski <marcin@python-works.com>
parents: 3068
diff changeset
76
cc7eedb5323c final implementation of #210 journal filtering.
Marcin Kuzminski <marcin@python-works.com>
parents: 3068
diff changeset
77 c.journal_pager = Page(journal, page=p, items_per_page=20, url=url_generator)
995
d14723711d17 fixes for journal, added paging now it's possible to view whole journal
Marcin Kuzminski <marcin@python-works.com>
parents: 994
diff changeset
78 c.journal_day_aggreagate = self._get_daily_aggregate(c.journal_pager)
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1041
diff changeset
79
995
d14723711d17 fixes for journal, added paging now it's possible to view whole journal
Marcin Kuzminski <marcin@python-works.com>
parents: 994
diff changeset
80 c.journal_data = render('journal/journal_data.html')
1421
c6b811f11c94 Javascripts rewrite: updated yui to latest 2.9, simplified ajax loading for multiple pages. Removed YUI dev package
Marcin Kuzminski <marcin@python-works.com>
parents: 1212
diff changeset
81 if request.environ.get('HTTP_X_PARTIAL_XHR'):
995
d14723711d17 fixes for journal, added paging now it's possible to view whole journal
Marcin Kuzminski <marcin@python-works.com>
parents: 994
diff changeset
82 return c.journal_data
3154
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
83
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
84 repos_list = Session().query(Repository)\
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
85 .filter(Repository.user_id ==
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
86 self.rhodecode_user.user_id)\
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
87 .order_by(func.lower(Repository.repo_name)).all()
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
88
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
89 repos_data = RepoModel().get_repos_as_dict(repos_list=repos_list,
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
90 admin=True)
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
91 #json used to render the grid
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
92 c.data = json.dumps(repos_data)
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
93
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
94 watched_repos_data = []
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
95
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
96 ## watched repos
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
97 _render = RepoModel._render_datatable
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
98
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
99 def quick_menu(repo_name):
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
100 return _render('quick_menu', repo_name)
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
101
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
102 def repo_lnk(name, rtype, private, fork_of):
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
103 return _render('repo_name', name, rtype, private, fork_of,
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
104 short_name=False, admin=False)
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
105
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
106 def last_rev(repo_name, cs_cache):
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
107 return _render('revision', repo_name, cs_cache.get('revision'),
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
108 cs_cache.get('raw_id'), cs_cache.get('author'),
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
109 cs_cache.get('message'))
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
110
3154
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
111 def desc(desc):
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
112 from pylons import tmpl_context as c
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
113 if c.visual.stylify_metatags:
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
114 return h.urlify_text(h.desc_stylize(h.truncate(desc, 60)))
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
115 else:
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
116 return h.urlify_text(h.truncate(desc, 60))
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
117
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
118 def repo_actions(repo_name):
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
119 return _render('repo_actions', repo_name)
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
120
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
121 def owner_actions(user_id, username):
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
122 return _render('user_name', user_id, username)
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
123
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
124 def toogle_follow(repo_id):
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
125 return _render('toggle_follow', repo_id)
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
126
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
127 for entry in c.following:
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
128 repo = entry.follows_repository
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
129 cs_cache = repo.changeset_cache
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
130 row = {
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
131 "menu": quick_menu(repo.repo_name),
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
132 "raw_name": repo.repo_name.lower(),
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
133 "name": repo_lnk(repo.repo_name, repo.repo_type,
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
134 repo.private, repo.fork),
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
135 "last_changeset": last_rev(repo.repo_name, cs_cache),
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
136 "raw_tip": cs_cache.get('revision'),
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
137 "action": toogle_follow(repo.repo_id)
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
138 }
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
139
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
140 watched_repos_data.append(row)
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
141
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
142 c.watched_data = json.dumps({
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
143 "totalRecords": len(c.following),
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
144 "startIndex": 0,
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
145 "sort": "name",
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
146 "dir": "asc",
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
147 "records": watched_repos_data
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
148 })
0226b6d6b2b5 Use common function for generation of grid data
Marcin Kuzminski <marcin@python-works.com>
parents: 3075
diff changeset
149 return render('journal/journal.html')
2951
301773d07012 Lazy loading on my journal page
Marcin Kuzminski <marcin@python-works.com>
parents: 2845
diff changeset
150
2397
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
151 @LoginRequired(api_access=True)
2410
a1595b6e1445 Add API access to personal journal, and forbid anonymous access on them
Marcin Kuzminski <marcin@python-works.com>
parents: 2397
diff changeset
152 @NotAnonymous()
2397
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
153 def journal_atom(self):
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
154 """
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
155 Produce an atom-1.0 feed via feedgenerator module
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
156 """
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
157 following = self.sa.query(UserFollowing)\
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
158 .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
159 .options(joinedload(UserFollowing.follows_repository))\
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
160 .all()
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
161 return self._atom_feed(following, public=False)
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
162
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
163 @LoginRequired(api_access=True)
2410
a1595b6e1445 Add API access to personal journal, and forbid anonymous access on them
Marcin Kuzminski <marcin@python-works.com>
parents: 2397
diff changeset
164 @NotAnonymous()
2397
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
165 def journal_rss(self):
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
166 """
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
167 Produce an rss feed via feedgenerator module
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
168 """
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
169 following = self.sa.query(UserFollowing)\
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
170 .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
171 .options(joinedload(UserFollowing.follows_repository))\
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
172 .all()
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
173 return self._rss_feed(following, public=False)
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
174
994
7f9d23f6a526 Added grouping by days in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
175 def _get_daily_aggregate(self, journal):
7f9d23f6a526 Added grouping by days in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
176 groups = []
1212
50e41777675d pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
177 for k, g in groupby(journal, lambda x: x.action_as_day):
1041
98be43b888c4 Updated new Journal with users and dates aggregates
Marcin Kuzminski <marcin@python-works.com>
parents: 1019
diff changeset
178 user_group = []
3068
44827c84dc66 added handling of deleted users in journal data
Marcin Kuzminski <marcin@python-works.com>
parents: 2959
diff changeset
179 #groupby username if it's a present value, else fallback to journal username
44827c84dc66 added handling of deleted users in journal data
Marcin Kuzminski <marcin@python-works.com>
parents: 2959
diff changeset
180 for _, g2 in groupby(list(g), lambda x: x.user.username if x.user else x.username):
1041
98be43b888c4 Updated new Journal with users and dates aggregates
Marcin Kuzminski <marcin@python-works.com>
parents: 1019
diff changeset
181 l = list(g2)
98be43b888c4 Updated new Journal with users and dates aggregates
Marcin Kuzminski <marcin@python-works.com>
parents: 1019
diff changeset
182 user_group.append((l[0].user, l))
98be43b888c4 Updated new Journal with users and dates aggregates
Marcin Kuzminski <marcin@python-works.com>
parents: 1019
diff changeset
183
98be43b888c4 Updated new Journal with users and dates aggregates
Marcin Kuzminski <marcin@python-works.com>
parents: 1019
diff changeset
184 groups.append((k, user_group,))
994
7f9d23f6a526 Added grouping by days in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
185
7f9d23f6a526 Added grouping by days in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
186 return groups
7f9d23f6a526 Added grouping by days in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 902
diff changeset
187
1085
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
188 def _get_journal_data(self, following_repos):
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
189 repo_ids = [x.follows_repository.repo_id for x in following_repos
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
190 if x.follows_repository is not None]
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
191 user_ids = [x.follows_user.user_id for x in following_repos
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
192 if x.follows_user is not None]
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
193
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
194 filtering_criterion = None
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
195
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
196 if repo_ids and user_ids:
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
197 filtering_criterion = or_(UserLog.repository_id.in_(repo_ids),
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
198 UserLog.user_id.in_(user_ids))
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
199 if repo_ids and not user_ids:
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
200 filtering_criterion = UserLog.repository_id.in_(repo_ids)
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
201 if not repo_ids and user_ids:
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
202 filtering_criterion = UserLog.user_id.in_(user_ids)
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
203 if filtering_criterion is not None:
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
204 journal = self.sa.query(UserLog)\
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
205 .options(joinedload(UserLog.user))\
3070
cc7eedb5323c final implementation of #210 journal filtering.
Marcin Kuzminski <marcin@python-works.com>
parents: 3068
diff changeset
206 .options(joinedload(UserLog.repository))
cc7eedb5323c final implementation of #210 journal filtering.
Marcin Kuzminski <marcin@python-works.com>
parents: 3068
diff changeset
207 #filter
cc7eedb5323c final implementation of #210 journal filtering.
Marcin Kuzminski <marcin@python-works.com>
parents: 3068
diff changeset
208 try:
cc7eedb5323c final implementation of #210 journal filtering.
Marcin Kuzminski <marcin@python-works.com>
parents: 3068
diff changeset
209 journal = _journal_filter(journal, c.search_term)
cc7eedb5323c final implementation of #210 journal filtering.
Marcin Kuzminski <marcin@python-works.com>
parents: 3068
diff changeset
210 except:
cc7eedb5323c final implementation of #210 journal filtering.
Marcin Kuzminski <marcin@python-works.com>
parents: 3068
diff changeset
211 # we want this to crash for now
cc7eedb5323c final implementation of #210 journal filtering.
Marcin Kuzminski <marcin@python-works.com>
parents: 3068
diff changeset
212 raise
cc7eedb5323c final implementation of #210 journal filtering.
Marcin Kuzminski <marcin@python-works.com>
parents: 3068
diff changeset
213 journal = journal.filter(filtering_criterion)\
cc7eedb5323c final implementation of #210 journal filtering.
Marcin Kuzminski <marcin@python-works.com>
parents: 3068
diff changeset
214 .order_by(UserLog.action_date.desc())
1085
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
215 else:
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
216 journal = []
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
217
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
218 return journal
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
219
1120
a8d759613d8f fixed some bugs in api key auth, added access by api key into rss/atom feeds in global journal
Marcin Kuzminski <marcin@python-works.com>
parents: 1117
diff changeset
220 @LoginRequired()
1085
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
221 @NotAnonymous()
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
222 def toggle_following(self):
875
0765fd5bf668 tests update
Marcin Kuzminski <marcin@python-works.com>
parents: 861
diff changeset
223 cur_token = request.POST.get('auth_token')
1088
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
224 token = h.get_token()
875
0765fd5bf668 tests update
Marcin Kuzminski <marcin@python-works.com>
parents: 861
diff changeset
225 if cur_token == token:
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
226
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
227 user_id = request.POST.get('follows_user_id')
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
228 if user_id:
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
229 try:
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1041
diff changeset
230 self.scm_model.toggle_following_user(user_id,
1212
50e41777675d pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
231 self.rhodecode_user.user_id)
1749
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1741
diff changeset
232 Session.commit()
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
233 return 'ok'
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
234 except:
1175
8c0a57a4b89b Journal Should not return 500 errors on failure, rather better is to return bad request error
Marcin Kuzminski <marcin@python-works.com>
parents: 1121
diff changeset
235 raise HTTPBadRequest()
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
236
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
237 repo_id = request.POST.get('follows_repo_id')
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
238 if repo_id:
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
239 try:
1045
3fc9183e05dd another major codes rewrite:
Marcin Kuzminski <marcin@python-works.com>
parents: 1041
diff changeset
240 self.scm_model.toggle_following_repo(repo_id,
1212
50e41777675d pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
241 self.rhodecode_user.user_id)
1749
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1741
diff changeset
242 Session.commit()
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
243 return 'ok'
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
244 except:
1175
8c0a57a4b89b Journal Should not return 500 errors on failure, rather better is to return bad request error
Marcin Kuzminski <marcin@python-works.com>
parents: 1121
diff changeset
245 raise HTTPBadRequest()
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
246
1976
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
247 log.debug('token mismatch %s vs %s' % (cur_token, token))
1175
8c0a57a4b89b Journal Should not return 500 errors on failure, rather better is to return bad request error
Marcin Kuzminski <marcin@python-works.com>
parents: 1121
diff changeset
248 raise HTTPBadRequest()
1085
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
249
1120
a8d759613d8f fixed some bugs in api key auth, added access by api key into rss/atom feeds in global journal
Marcin Kuzminski <marcin@python-works.com>
parents: 1117
diff changeset
250 @LoginRequired()
1085
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
251 def public_journal(self):
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
252 # Return a rendered template
2845
6b176c679896 failsafe the GET `page` argument
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
253 p = safe_int(request.params.get('page', 1), 1)
1085
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
254
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
255 c.following = self.sa.query(UserFollowing)\
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1088
diff changeset
256 .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\
1085
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
257 .options(joinedload(UserFollowing.follows_repository))\
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
258 .all()
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
259
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
260 journal = self._get_journal_data(c.following)
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
261
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
262 c.journal_pager = Page(journal, page=p, items_per_page=20)
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
263
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
264 c.journal_day_aggreagate = self._get_daily_aggregate(c.journal_pager)
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
265
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
266 c.journal_data = render('journal/journal_data.html')
1421
c6b811f11c94 Javascripts rewrite: updated yui to latest 2.9, simplified ajax loading for multiple pages. Removed YUI dev package
Marcin Kuzminski <marcin@python-works.com>
parents: 1212
diff changeset
267 if request.environ.get('HTTP_X_PARTIAL_XHR'):
1085
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
268 return c.journal_data
3fe3285868d1 implemented public journal for anonymous users, admin can control which repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 1045
diff changeset
269 return render('journal/public_journal.html')
1088
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
270
2397
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
271 def _atom_feed(self, repos, public=True):
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
272 journal = self._get_journal_data(repos)
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
273 if public:
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
274 _link = url('public_journal_atom', qualified=True)
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
275 _desc = '%s %s %s' % (c.rhodecode_name, _('public journal'),
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
276 'atom feed')
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
277 else:
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
278 _link = url('journal_atom', qualified=True)
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
279 _desc = '%s %s %s' % (c.rhodecode_name, _('journal'), 'atom feed')
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
280
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
281 feed = Atom1Feed(title=_desc,
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
282 link=_link,
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
283 description=_desc,
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
284 language=self.language,
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
285 ttl=self.ttl)
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
286
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
287 for entry in journal[:self.feed_nr]:
3075
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
288 user = entry.user
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
289 if user is None:
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
290 #fix deleted users
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
291 user = AttributeDict({'short_contact': entry.username,
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
292 'email': '',
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
293 'full_contact': ''})
2397
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
294 action, action_extra, ico = h.action_parser(entry, feed=True)
3075
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
295 title = "%s - %s %s" % (user.short_contact, action(),
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
296 entry.repository.repo_name)
2397
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
297 desc = action_extra()
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
298 _url = None
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
299 if entry.repository is not None:
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
300 _url = url('changelog_home',
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
301 repo_name=entry.repository.repo_name,
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
302 qualified=True)
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
303
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
304 feed.add_item(title=title,
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
305 pubdate=entry.action_date,
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
306 link=_url or url('', qualified=True),
3075
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
307 author_email=user.email,
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
308 author_name=user.full_contact,
2397
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
309 description=desc)
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
310
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
311 response.content_type = feed.mime_type
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
312 return feed.writeString('utf-8')
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
313
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
314 def _rss_feed(self, repos, public=True):
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
315 journal = self._get_journal_data(repos)
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
316 if public:
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
317 _link = url('public_journal_atom', qualified=True)
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
318 _desc = '%s %s %s' % (c.rhodecode_name, _('public journal'),
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
319 'rss feed')
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
320 else:
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
321 _link = url('journal_atom', qualified=True)
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
322 _desc = '%s %s %s' % (c.rhodecode_name, _('journal'), 'rss feed')
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
323
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
324 feed = Rss201rev2Feed(title=_desc,
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
325 link=_link,
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
326 description=_desc,
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
327 language=self.language,
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
328 ttl=self.ttl)
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
329
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
330 for entry in journal[:self.feed_nr]:
3075
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
331 user = entry.user
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
332 if user is None:
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
333 #fix deleted users
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
334 user = AttributeDict({'short_contact': entry.username,
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
335 'email': '',
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
336 'full_contact': ''})
2397
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
337 action, action_extra, ico = h.action_parser(entry, feed=True)
3075
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
338 title = "%s - %s %s" % (user.short_contact, action(),
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
339 entry.repository.repo_name)
2397
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
340 desc = action_extra()
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
341 _url = None
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
342 if entry.repository is not None:
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
343 _url = url('changelog_home',
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
344 repo_name=entry.repository.repo_name,
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
345 qualified=True)
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
346
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
347 feed.add_item(title=title,
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
348 pubdate=entry.action_date,
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
349 link=_url or url('', qualified=True),
3075
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
350 author_email=user.email,
25029d6f4b47 fixed issue with public journal rss/atom feeds after journal filter implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3070
diff changeset
351 author_name=user.full_contact,
2397
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
352 description=desc)
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
353
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
354 response.content_type = feed.mime_type
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
355 return feed.writeString('utf-8')
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
356
1120
a8d759613d8f fixed some bugs in api key auth, added access by api key into rss/atom feeds in global journal
Marcin Kuzminski <marcin@python-works.com>
parents: 1117
diff changeset
357 @LoginRequired(api_access=True)
1088
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
358 def public_journal_atom(self):
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
359 """
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
360 Produce an atom-1.0 feed via feedgenerator module
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
361 """
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
362 c.following = self.sa.query(UserFollowing)\
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1088
diff changeset
363 .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\
1088
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
364 .options(joinedload(UserFollowing.follows_repository))\
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
365 .all()
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
366
2397
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
367 return self._atom_feed(c.following)
1088
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
368
1120
a8d759613d8f fixed some bugs in api key auth, added access by api key into rss/atom feeds in global journal
Marcin Kuzminski <marcin@python-works.com>
parents: 1117
diff changeset
369 @LoginRequired(api_access=True)
1088
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
370 def public_journal_rss(self):
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
371 """
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
372 Produce an rss2 feed via feedgenerator module
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
373 """
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
374 c.following = self.sa.query(UserFollowing)\
1117
6eb5bb24a948 Major rewrite of auth objects. Moved parts of filling user data into user model.
Marcin Kuzminski <marcin@python-works.com>
parents: 1088
diff changeset
375 .filter(UserFollowing.user_id == self.rhodecode_user.user_id)\
1088
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
376 .options(joinedload(UserFollowing.follows_repository))\
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
377 .all()
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1085
diff changeset
378
2397
d815d617eb5e added rss/atom feeds into personalized journal
Marcin Kuzminski <marcin@python-works.com>
parents: 2390
diff changeset
379 return self._rss_feed(c.following)