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