changeset 3616:e9ac7544c2f6 beta

added super simple cache_key paster function for showing and cleaning cache keys
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 27 Mar 2013 19:06:09 +0100
parents 50927aedcab5
children b5c3680e7c76
files rhodecode/lib/paster_commands/cache_keys.py rhodecode/templates/base/base.html setup.py
diffstat 3 files changed, 100 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/lib/paster_commands/cache_keys.py	Wed Mar 27 19:06:09 2013 +0100
@@ -0,0 +1,85 @@
+# -*- coding: utf-8 -*-
+"""
+    rhodecode.lib.paster_commands.cache_keys
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    cleanup-keys paster command for RhodeCode
+
+
+    :created_on: mar 27, 2013
+    :author: marcink
+    :copyright: (C) 2010-2013 Marcin Kuzminski <marcin@python-works.com>
+    :license: GPLv3, see COPYING for more details.
+"""
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+from __future__ import with_statement
+
+import os
+import sys
+import logging
+
+from os.path import dirname as dn, join as jn
+from rhodecode.model.meta import Session
+#to get the rhodecode import
+rc_path = dn(dn(dn(os.path.realpath(__file__))))
+sys.path.append(rc_path)
+from rhodecode.lib.utils import BasePasterCommand
+
+from rhodecode.model.db import CacheInvalidation
+
+
+log = logging.getLogger(__name__)
+
+
+class Command(BasePasterCommand):
+
+    max_args = 1
+    min_args = 1
+
+    usage = "CONFIG_FILE"
+    group_name = "RhodeCode"
+    takes_config_file = -1
+    parser = BasePasterCommand.standard_parser(verbose=True)
+    summary = "Cache keys utils"
+
+    def command(self):
+        #get SqlAlchemy session
+        self._init_session()
+        _caches = CacheInvalidation.query().order_by(CacheInvalidation.cache_key).all()
+        if self.options.show:
+            for c_obj in _caches:
+                print 'key:%s active:%s' % (c_obj.cache_key, c_obj.cache_active)
+        elif self.options.cleanup:
+            for c_obj in _caches:
+                Session().delete(c_obj)
+                print 'removing key:%s' % (c_obj.cache_key)
+            Session().commit()
+        else:
+            print 'nothing done exiting...'
+        sys.exit(0)
+
+    def update_parser(self):
+        self.parser.add_option(
+            '--show',
+            action='store_true',
+            dest='show',
+            help=("show existing cache keys with together with status")
+        )
+
+        self.parser.add_option(
+            '--cleanup',
+            action="store_true",
+            dest="cleanup",
+            help="cleanup existing cache keys"
+        )
--- a/rhodecode/templates/base/base.html	Wed Mar 27 18:54:36 2013 +0100
+++ b/rhodecode/templates/base/base.html	Wed Mar 27 19:06:09 2013 +0100
@@ -135,20 +135,20 @@
                   <li>${h.link_to(_('Lock'), h.url('toggle_locking',repo_name=c.repo_name),class_='locking_add')}</li>
                 %endif
               %endif
-		      ## TODO: this check feels wrong, it would be better to have a check for permissions
-		      ## also it feels like a job for the controller
-		      %if c.rhodecode_user.username != 'default':
-		          <li>
-		           <a class="${follow_class()}" onclick="javascript:toggleFollowingRepo(this,${c.rhodecode_db_repo.repo_id},'${str(h.get_token())}');">
-		            <span class="show-follow">${_('Follow')}</span>
-		            <span class="show-following">${_('Unfollow')}</span>
-		          </a>
-		          </li>
-		          <li><a href="${h.url('repo_fork_home',repo_name=c.repo_name)}" class="fork">${_('Fork')}</a></li>
-		          %if h.is_hg(c.rhodecode_repo):
-		          <li><a href="${h.url('pullrequest_home',repo_name=c.repo_name)}" class="pull-request">${_('Create Pull Request')}</a></li>
-		          %endif
-		      %endif
+              ## TODO: this check feels wrong, it would be better to have a check for permissions
+              ## also it feels like a job for the controller
+              %if c.rhodecode_user.username != 'default':
+                  <li>
+                   <a class="${follow_class()}" onclick="javascript:toggleFollowingRepo(this,${c.rhodecode_db_repo.repo_id},'${str(h.get_token())}');">
+                    <span class="show-follow">${_('Follow')}</span>
+                    <span class="show-following">${_('Unfollow')}</span>
+                  </a>
+                  </li>
+                  <li><a href="${h.url('repo_fork_home',repo_name=c.repo_name)}" class="fork">${_('Fork')}</a></li>
+                  %if h.is_hg(c.rhodecode_repo):
+                  <li><a href="${h.url('pullrequest_home',repo_name=c.repo_name)}" class="pull-request">${_('Create Pull Request')}</a></li>
+                  %endif
+              %endif
              </ul>
         </li>
         <li ${is_current('showpullrequest')}>
--- a/setup.py	Wed Mar 27 18:54:36 2013 +0100
+++ b/setup.py	Wed Mar 27 19:06:09 2013 +0100
@@ -164,6 +164,7 @@
     update-repoinfo=rhodecode.lib.paster_commands.update_repoinfo:Command
     make-rcext=rhodecode.lib.paster_commands.make_rcextensions:Command
     repo-scan=rhodecode.lib.paster_commands.repo_scan:Command
+    cache-keys=rhodecode.lib.paster_commands.cache_keys:Command
     make-index=rhodecode.lib.indexers:MakeIndex
     upgrade-db=rhodecode.lib.dbmigrate:UpgradeDb
     celeryd=rhodecode.lib.celerypylons.commands:CeleryDaemonCommand