Changeset - 8e01265fb586
[Not reviewed]
default
0 3 0
Marcin Kuzminski - 15 years ago 2010-05-21 02:17:13
marcin@python-works.com
added long term caching of repo_list to the base controller. changed hg and repos to use that cached list.
3 files changed with 8 insertions and 19 deletions:
0 comments (0 inline, 0 general)
pylons_app/controllers/hg.py
Show inline comments
 
@@ -6,7 +6,6 @@ from pylons import tmpl_context as c, re
 
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 @@ class HgController(BaseController):
 
        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 @@ class HgController(BaseController):
 
        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')
pylons_app/controllers/repos.py
Show inline comments
 
@@ -26,9 +26,7 @@ class ReposController(BaseController):
 
    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 @@ class ReposController(BaseController):
 
        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'))
 
        
pylons_app/lib/base.py
Show inline comments
 
@@ -9,9 +9,9 @@ from beaker.cache import cache_region
 
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 @@ class BaseController(WSGIController):
 
        # 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)
0 comments (0 inline, 0 general)