comparison rhodecode/model/repo.py @ 3179:cd50d1b5f35b

merged with beta
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 21 Jan 2013 00:03:44 +0100
parents a5f0bc867edc 28571535dd61
children d1004dd51a66
comparison
equal deleted inserted replaced
3113:a0737406ce26 3179:cd50d1b5f35b
39 from rhodecode.model import BaseModel 39 from rhodecode.model import BaseModel
40 from rhodecode.model.db import Repository, UserRepoToPerm, User, Permission, \ 40 from rhodecode.model.db import Repository, UserRepoToPerm, User, Permission, \
41 Statistics, UsersGroup, UsersGroupRepoToPerm, RhodeCodeUi, RepoGroup,\ 41 Statistics, UsersGroup, UsersGroupRepoToPerm, RhodeCodeUi, RepoGroup,\
42 RhodeCodeSetting 42 RhodeCodeSetting
43 from rhodecode.lib import helpers as h 43 from rhodecode.lib import helpers as h
44 from rhodecode.lib.auth import HasRepoPermissionAny
44 45
45 46
46 log = logging.getLogger(__name__) 47 log = logging.getLogger(__name__)
47 48
48 49
86 87
87 if cache: 88 if cache:
88 repo = repo.options(FromCache("sql_cache_short", 89 repo = repo.options(FromCache("sql_cache_short",
89 "get_repo_%s" % repo_name)) 90 "get_repo_%s" % repo_name))
90 return repo.scalar() 91 return repo.scalar()
92
93 def get_all_user_repos(self, user):
94 """
95 Get's all repositories that user have at least read access
96
97 :param user:
98 :type user:
99 """
100 from rhodecode.lib.auth import AuthUser
101 user = self._get_user(user)
102 repos = AuthUser(user_id=user.user_id).permissions['repositories']
103 access_check = lambda r: r[1] in ['repository.read',
104 'repository.write',
105 'repository.admin']
106 repos = [x[0] for x in filter(access_check, repos.items())]
107 return Repository.query().filter(Repository.repo_name.in_(repos))
91 108
92 def get_users_js(self): 109 def get_users_js(self):
93 users = self.sa.query(User).filter(User.active == True).all() 110 users = self.sa.query(User).filter(User.active == True).all()
94 return json.dumps([ 111 return json.dumps([
95 { 112 {
110 'id': gr.users_group_id, 127 'id': gr.users_group_id,
111 'grname': gr.users_group_name, 128 'grname': gr.users_group_name,
112 'grmembers': len(gr.members), 129 'grmembers': len(gr.members),
113 } for gr in users_groups] 130 } for gr in users_groups]
114 ) 131 )
132
133 @classmethod
134 def _render_datatable(cls, tmpl, *args, **kwargs):
135 import rhodecode
136 from pylons import tmpl_context as c
137 from pylons.i18n.translation import _
138
139 _tmpl_lookup = rhodecode.CONFIG['pylons.app_globals'].mako_lookup
140 template = _tmpl_lookup.get_template('data_table/_dt_elements.html')
141
142 tmpl = template.get_def(tmpl)
143 kwargs.update(dict(_=_, h=h, c=c))
144 return tmpl.render(*args, **kwargs)
145
146 def get_repos_as_dict(self, repos_list=None, admin=False, perm_check=True):
147 _render = self._render_datatable
148
149 def quick_menu(repo_name):
150 return _render('quick_menu', repo_name)
151
152 def repo_lnk(name, rtype, private, fork_of):
153 return _render('repo_name', name, rtype, private, fork_of,
154 short_name=not admin, admin=False)
155
156 def last_change(last_change):
157 return _render("last_change", last_change)
158
159 def rss_lnk(repo_name):
160 return _render("rss", repo_name)
161
162 def atom_lnk(repo_name):
163 return _render("atom", repo_name)
164
165 def last_rev(repo_name, cs_cache):
166 return _render('revision', repo_name, cs_cache.get('revision'),
167 cs_cache.get('raw_id'), cs_cache.get('author'),
168 cs_cache.get('message'))
169
170 def desc(desc):
171 from pylons import tmpl_context as c
172 if c.visual.stylify_metatags:
173 return h.urlify_text(h.desc_stylize(h.truncate(desc, 60)))
174 else:
175 return h.urlify_text(h.truncate(desc, 60))
176
177 def repo_actions(repo_name):
178 return _render('repo_actions', repo_name)
179
180 def owner_actions(user_id, username):
181 return _render('user_name', user_id, username)
182
183 repos_data = []
184 for repo in repos_list:
185 if perm_check:
186 # check permission at this level
187 if not HasRepoPermissionAny(
188 'repository.read', 'repository.write', 'repository.admin'
189 )(repo.repo_name, 'get_repos_as_dict check'):
190 continue
191 cs_cache = repo.changeset_cache
192 row = {
193 "menu": quick_menu(repo.repo_name),
194 "raw_name": repo.repo_name.lower(),
195 "name": repo_lnk(repo.repo_name, repo.repo_type,
196 repo.private, repo.fork),
197 "last_change": last_change(repo.last_db_change),
198 "last_changeset": last_rev(repo.repo_name, cs_cache),
199 "raw_tip": cs_cache.get('revision'),
200 "desc": desc(repo.description),
201 "owner": h.person(repo.user.username),
202 "rss": rss_lnk(repo.repo_name),
203 "atom": atom_lnk(repo.repo_name),
204
205 }
206 if admin:
207 row.update({
208 "action": repo_actions(repo.repo_name),
209 "owner": owner_actions(repo.user.user_id,
210 h.person(repo.user.username))
211 })
212 repos_data.append(row)
213
214 return {
215 "totalRecords": len(repos_list),
216 "startIndex": 0,
217 "sort": "name",
218 "dir": "asc",
219 "records": repos_data
220 }
115 221
116 def _get_defaults(self, repo_name): 222 def _get_defaults(self, repo_name):
117 """ 223 """
118 Get's information about repository, and returns a dict for 224 Get's information about repository, and returns a dict for
119 usage in forms 225 usage in forms
337 repos_group = form_data['repo_group'] 443 repos_group = form_data['repo_group']
338 landing_rev = form_data['repo_landing_rev'] 444 landing_rev = form_data['repo_landing_rev']
339 copy_fork_permissions = form_data.get('copy_permissions') 445 copy_fork_permissions = form_data.get('copy_permissions')
340 fork_of = form_data.get('fork_parent_id') 446 fork_of = form_data.get('fork_parent_id')
341 447
342 ##defaults 448 ## repo creation defaults, private and repo_type are filled in form
343 defs = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True) 449 defs = RhodeCodeSetting.get_default_repo_settings(strip_prefix=True)
344 enable_statistics = defs.get('repo_enable_statistic') 450 enable_statistics = defs.get('repo_enable_statistics')
345 enable_locking = defs.get('repo_enable_locking') 451 enable_locking = defs.get('repo_enable_locking')
346 enable_downloads = defs.get('repo_enable_downloads') 452 enable_downloads = defs.get('repo_enable_downloads')
347 453
348 return self.create_repo( 454 return self.create_repo(
349 repo_name, repo_type, description, owner, private, clone_uri, 455 repo_name, repo_type, description, owner, private, clone_uri,