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