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