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 """