comparison pylons_app/controllers/hg.py @ 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 28f28d423268
children b68b2246e5a6
comparison
equal deleted inserted replaced
168:e35210568664 169:8e01265fb586
4 from operator import itemgetter 4 from operator import itemgetter
5 from pylons import tmpl_context as c, request, config 5 from pylons import tmpl_context as c, request, config
6 from pylons_app.lib.base import BaseController, render 6 from pylons_app.lib.base import BaseController, render
7 from pylons_app.lib.utils import get_repo_slug 7 from pylons_app.lib.utils import get_repo_slug
8 from pylons_app.model.hg_model import HgModel 8 from pylons_app.model.hg_model import HgModel
9 from beaker.cache import cache_region
10 log = logging.getLogger(__name__) 9 log = logging.getLogger(__name__)
11 10
12 class HgController(BaseController): 11 class HgController(BaseController):
13 12
14 def __before__(self): 13 def __before__(self):
15 c.repos_prefix = config['repos_name'] 14 c.repos_prefix = config['repos_name']
16 c.repo_name = get_repo_slug(request) 15 c.repo_name = get_repo_slug(request)
17 16
18 def index(self): 17 def index(self):
19
20 hg_model = HgModel()
21 @cache_region('short_term', 'repo_list')
22 def _list():
23 return list(hg_model.get_repos())
24
25 c.repos_list = _list()
26 c.current_sort = request.GET.get('sort', 'name') 18 c.current_sort = request.GET.get('sort', 'name')
27
28 cs = c.current_sort 19 cs = c.current_sort
29 c.cs_slug = cs.replace('-', '') 20 c.cs_slug = cs.replace('-', '')
30 sortables = ['name', 'description', 'last_change', 'tip', 'contact'] 21 sortables = ['name', 'description', 'last_change', 'tip', 'contact']
31 22
32 if cs and c.cs_slug in sortables: 23 if cs and c.cs_slug in sortables:
33 sort_key = c.cs_slug + '_sort' 24 sort_key = c.cs_slug + '_sort'
34 if cs.startswith('-'): 25 if cs.startswith('-'):
35 c.repos_list.sort(key=itemgetter(sort_key), reverse=True) 26 c.repos_list = sorted(c.cached_repo_list, key=itemgetter(sort_key), reverse=True)
36 else: 27 else:
37 c.repos_list.sort(key=itemgetter(sort_key), reverse=False) 28 c.repos_list = sorted(c.cached_repo_list, key=itemgetter(sort_key), reverse=False)
38 29
39 return render('/index.html') 30 return render('/index.html')