diff rhodecode/controllers/api/api.py @ 3235:d6029dacbcc4 beta

API invalidate_cache function ref #733
author Marcin Kuzminski <marcin@python-works.com>
date Sat, 26 Jan 2013 23:12:50 +0100
parents a50901f2108d
children 5f1850e4712a
line wrap: on
line diff
--- a/rhodecode/controllers/api/api.py	Sat Jan 26 23:11:40 2013 +0100
+++ b/rhodecode/controllers/api/api.py	Sat Jan 26 23:12:50 2013 +0100
@@ -202,6 +202,32 @@
                 'Error occurred during rescan repositories action'
             )
 
+    def invalidate_cache(self, apiuser, repoid):
+        """
+        Dispatch cache invalidation action on given repo
+
+        :param apiuser:
+        :param repoid:
+        """
+        repo = get_repo_or_error(repoid)
+        if HasPermissionAnyApi('hg.admin')(user=apiuser) is False:
+            # check if we have admin permission for this repo !
+            if HasRepoPermissionAnyApi('repository.admin',
+                                       'repository.write')(user=apiuser,
+                                            repo_name=repo.repo_name) is False:
+                raise JSONRPCError('repository `%s` does not exist' % (repoid))
+
+        try:
+            invalidated_keys = ScmModel().mark_for_invalidation(repo.repo_name)
+            Session().commit()
+            return ('Cache for repository `%s` was invalidated: '
+                    'invalidated cache keys: %s' % (repoid, invalidated_keys))
+        except Exception:
+            log.error(traceback.format_exc())
+            raise JSONRPCError(
+                'Error occurred during cache invalidation action'
+            )
+
     def lock(self, apiuser, repoid, locked, userid=Optional(OAttr('apiuser'))):
         """
         Set locking state on particular repository by given user, if