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