##// END OF EJS Templates
logger name update
marcink -
r1763:d09c52be beta
parent child Browse files
Show More
@@ -1,154 +1,154 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 import time
6 import time
7
7
8 from paste.auth.basic import AuthBasicAuthenticator
8 from paste.auth.basic import AuthBasicAuthenticator
9
9
10 from pylons import config, tmpl_context as c, request, session, url
10 from pylons import config, tmpl_context as c, request, session, url
11 from pylons.controllers import WSGIController
11 from pylons.controllers import WSGIController
12 from pylons.controllers.util import redirect
12 from pylons.controllers.util import redirect
13 from pylons.templating import render_mako as render
13 from pylons.templating import render_mako as render
14
14
15 from rhodecode import __version__, BACKENDS
15 from rhodecode import __version__, BACKENDS
16
16
17 from rhodecode.lib import str2bool
17 from rhodecode.lib import str2bool
18 from rhodecode.lib.auth import AuthUser, get_container_username, authfunc,\
18 from rhodecode.lib.auth import AuthUser, get_container_username, authfunc,\
19 HasPermissionAnyMiddleware
19 HasPermissionAnyMiddleware
20 from rhodecode.lib.utils import get_repo_slug, invalidate_cache
20 from rhodecode.lib.utils import get_repo_slug, invalidate_cache
21 from rhodecode.model import meta
21 from rhodecode.model import meta
22
22
23 from rhodecode.model.db import Repository
23 from rhodecode.model.db import Repository
24 from rhodecode.model.notification import NotificationModel
24 from rhodecode.model.notification import NotificationModel
25 from rhodecode.model.scm import ScmModel
25 from rhodecode.model.scm import ScmModel
26
26
27 log = logging.getLogger(__name__)
27 log = logging.getLogger(__name__)
28
28
29 class BaseVCSController(object):
29 class BaseVCSController(object):
30
30
31 def __init__(self, application, config):
31 def __init__(self, application, config):
32 self.application = application
32 self.application = application
33 self.config = config
33 self.config = config
34 # base path of repo locations
34 # base path of repo locations
35 self.basepath = self.config['base_path']
35 self.basepath = self.config['base_path']
36 #authenticate this mercurial request using authfunc
36 #authenticate this mercurial request using authfunc
37 self.authenticate = AuthBasicAuthenticator('', authfunc)
37 self.authenticate = AuthBasicAuthenticator('', authfunc)
38 self.ipaddr = '0.0.0.0'
38 self.ipaddr = '0.0.0.0'
39
39
40 def _invalidate_cache(self, repo_name):
40 def _invalidate_cache(self, repo_name):
41 """
41 """
42 Set's cache for this repository for invalidation on next access
42 Set's cache for this repository for invalidation on next access
43
43
44 :param repo_name: full repo name, also a cache key
44 :param repo_name: full repo name, also a cache key
45 """
45 """
46 invalidate_cache('get_repo_cached_%s' % repo_name)
46 invalidate_cache('get_repo_cached_%s' % repo_name)
47
47
48 def _check_permission(self, action, user, repo_name):
48 def _check_permission(self, action, user, repo_name):
49 """
49 """
50 Checks permissions using action (push/pull) user and repository
50 Checks permissions using action (push/pull) user and repository
51 name
51 name
52
52
53 :param action: push or pull action
53 :param action: push or pull action
54 :param user: user instance
54 :param user: user instance
55 :param repo_name: repository name
55 :param repo_name: repository name
56 """
56 """
57 if action == 'push':
57 if action == 'push':
58 if not HasPermissionAnyMiddleware('repository.write',
58 if not HasPermissionAnyMiddleware('repository.write',
59 'repository.admin')(user,
59 'repository.admin')(user,
60 repo_name):
60 repo_name):
61 return False
61 return False
62
62
63 else:
63 else:
64 #any other action need at least read permission
64 #any other action need at least read permission
65 if not HasPermissionAnyMiddleware('repository.read',
65 if not HasPermissionAnyMiddleware('repository.read',
66 'repository.write',
66 'repository.write',
67 'repository.admin')(user,
67 'repository.admin')(user,
68 repo_name):
68 repo_name):
69 return False
69 return False
70
70
71 return True
71 return True
72
72
73 def __call__(self, environ, start_response):
73 def __call__(self, environ, start_response):
74 start = time.time()
74 start = time.time()
75 try:
75 try:
76 return self._handle_request(environ, start_response)
76 return self._handle_request(environ, start_response)
77 finally:
77 finally:
78 log = logging.getLogger(self.__class__.__name__)
78 log = logging.getLogger('rhodecode.' + self.__class__.__name__)
79 log.debug('Request time: %.3fs' % (time.time() - start))
79 log.debug('Request time: %.3fs' % (time.time() - start))
80 meta.Session.remove()
80 meta.Session.remove()
81
81
82
82
83 class BaseController(WSGIController):
83 class BaseController(WSGIController):
84
84
85 def __before__(self):
85 def __before__(self):
86 c.rhodecode_version = __version__
86 c.rhodecode_version = __version__
87 c.rhodecode_name = config.get('rhodecode_title')
87 c.rhodecode_name = config.get('rhodecode_title')
88 c.use_gravatar = str2bool(config.get('use_gravatar'))
88 c.use_gravatar = str2bool(config.get('use_gravatar'))
89 c.ga_code = config.get('rhodecode_ga_code')
89 c.ga_code = config.get('rhodecode_ga_code')
90 c.repo_name = get_repo_slug(request)
90 c.repo_name = get_repo_slug(request)
91 c.backends = BACKENDS.keys()
91 c.backends = BACKENDS.keys()
92 c.unread_notifications = NotificationModel()\
92 c.unread_notifications = NotificationModel()\
93 .get_unread_cnt_for_user(c.rhodecode_user.user_id)
93 .get_unread_cnt_for_user(c.rhodecode_user.user_id)
94 self.cut_off_limit = int(config.get('cut_off_limit'))
94 self.cut_off_limit = int(config.get('cut_off_limit'))
95
95
96 self.sa = meta.Session
96 self.sa = meta.Session
97 self.scm_model = ScmModel(self.sa)
97 self.scm_model = ScmModel(self.sa)
98
98
99 def __call__(self, environ, start_response):
99 def __call__(self, environ, start_response):
100 """Invoke the Controller"""
100 """Invoke the Controller"""
101 # WSGIController.__call__ dispatches to the Controller method
101 # WSGIController.__call__ dispatches to the Controller method
102 # the request is routed to. This routing information is
102 # the request is routed to. This routing information is
103 # available in environ['pylons.routes_dict']
103 # available in environ['pylons.routes_dict']
104 start = time.time()
104 start = time.time()
105 try:
105 try:
106 # make sure that we update permissions each time we call controller
106 # make sure that we update permissions each time we call controller
107 api_key = request.GET.get('api_key')
107 api_key = request.GET.get('api_key')
108 cookie_store = session.get('rhodecode_user') or {}
108 cookie_store = session.get('rhodecode_user') or {}
109 user_id = cookie_store.get('user_id', None)
109 user_id = cookie_store.get('user_id', None)
110 username = get_container_username(environ, config)
110 username = get_container_username(environ, config)
111
111
112 auth_user = AuthUser(user_id, api_key, username)
112 auth_user = AuthUser(user_id, api_key, username)
113 request.user = auth_user
113 request.user = auth_user
114 self.rhodecode_user = c.rhodecode_user = auth_user
114 self.rhodecode_user = c.rhodecode_user = auth_user
115 if not self.rhodecode_user.is_authenticated and \
115 if not self.rhodecode_user.is_authenticated and \
116 self.rhodecode_user.user_id is not None:
116 self.rhodecode_user.user_id is not None:
117 self.rhodecode_user\
117 self.rhodecode_user\
118 .set_authenticated(cookie_store.get('is_authenticated'))
118 .set_authenticated(cookie_store.get('is_authenticated'))
119
119
120 session['rhodecode_user'] = self.rhodecode_user.get_cookie_store()
120 session['rhodecode_user'] = self.rhodecode_user.get_cookie_store()
121 session.save()
121 session.save()
122 return WSGIController.__call__(self, environ, start_response)
122 return WSGIController.__call__(self, environ, start_response)
123 finally:
123 finally:
124 log.debug('Request time: %.3fs' % (time.time() - start))
124 log.debug('Request time: %.3fs' % (time.time() - start))
125 meta.Session.remove()
125 meta.Session.remove()
126
126
127
127
128 class BaseRepoController(BaseController):
128 class BaseRepoController(BaseController):
129 """
129 """
130 Base class for controllers responsible for loading all needed data for
130 Base class for controllers responsible for loading all needed data for
131 repository loaded items are
131 repository loaded items are
132
132
133 c.rhodecode_repo: instance of scm repository
133 c.rhodecode_repo: instance of scm repository
134 c.rhodecode_db_repo: instance of db
134 c.rhodecode_db_repo: instance of db
135 c.repository_followers: number of followers
135 c.repository_followers: number of followers
136 c.repository_forks: number of forks
136 c.repository_forks: number of forks
137 """
137 """
138
138
139 def __before__(self):
139 def __before__(self):
140 super(BaseRepoController, self).__before__()
140 super(BaseRepoController, self).__before__()
141 if c.repo_name:
141 if c.repo_name:
142
142
143 c.rhodecode_db_repo = Repository.get_by_repo_name(c.repo_name)
143 c.rhodecode_db_repo = Repository.get_by_repo_name(c.repo_name)
144 c.rhodecode_repo = c.rhodecode_db_repo.scm_instance
144 c.rhodecode_repo = c.rhodecode_db_repo.scm_instance
145
145
146 if c.rhodecode_repo is None:
146 if c.rhodecode_repo is None:
147 log.error('%s this repository is present in database but it '
147 log.error('%s this repository is present in database but it '
148 'cannot be created as an scm instance', c.repo_name)
148 'cannot be created as an scm instance', c.repo_name)
149
149
150 redirect(url('home'))
150 redirect(url('home'))
151
151
152 c.repository_followers = self.scm_model.get_followers(c.repo_name)
152 c.repository_followers = self.scm_model.get_followers(c.repo_name)
153 c.repository_forks = self.scm_model.get_forks(c.repo_name)
153 c.repository_forks = self.scm_model.get_forks(c.repo_name)
154
154
General Comments 0
You need to be logged in to leave comments. Login now