Mercurial > kallithea
comparison pylons_app/controllers/hg.py @ 93:aec4c0071cb3
added empty controllers for branches tags files graph, routing and test for them
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 21 Apr 2010 00:26:11 +0200 |
parents | 670713507d03 |
children | 8b06c420491d |
comparison
equal
deleted
inserted
replaced
92:2968fb635787 | 93:aec4c0071cb3 |
---|---|
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # -*- coding: utf-8 -*- | 2 # -*- coding: utf-8 -*- |
3 import logging | 3 from mako.template import Template |
4 from mercurial.hg import repository | |
5 from mercurial.hgweb import hgweb | |
6 from mercurial.hgweb.request import wsgiapplication | |
7 from mercurial.localrepo import localrepository | |
8 from operator import itemgetter | |
4 from pylons import tmpl_context as c, app_globals as g, session, request, config | 9 from pylons import tmpl_context as c, app_globals as g, session, request, config |
10 from pylons.controllers.util import abort | |
5 from pylons_app.lib import helpers as h | 11 from pylons_app.lib import helpers as h |
6 from pylons_app.lib.base import BaseController, render | 12 from pylons_app.lib.base import BaseController, render |
7 from mako.template import Template | |
8 from pylons.controllers.util import abort | |
9 from pylons_app.lib.utils import get_repo_slug | 13 from pylons_app.lib.utils import get_repo_slug |
10 from operator import itemgetter | |
11 from pylons_app.model.hg_model import HgModel | 14 from pylons_app.model.hg_model import HgModel |
15 import logging | |
16 import os | |
17 from beaker.cache import cache_region | |
12 log = logging.getLogger(__name__) | 18 log = logging.getLogger(__name__) |
13 | 19 |
14 class HgController(BaseController): | 20 class HgController(BaseController): |
15 | 21 |
16 def __before__(self): | 22 def __before__(self): |
17 c.repos_prefix = config['repos_name'] | 23 c.repos_prefix = config['repos_name'] |
18 c.staticurl = g.statics | 24 c.staticurl = g.statics |
19 c.repo_name = get_repo_slug(request) | 25 c.repo_name = get_repo_slug(request) |
20 | 26 |
21 def index(self): | 27 def index(self): |
28 | |
29 | |
22 hg_model = HgModel() | 30 hg_model = HgModel() |
23 c.repos_list = list(hg_model.get_repos()) | 31 @cache_region('short_term', 'repo_list') |
32 def _list(): | |
33 return list(hg_model.get_repos()) | |
34 | |
35 c.repos_list = _list() | |
24 c.current_sort = request.GET.get('sort', 'name') | 36 c.current_sort = request.GET.get('sort', 'name') |
25 | 37 |
26 cs = c.current_sort | 38 cs = c.current_sort |
27 c.cs_slug = cs.replace('-', '') | 39 c.cs_slug = cs.replace('-', '') |
28 sortables = ['name', 'description', 'last_change', 'tip', 'contact'] | 40 sortables = ['name', 'description', 'last_change', 'tip', 'contact'] |
34 else: | 46 else: |
35 c.repos_list.sort(key=itemgetter(sort_key), reverse=False) | 47 c.repos_list.sort(key=itemgetter(sort_key), reverse=False) |
36 | 48 |
37 return render('/index.html') | 49 return render('/index.html') |
38 | 50 |
39 def view(self, *args, **kwargs): | 51 def view(self, environ, start_response, path_info): |
40 #TODO: reimplement this not tu use hgwebdir | 52 print path_info |
41 | |
42 response = g.hgapp(request.environ, self.start_response) | |
43 | 53 |
54 def app_maker(): | |
55 | |
56 path = os.path.join(g.base_path, c.repo_name) | |
57 repo = repository(g.baseui, path) | |
58 hgwebapp = hgweb(repo, c.repo_name) | |
59 return hgwebapp | |
60 | |
61 a = wsgiapplication(app_maker) | |
62 resp = a(environ, start_response) | |
63 | |
44 http_accept = request.environ.get('HTTP_ACCEPT', False) | 64 http_accept = request.environ.get('HTTP_ACCEPT', False) |
45 if not http_accept: | 65 if not http_accept: |
46 return abort(status_code=400, detail='no http accept in header') | 66 return abort(status_code=400, detail='no http accept in header') |
47 | 67 |
48 #for mercurial protocols and raw files we can't wrap into mako | 68 #for mercurial protocols and raw files we can't wrap into mako |
49 if http_accept.find("mercurial") != -1 or \ | 69 if http_accept.find("mercurial") != -1 or \ |
50 request.environ['PATH_INFO'].find('raw-file') != -1: | 70 request.environ['PATH_INFO'].find('raw-file') != -1: |
51 return response | 71 return resp |
52 try: | 72 try: |
53 tmpl = u''.join(response) | 73 tmpl = u''.join(resp) |
54 template = Template(tmpl, lookup=request.environ['pylons.pylons']\ | 74 template = Template(tmpl, lookup=request.environ['pylons.pylons']\ |
55 .config['pylons.app_globals'].mako_lookup) | 75 .config['pylons.app_globals'].mako_lookup) |
56 | 76 |
57 except (RuntimeError, UnicodeDecodeError): | 77 except (RuntimeError, UnicodeDecodeError): |
58 log.info('disabling unicode due to encoding error') | 78 log.info('disabling unicode due to encoding error') |
59 response = g.hgapp(request.environ, self.start_response) | 79 resp = g.hgapp(request.environ, self.start_response) |
60 tmpl = ''.join(response) | 80 tmpl = ''.join(resp) |
61 template = Template(tmpl, lookup=request.environ['pylons.pylons']\ | 81 template = Template(tmpl, lookup=request.environ['pylons.pylons']\ |
62 .config['pylons.app_globals'].mako_lookup, disable_unicode=True) | 82 .config['pylons.app_globals'].mako_lookup, disable_unicode=True) |
63 | 83 |
64 | |
65 return template.render(g=g, c=c, session=session, h=h) | 84 return template.render(g=g, c=c, session=session, h=h) |