Mercurial > kallithea
comparison rhodecode/controllers/journal.py @ 3154:0226b6d6b2b5 beta
Use common function for generation of grid data
- admin grid now has dedicated edit button, and uses changeset_cache
- some small improvements to grid
- all other datatables use this
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 09 Jan 2013 01:59:43 +0100 |
parents | 25029d6f4b47 |
children | cd50d1b5f35b 10b4e34841a4 |
comparison
equal
deleted
inserted
replaced
3153:8046d1979674 | 3154:0226b6d6b2b5 |
---|---|
25 import logging | 25 import logging |
26 from itertools import groupby | 26 from itertools import groupby |
27 | 27 |
28 from sqlalchemy import or_ | 28 from sqlalchemy import or_ |
29 from sqlalchemy.orm import joinedload | 29 from sqlalchemy.orm import joinedload |
30 from sqlalchemy.sql.expression import func | |
31 | |
30 from webhelpers.paginate import Page | 32 from webhelpers.paginate import Page |
31 from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed | 33 from webhelpers.feedgenerator import Atom1Feed, Rss201rev2Feed |
32 | 34 |
33 from webob.exc import HTTPBadRequest | 35 from webob.exc import HTTPBadRequest |
34 from pylons import request, tmpl_context as c, response, url | 36 from pylons import request, tmpl_context as c, response, url |
37 import rhodecode.lib.helpers as h | 39 import rhodecode.lib.helpers as h |
38 from rhodecode.lib.auth import LoginRequired, NotAnonymous | 40 from rhodecode.lib.auth import LoginRequired, NotAnonymous |
39 from rhodecode.lib.base import BaseController, render | 41 from rhodecode.lib.base import BaseController, render |
40 from rhodecode.model.db import UserLog, UserFollowing, Repository, User | 42 from rhodecode.model.db import UserLog, UserFollowing, Repository, User |
41 from rhodecode.model.meta import Session | 43 from rhodecode.model.meta import Session |
42 from sqlalchemy.sql.expression import func | |
43 from rhodecode.model.scm import ScmModel | |
44 from rhodecode.lib.utils2 import safe_int, AttributeDict | 44 from rhodecode.lib.utils2 import safe_int, AttributeDict |
45 from rhodecode.controllers.admin.admin import _journal_filter | 45 from rhodecode.controllers.admin.admin import _journal_filter |
46 from rhodecode.model.repo import RepoModel | |
47 from rhodecode.lib.compat import json | |
46 | 48 |
47 log = logging.getLogger(__name__) | 49 log = logging.getLogger(__name__) |
48 | 50 |
49 | 51 |
50 class JournalController(BaseController): | 52 class JournalController(BaseController): |
76 c.journal_day_aggreagate = self._get_daily_aggregate(c.journal_pager) | 78 c.journal_day_aggreagate = self._get_daily_aggregate(c.journal_pager) |
77 | 79 |
78 c.journal_data = render('journal/journal_data.html') | 80 c.journal_data = render('journal/journal_data.html') |
79 if request.environ.get('HTTP_X_PARTIAL_XHR'): | 81 if request.environ.get('HTTP_X_PARTIAL_XHR'): |
80 return c.journal_data | 82 return c.journal_data |
83 | |
84 repos_list = Session().query(Repository)\ | |
85 .filter(Repository.user_id == | |
86 self.rhodecode_user.user_id)\ | |
87 .order_by(func.lower(Repository.repo_name)).all() | |
88 | |
89 repos_data = RepoModel().get_repos_as_dict(repos_list=repos_list, | |
90 admin=True) | |
91 #json used to render the grid | |
92 c.data = json.dumps(repos_data) | |
93 | |
94 watched_repos_data = [] | |
95 | |
96 ## watched repos | |
97 _render = RepoModel._render_datatable | |
98 | |
99 def quick_menu(repo_name): | |
100 return _render('quick_menu', repo_name) | |
101 | |
102 def repo_lnk(name, rtype, private, fork_of): | |
103 return _render('repo_name', name, rtype, private, fork_of, | |
104 short_name=False, admin=False) | |
105 | |
106 def last_rev(repo_name, cs_cache): | |
107 return _render('revision', repo_name, cs_cache.get('revision'), | |
108 cs_cache.get('raw_id'), cs_cache.get('author'), | |
109 cs_cache.get('message')) | |
110 | |
111 def desc(desc): | |
112 from pylons import tmpl_context as c | |
113 if c.visual.stylify_metatags: | |
114 return h.urlify_text(h.desc_stylize(h.truncate(desc, 60))) | |
115 else: | |
116 return h.urlify_text(h.truncate(desc, 60)) | |
117 | |
118 def repo_actions(repo_name): | |
119 return _render('repo_actions', repo_name) | |
120 | |
121 def owner_actions(user_id, username): | |
122 return _render('user_name', user_id, username) | |
123 | |
124 def toogle_follow(repo_id): | |
125 return _render('toggle_follow', repo_id) | |
126 | |
127 for entry in c.following: | |
128 repo = entry.follows_repository | |
129 cs_cache = repo.changeset_cache | |
130 row = { | |
131 "menu": quick_menu(repo.repo_name), | |
132 "raw_name": repo.repo_name.lower(), | |
133 "name": repo_lnk(repo.repo_name, repo.repo_type, | |
134 repo.private, repo.fork), | |
135 "last_changeset": last_rev(repo.repo_name, cs_cache), | |
136 "raw_tip": cs_cache.get('revision'), | |
137 "action": toogle_follow(repo.repo_id) | |
138 } | |
139 | |
140 watched_repos_data.append(row) | |
141 | |
142 c.watched_data = json.dumps({ | |
143 "totalRecords": len(c.following), | |
144 "startIndex": 0, | |
145 "sort": "name", | |
146 "dir": "asc", | |
147 "records": watched_repos_data | |
148 }) | |
81 return render('journal/journal.html') | 149 return render('journal/journal.html') |
82 | |
83 @LoginRequired() | |
84 @NotAnonymous() | |
85 def index_my_repos(self): | |
86 c.user = User.get(self.rhodecode_user.user_id) | |
87 if request.environ.get('HTTP_X_PARTIAL_XHR'): | |
88 all_repos = self.sa.query(Repository)\ | |
89 .filter(Repository.user_id == c.user.user_id)\ | |
90 .order_by(func.lower(Repository.repo_name)).all() | |
91 c.user_repos = ScmModel().get_repos(all_repos) | |
92 return render('journal/journal_page_repos.html') | |
93 | 150 |
94 @LoginRequired(api_access=True) | 151 @LoginRequired(api_access=True) |
95 @NotAnonymous() | 152 @NotAnonymous() |
96 def journal_atom(self): | 153 def journal_atom(self): |
97 """ | 154 """ |