comparison rhodecode/controllers/api/api.py @ 3808:2feb58495f34 beta

locking API returns objects instead of string messages. - it's now possible to easily parse the output of lock functions
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 06 May 2013 16:34:02 +0200
parents a732bbc40c7e
children 647fb653048e
comparison
equal deleted inserted replaced
3807:e9b4664c958d 3808:2feb58495f34
23 # You should have received a copy of the GNU General Public License 23 # You should have received a copy of the GNU General Public License
24 # along with this program; if not, write to the Free Software 24 # along with this program; if not, write to the Free Software
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 time
28 import traceback 29 import traceback
29 import logging 30 import logging
30 31
31 from rhodecode.controllers.api import JSONRPCController, JSONRPCError 32 from rhodecode.controllers.api import JSONRPCController, JSONRPCError
32 from rhodecode.lib.auth import PasswordGenerator, AuthUser, \ 33 from rhodecode.lib.auth import PasswordGenerator, AuthUser, \
263 264
264 if isinstance(locked, Optional): 265 if isinstance(locked, Optional):
265 lockobj = Repository.getlock(repo) 266 lockobj = Repository.getlock(repo)
266 267
267 if lockobj[0] is None: 268 if lockobj[0] is None:
268 return ('Repo `%s` not locked. Locked=`False`.' 269 _d = {
269 % (repo.repo_name)) 270 'repo': repo.repo_name,
271 'locked': False,
272 'locked_since': None,
273 'locked_by': None,
274 'msg': 'Repo `%s` not locked.' % repo.repo_name
275 }
276 return _d
270 else: 277 else:
271 userid, time_ = lockobj 278 userid, time_ = lockobj
272 user = get_user_or_error(userid) 279 lock_user = get_user_or_error(userid)
273 280 _d = {
274 return ('Repo `%s` locked by `%s`. Locked=`True`. ' 281 'repo': repo.repo_name,
275 'Locked since: `%s`' 282 'locked': True,
276 % (repo.repo_name, user.username, 283 'locked_since': time_,
277 json.dumps(time_to_datetime(time_)))) 284 'locked_by': lock_user.username,
278 285 'msg': ('Repo `%s` locked by `%s`. '
286 % (repo.repo_name,
287 json.dumps(time_to_datetime(time_))))
288 }
289 return _d
290
291 # force locked state through a flag
279 else: 292 else:
280 locked = str2bool(locked) 293 locked = str2bool(locked)
281 try: 294 try:
282 if locked: 295 if locked:
283 Repository.lock(repo, user.user_id) 296 lock_time = time.time()
297 Repository.lock(repo, user.user_id, lock_time)
284 else: 298 else:
299 lock_time = None
285 Repository.unlock(repo) 300 Repository.unlock(repo)
286 301 _d = {
287 return ('User `%s` set lock state for repo `%s` to `%s`' 302 'repo': repo.repo_name,
288 % (user.username, repo.repo_name, locked)) 303 'locked': locked,
304 'locked_since': lock_time,
305 'locked_by': user.username,
306 'msg': ('User `%s` set lock state for repo `%s` to `%s`'
307 % (user.username, repo.repo_name, locked))
308 }
309 return _d
289 except Exception: 310 except Exception:
290 log.error(traceback.format_exc()) 311 log.error(traceback.format_exc())
291 raise JSONRPCError( 312 raise JSONRPCError(
292 'Error occurred locking repository `%s`' % repo.repo_name 313 'Error occurred locking repository `%s`' % repo.repo_name
293 ) 314 )