Mercurial > kallithea
comparison rhodecode/controllers/api/api.py @ 3502:7cde75eac0fe beta
get_locks API function draft
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Thu, 07 Mar 2013 20:06:45 +0100 |
parents | 08e8115585bd |
children | b44979649915 |
comparison
equal
deleted
inserted
replaced
3501:3d5f4d2f0826 | 3502:7cde75eac0fe |
---|---|
31 from rhodecode.controllers.api import JSONRPCController, JSONRPCError | 31 from rhodecode.controllers.api import JSONRPCController, JSONRPCError |
32 from rhodecode.lib.auth import PasswordGenerator, AuthUser, \ | 32 from rhodecode.lib.auth import PasswordGenerator, AuthUser, \ |
33 HasPermissionAllDecorator, HasPermissionAnyDecorator, \ | 33 HasPermissionAllDecorator, HasPermissionAnyDecorator, \ |
34 HasPermissionAnyApi, HasRepoPermissionAnyApi | 34 HasPermissionAnyApi, HasRepoPermissionAnyApi |
35 from rhodecode.lib.utils import map_groups, repo2db_mapper | 35 from rhodecode.lib.utils import map_groups, repo2db_mapper |
36 from rhodecode.lib.utils2 import str2bool, time_to_datetime | 36 from rhodecode.lib.utils2 import str2bool, time_to_datetime, safe_int |
37 from rhodecode.lib import helpers as h | 37 from rhodecode.lib import helpers as h |
38 from rhodecode.model.meta import Session | 38 from rhodecode.model.meta import Session |
39 from rhodecode.model.scm import ScmModel | 39 from rhodecode.model.scm import ScmModel |
40 from rhodecode.model.repo import RepoModel | 40 from rhodecode.model.repo import RepoModel |
41 from rhodecode.model.user import UserModel | 41 from rhodecode.model.user import UserModel |
42 from rhodecode.model.users_group import UserGroupModel | 42 from rhodecode.model.users_group import UserGroupModel |
43 from rhodecode.model.permission import PermissionModel | 43 from rhodecode.model.permission import PermissionModel |
44 from rhodecode.model.db import Repository, RhodeCodeSetting, UserIpMap | 44 from rhodecode.model.db import Repository, RhodeCodeSetting, UserIpMap |
45 from rhodecode.lib.compat import json | |
45 | 46 |
46 log = logging.getLogger(__name__) | 47 log = logging.getLogger(__name__) |
47 | 48 |
48 | 49 |
49 class OptionalAttr(object): | 50 class OptionalAttr(object): |
272 user = get_user_or_error(userid) | 273 user = get_user_or_error(userid) |
273 | 274 |
274 return ('Repo `%s` locked by `%s`. Locked=`True`. ' | 275 return ('Repo `%s` locked by `%s`. Locked=`True`. ' |
275 'Locked since: `%s`' | 276 'Locked since: `%s`' |
276 % (repo.repo_name, user.username, | 277 % (repo.repo_name, user.username, |
277 h.fmt_date(time_to_datetime(time_)))) | 278 json.dumps(time_to_datetime(time_)))) |
278 | 279 |
279 else: | 280 else: |
280 locked = str2bool(locked) | 281 locked = str2bool(locked) |
281 try: | 282 try: |
282 if locked: | 283 if locked: |
289 except Exception: | 290 except Exception: |
290 log.error(traceback.format_exc()) | 291 log.error(traceback.format_exc()) |
291 raise JSONRPCError( | 292 raise JSONRPCError( |
292 'Error occurred locking repository `%s`' % repo.repo_name | 293 'Error occurred locking repository `%s`' % repo.repo_name |
293 ) | 294 ) |
295 | |
296 def get_locks(self, apiuser, userid=Optional(OAttr('apiuser'))): | |
297 """ | |
298 Get all locks for given userid, if | |
299 this command is runned by non-admin account userid is set to user | |
300 who is calling this method, thus returning locks for himself | |
301 | |
302 :param apiuser: | |
303 :param userid: | |
304 """ | |
305 if HasPermissionAnyApi('hg.admin')(user=apiuser): | |
306 pass | |
307 else: | |
308 #make sure normal user does not pass someone else userid, | |
309 #he is not allowed to do that | |
310 if not isinstance(userid, Optional) and userid != apiuser.user_id: | |
311 raise JSONRPCError( | |
312 'userid is not the same as your user' | |
313 ) | |
314 ret = [] | |
315 if isinstance(userid, Optional): | |
316 user = None | |
317 else: | |
318 user = get_user_or_error(userid) | |
319 | |
320 #show all locks | |
321 for r in Repository.getAll(): | |
322 userid, time_ = r.locked | |
323 if time_: | |
324 _api_data = r.get_api_data() | |
325 # if we use userfilter just show the locks for this user | |
326 if user: | |
327 if safe_int(userid) == user.user_id: | |
328 ret.append(_api_data) | |
329 else: | |
330 ret.append(_api_data) | |
331 | |
332 return ret | |
294 | 333 |
295 @HasPermissionAllDecorator('hg.admin') | 334 @HasPermissionAllDecorator('hg.admin') |
296 def show_ip(self, apiuser, userid): | 335 def show_ip(self, apiuser, userid): |
297 """ | 336 """ |
298 Shows IP address as seen from RhodeCode server, together with all | 337 Shows IP address as seen from RhodeCode server, together with all |