Mercurial > kallithea
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, |