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