##// END OF EJS Templates
Added Request time tracking
marcink -
r1601:6f06daee beta
parent child Browse files
Show More
@@ -1,82 +1,84 b''
1 1 """The base Controller API
2 2
3 3 Provides the BaseController class for subclassing.
4 4 """
5 5 import logging
6
6 import time
7 7 from pylons import config, tmpl_context as c, request, session, url
8 8 from pylons.controllers import WSGIController
9 9 from pylons.controllers.util import redirect
10 10 from pylons.templating import render_mako as render
11 11
12 12 from rhodecode import __version__
13 13 from rhodecode.lib.auth import AuthUser
14 14 from rhodecode.lib.utils import get_repo_slug
15 15 from rhodecode.model import meta
16 16 from rhodecode.model.scm import ScmModel
17 17 from rhodecode import BACKENDS
18 18 from rhodecode.model.db import Repository
19 19
20 20 log = logging.getLogger(__name__)
21 21
22 22 class BaseController(WSGIController):
23 23
24 24 def __before__(self):
25 25 c.rhodecode_version = __version__
26 26 c.rhodecode_name = config.get('rhodecode_title')
27 27 c.ga_code = config.get('rhodecode_ga_code')
28 28 c.repo_name = get_repo_slug(request)
29 29 c.backends = BACKENDS.keys()
30 30 self.cut_off_limit = int(config.get('cut_off_limit'))
31 31
32 32 self.sa = meta.Session()
33 33 self.scm_model = ScmModel(self.sa)
34 34
35 35 #c.unread_journal = scm_model.get_unread_journal()
36 36
37 37 def __call__(self, environ, start_response):
38 38 """Invoke the Controller"""
39 39 # WSGIController.__call__ dispatches to the Controller method
40 40 # the request is routed to. This routing information is
41 41 # available in environ['pylons.routes_dict']
42 start = time.time()
42 43 try:
43 44 # putting this here makes sure that we update permissions each time
44 45 api_key = request.GET.get('api_key')
45 46 user_id = getattr(session.get('rhodecode_user'), 'user_id', None)
46 47 self.rhodecode_user = c.rhodecode_user = AuthUser(user_id, api_key)
47 48 self.rhodecode_user.set_authenticated(
48 49 getattr(session.get('rhodecode_user'),
49 50 'is_authenticated', False))
50 51 session['rhodecode_user'] = self.rhodecode_user
51 52 session.save()
52 53 return WSGIController.__call__(self, environ, start_response)
53 54 finally:
55 log.debug('Request time: %.3fs' % (time.time()-start))
54 56 meta.Session.remove()
55 57
56 58
57 59 class BaseRepoController(BaseController):
58 60 """
59 61 Base class for controllers responsible for loading all needed data
60 62 for those controllers, loaded items are
61 63
62 64 c.rhodecode_repo: instance of scm repository (taken from cache)
63 65
64 66 """
65 67
66 68 def __before__(self):
67 69 super(BaseRepoController, self).__before__()
68 70 if c.repo_name:
69 71
70 72 c.rhodecode_db_repo = Repository.get_by_repo_name(c.repo_name)
71 73 c.rhodecode_repo = c.rhodecode_db_repo.scm_instance
72 74
73 75 if c.rhodecode_repo is None:
74 76 log.error('%s this repository is present in database but it '
75 77 'cannot be created as an scm instance', c.repo_name)
76 78
77 79 redirect(url('home'))
78 80
79 81 c.repository_followers = \
80 82 self.scm_model.get_followers(c.repo_name)
81 83 c.repository_forks = self.scm_model.get_forks(c.repo_name)
82 84
General Comments 0
You need to be logged in to leave comments. Login now