changeset 169:8e01265fb586

added long term caching of repo_list to the base controller. changed hg and repos to use that cached list.
author Marcin Kuzminski <marcin@python-works.com>
date Fri, 21 May 2010 02:17:13 +0200
parents e35210568664
children f9e8920958af
files pylons_app/controllers/hg.py pylons_app/controllers/repos.py pylons_app/lib/base.py
diffstat 3 files changed, 8 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/pylons_app/controllers/hg.py	Fri May 21 02:13:34 2010 +0200
+++ b/pylons_app/controllers/hg.py	Fri May 21 02:17:13 2010 +0200
@@ -6,7 +6,6 @@
 from pylons_app.lib.base import BaseController, render
 from pylons_app.lib.utils import get_repo_slug
 from pylons_app.model.hg_model import HgModel
-from beaker.cache import cache_region
 log = logging.getLogger(__name__)
 
 class HgController(BaseController):
@@ -16,15 +15,7 @@
         c.repo_name = get_repo_slug(request)
         
     def index(self):
-        
-        hg_model = HgModel()
-        @cache_region('short_term', 'repo_list')
-        def _list():
-            return list(hg_model.get_repos())
-        
-        c.repos_list = _list()
         c.current_sort = request.GET.get('sort', 'name')
-        
         cs = c.current_sort
         c.cs_slug = cs.replace('-', '')
         sortables = ['name', 'description', 'last_change', 'tip', 'contact']
@@ -32,8 +23,8 @@
         if cs and c.cs_slug in sortables:
             sort_key = c.cs_slug + '_sort'
             if cs.startswith('-'):
-                c.repos_list.sort(key=itemgetter(sort_key), reverse=True)
+                c.repos_list = sorted(c.cached_repo_list, key=itemgetter(sort_key), reverse=True)
             else:
-                c.repos_list.sort(key=itemgetter(sort_key), reverse=False)
+                c.repos_list = sorted(c.cached_repo_list, key=itemgetter(sort_key), reverse=False)
             
         return render('/index.html')
--- a/pylons_app/controllers/repos.py	Fri May 21 02:13:34 2010 +0200
+++ b/pylons_app/controllers/repos.py	Fri May 21 02:17:13 2010 +0200
@@ -26,9 +26,7 @@
     def index(self, format='html'):
         """GET /repos: All items in the collection"""
         # url('repos')
-        hg_model = HgModel()
-        c.repos_list = list(hg_model.get_repos())
-        c.repos_list.sort(key=itemgetter('name'))
+        c.repos_list = c.cached_repo_list
         return render('admin/repos/repos.html')
     
     def create(self):
@@ -64,7 +62,7 @@
         shutil.move(rm_path, os.path.join(path, 'rm__%s-%s' % (datetime.today(), id)))
         
         #clear our cached list for refresh with new repo
-        invalidate_cache('repo_list_2')
+        invalidate_cache('cached_repo_list')
                     
         return redirect(url('repos'))
         
--- a/pylons_app/lib/base.py	Fri May 21 02:13:34 2010 +0200
+++ b/pylons_app/lib/base.py	Fri May 21 02:17:13 2010 +0200
@@ -9,9 +9,9 @@
 from pylons import tmpl_context as c
 from pylons_app.model.hg_model import HgModel
 
-@cache_region('long_term', 'repo_list_2')
-def _get_repos():
-    return [rep['name'] for rep in HgModel().get_repos()]
+@cache_region('long_term', 'cached_repo_list')
+def _get_repos_cached():
+    return [rep for rep in HgModel().get_repos()]
 
 class BaseController(WSGIController):
         
@@ -20,7 +20,7 @@
         # WSGIController.__call__ dispatches to the Controller method
         # the request is routed to. This routing information is
         # available in environ['pylons.routes_dict']
-        c.repo_list = _get_repos()
+        c.cached_repo_list = _get_repos_cached()
         self.sa = meta.Session
         try:
             return WSGIController.__call__(self, environ, start_response)