comparison rhodecode/controllers/api/api.py @ 3457:08e8115585bd beta

calling lock function without lock attribute, will return lock state
author Marcin Kuzminski <marcin@python-works.com>
date Tue, 05 Mar 2013 20:03:33 +0100
parents eda34a21796e
children 7cde75eac0fe
comparison
equal deleted inserted replaced
3456:cf1fbc9fed89 3457:08e8115585bd
25 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 25 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
26 # MA 02110-1301, USA. 26 # MA 02110-1301, USA.
27 27
28 import traceback 28 import traceback
29 import logging 29 import logging
30 from pylons.controllers.util import abort
31 30
32 from rhodecode.controllers.api import JSONRPCController, JSONRPCError 31 from rhodecode.controllers.api import JSONRPCController, JSONRPCError
33 from rhodecode.lib.auth import PasswordGenerator, AuthUser, \ 32 from rhodecode.lib.auth import PasswordGenerator, AuthUser, \
34 HasPermissionAllDecorator, HasPermissionAnyDecorator, \ 33 HasPermissionAllDecorator, HasPermissionAnyDecorator, \
35 HasPermissionAnyApi, HasRepoPermissionAnyApi 34 HasPermissionAnyApi, HasRepoPermissionAnyApi
36 from rhodecode.lib.utils import map_groups, repo2db_mapper 35 from rhodecode.lib.utils import map_groups, repo2db_mapper
37 from rhodecode.lib.utils2 import str2bool 36 from rhodecode.lib.utils2 import str2bool, time_to_datetime
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
227 log.error(traceback.format_exc()) 227 log.error(traceback.format_exc())
228 raise JSONRPCError( 228 raise JSONRPCError(
229 'Error occurred during cache invalidation action' 229 'Error occurred during cache invalidation action'
230 ) 230 )
231 231
232 def lock(self, apiuser, repoid, locked, userid=Optional(OAttr('apiuser'))): 232 def lock(self, apiuser, repoid, locked=Optional(None),
233 userid=Optional(OAttr('apiuser'))):
233 """ 234 """
234 Set locking state on particular repository by given user, if 235 Set locking state on particular repository by given user, if
235 this command is runned by non-admin account userid is set to user 236 this command is runned by non-admin account userid is set to user
236 who is calling this method 237 who is calling this method
237 238
255 else: 256 else:
256 raise JSONRPCError('repository `%s` does not exist' % (repoid)) 257 raise JSONRPCError('repository `%s` does not exist' % (repoid))
257 258
258 if isinstance(userid, Optional): 259 if isinstance(userid, Optional):
259 userid = apiuser.user_id 260 userid = apiuser.user_id
261
260 user = get_user_or_error(userid) 262 user = get_user_or_error(userid)
261 locked = str2bool(locked) 263
262 try: 264 if isinstance(locked, Optional):
263 if locked: 265 lockobj = Repository.getlock(repo)
264 Repository.lock(repo, user.user_id) 266
267 if lockobj[0] is None:
268 return ('Repo `%s` not locked. Locked=`False`.'
269 % (repo.repo_name))
265 else: 270 else:
266 Repository.unlock(repo) 271 userid, time_ = lockobj
267 272 user = get_user_or_error(userid)
268 return ('User `%s` set lock state for repo `%s` to `%s`' 273
269 % (user.username, repo.repo_name, locked)) 274 return ('Repo `%s` locked by `%s`. Locked=`True`. '
270 except Exception: 275 'Locked since: `%s`'
271 log.error(traceback.format_exc()) 276 % (repo.repo_name, user.username,
272 raise JSONRPCError( 277 h.fmt_date(time_to_datetime(time_))))
273 'Error occurred locking repository `%s`' % repo.repo_name 278
274 ) 279 else:
280 locked = str2bool(locked)
281 try:
282 if locked:
283 Repository.lock(repo, user.user_id)
284 else:
285 Repository.unlock(repo)
286
287 return ('User `%s` set lock state for repo `%s` to `%s`'
288 % (user.username, repo.repo_name, locked))
289 except Exception:
290 log.error(traceback.format_exc())
291 raise JSONRPCError(
292 'Error occurred locking repository `%s`' % repo.repo_name
293 )
275 294
276 @HasPermissionAllDecorator('hg.admin') 295 @HasPermissionAllDecorator('hg.admin')
277 def show_ip(self, apiuser, userid): 296 def show_ip(self, apiuser, userid):
278 """ 297 """
279 Shows IP address as seen from RhodeCode server, together with all 298 Shows IP address as seen from RhodeCode server, together with all