##// END OF EJS Templates
project refactoring, cleaned up lib.utils from rarly used functions, and place them...
marcink -
r756:01be209b beta
parent child Browse files
Show More
@@ -33,7 +33,7 b' from rhodecode.lib.auth import LoginRequ'
33 from rhodecode.lib.base import BaseController, render
33 from rhodecode.lib.base import BaseController, render
34 from rhodecode.lib.celerylib import tasks, run_task
34 from rhodecode.lib.celerylib import tasks, run_task
35 from rhodecode.lib.utils import repo2db_mapper, invalidate_cache, \
35 from rhodecode.lib.utils import repo2db_mapper, invalidate_cache, \
36 set_rhodecode_config, get_hg_settings, get_hg_ui_settings
36 set_rhodecode_config
37 from rhodecode.model.db import RhodeCodeUi, Repository
37 from rhodecode.model.db import RhodeCodeUi, Repository
38 from rhodecode.model.forms import UserForm, ApplicationSettingsForm, \
38 from rhodecode.model.forms import UserForm, ApplicationSettingsForm, \
39 ApplicationUiSettingsForm
39 ApplicationUiSettingsForm
@@ -68,8 +68,8 b' class SettingsController(BaseController)'
68 """GET /admin/settings: All items in the collection"""
68 """GET /admin/settings: All items in the collection"""
69 # url('admin_settings')
69 # url('admin_settings')
70
70
71 defaults = get_hg_settings()
71 defaults = SettingsModel().get_app_settings()
72 defaults.update(get_hg_ui_settings())
72 defaults.update(self.get_hg_ui_settings())
73 return htmlfill.render(
73 return htmlfill.render(
74 render('admin/settings/settings.html'),
74 render('admin/settings/settings.html'),
75 defaults=defaults,
75 defaults=defaults,
@@ -109,7 +109,7 b' class SettingsController(BaseController)'
109 h.flash(_('Repositories successfully rescanned'), category='success')
109 h.flash(_('Repositories successfully rescanned'), category='success')
110
110
111 if setting_id == 'whoosh':
111 if setting_id == 'whoosh':
112 repo_location = get_hg_ui_settings()['paths_root_path']
112 repo_location = self.get_hg_ui_settings()['paths_root_path']
113 full_index = request.POST.get('full_index', False)
113 full_index = request.POST.get('full_index', False)
114 task = run_task(tasks.whoosh_index, repo_location, full_index)
114 task = run_task(tasks.whoosh_index, repo_location, full_index)
115
115
@@ -312,3 +312,24 b' class SettingsController(BaseController)'
312
312
313 return render('admin/repos/repo_add_create_repository.html')
313 return render('admin/repos/repo_add_create_repository.html')
314
314
315 def get_hg_ui_settings(self):
316 ret = self.sa.query(RhodeCodeUi).all()
317
318 if not ret:
319 raise Exception('Could not get application ui settings !')
320 settings = {}
321 for each in ret:
322 k = each.ui_key
323 v = each.ui_value
324 if k == '/':
325 k = 'root_path'
326
327 if k.find('.') != -1:
328 k = k.replace('.', '_')
329
330 if each.ui_section == 'hooks':
331 v = each.ui_active
332
333 settings[each.ui_section + '_' + k] = v
334
335 return settings
@@ -63,7 +63,7 b' from dulwich.web import HTTPGitApplicati'
63 from paste.auth.basic import AuthBasicAuthenticator
63 from paste.auth.basic import AuthBasicAuthenticator
64 from paste.httpheaders import REMOTE_USER, AUTH_TYPE
64 from paste.httpheaders import REMOTE_USER, AUTH_TYPE
65 from rhodecode.lib.auth import authfunc, HasPermissionAnyMiddleware
65 from rhodecode.lib.auth import authfunc, HasPermissionAnyMiddleware
66 from rhodecode.lib.utils import is_git, invalidate_cache, check_repo_fast
66 from rhodecode.lib.utils import invalidate_cache, check_repo_fast
67 from rhodecode.model.user import UserModel
67 from rhodecode.model.user import UserModel
68 from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError
68 from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError
69 import logging
69 import logging
@@ -72,6 +72,18 b' import traceback'
72
72
73 log = logging.getLogger(__name__)
73 log = logging.getLogger(__name__)
74
74
75 def is_git(environ):
76 """
77 Returns True if request's target is git server. ``HTTP_USER_AGENT`` would
78 then have git client version given.
79
80 :param environ:
81 """
82 http_user_agent = environ.get('HTTP_USER_AGENT')
83 if http_user_agent and http_user_agent.startswith('git'):
84 return True
85 return False
86
75 class SimpleGit(object):
87 class SimpleGit(object):
76
88
77 def __init__(self, application, config):
89 def __init__(self, application, config):
@@ -24,14 +24,13 b' Created on 2010-04-28'
24 SimpleHG middleware for handling mercurial protocol request (push/clone etc.)
24 SimpleHG middleware for handling mercurial protocol request (push/clone etc.)
25 It's implemented with basic auth function
25 It's implemented with basic auth function
26 """
26 """
27 from itertools import chain
28 from mercurial.error import RepoError
27 from mercurial.error import RepoError
29 from mercurial.hgweb import hgweb
28 from mercurial.hgweb import hgweb
30 from mercurial.hgweb.request import wsgiapplication
29 from mercurial.hgweb.request import wsgiapplication
31 from paste.auth.basic import AuthBasicAuthenticator
30 from paste.auth.basic import AuthBasicAuthenticator
32 from paste.httpheaders import REMOTE_USER, AUTH_TYPE
31 from paste.httpheaders import REMOTE_USER, AUTH_TYPE
33 from rhodecode.lib.auth import authfunc, HasPermissionAnyMiddleware
32 from rhodecode.lib.auth import authfunc, HasPermissionAnyMiddleware
34 from rhodecode.lib.utils import is_mercurial, make_ui, invalidate_cache, \
33 from rhodecode.lib.utils import make_ui, invalidate_cache, \
35 check_repo_fast, ui_sections
34 check_repo_fast, ui_sections
36 from rhodecode.model.user import UserModel
35 from rhodecode.model.user import UserModel
37 from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError
36 from webob.exc import HTTPNotFound, HTTPForbidden, HTTPInternalServerError
@@ -41,6 +40,16 b' import traceback'
41
40
42 log = logging.getLogger(__name__)
41 log = logging.getLogger(__name__)
43
42
43 def is_mercurial(environ):
44 """
45 Returns True if request's target is mercurial server - header
46 ``HTTP_ACCEPT`` of such request would start with ``application/mercurial``.
47 """
48 http_accept = environ.get('HTTP_ACCEPT')
49 if http_accept and http_accept.startswith('application/mercurial'):
50 return True
51 return False
52
44 class SimpleHg(object):
53 class SimpleHg(object):
45
54
46 def __init__(self, application, config):
55 def __init__(self, application, config):
@@ -143,7 +152,7 b' class SimpleHg(object):'
143 #invalidate cache on push
152 #invalidate cache on push
144 if self.action == 'push':
153 if self.action == 'push':
145 self.__invalidate_cache(repo_name)
154 self.__invalidate_cache(repo_name)
146
155
147 return app(environ, start_response)
156 return app(environ, start_response)
148
157
149
158
@@ -27,10 +27,10 b' from mercurial import ui, config, hg'
27 from mercurial.error import RepoError
27 from mercurial.error import RepoError
28 from rhodecode.model import meta
28 from rhodecode.model import meta
29 from rhodecode.model.caching_query import FromCache
29 from rhodecode.model.caching_query import FromCache
30 from rhodecode.model.db import Repository, User, RhodeCodeUi, RhodeCodeSettings, \
30 from rhodecode.model.db import Repository, User, RhodeCodeUi, UserLog
31 UserLog
32 from rhodecode.model.repo import RepoModel
31 from rhodecode.model.repo import RepoModel
33 from rhodecode.model.user import UserModel
32 from rhodecode.model.user import UserModel
33
34 from vcs.backends.base import BaseChangeset
34 from vcs.backends.base import BaseChangeset
35 from paste.script import command
35 from paste.script import command
36 import ConfigParser
36 import ConfigParser
@@ -46,28 +46,6 b' log = logging.getLogger(__name__)'
46 def get_repo_slug(request):
46 def get_repo_slug(request):
47 return request.environ['pylons.routes_dict'].get('repo_name')
47 return request.environ['pylons.routes_dict'].get('repo_name')
48
48
49 def is_mercurial(environ):
50 """
51 Returns True if request's target is mercurial server - header
52 ``HTTP_ACCEPT`` of such request would start with ``application/mercurial``.
53 """
54 http_accept = environ.get('HTTP_ACCEPT')
55 if http_accept and http_accept.startswith('application/mercurial'):
56 return True
57 return False
58
59 def is_git(environ):
60 """
61 Returns True if request's target is git server. ``HTTP_USER_AGENT`` would
62 then have git client version given.
63
64 :param environ:
65 """
66 http_user_agent = environ.get('HTTP_USER_AGENT')
67 if http_user_agent and http_user_agent.startswith('git'):
68 return True
69 return False
70
71 def action_logger(user, action, repo, ipaddr='', sa=None):
49 def action_logger(user, action, repo, ipaddr='', sa=None):
72 """
50 """
73 Action logger for various actions made by users
51 Action logger for various actions made by users
@@ -110,17 +88,16 b' def action_logger(user, action, repo, ip'
110 user_log = UserLog()
88 user_log = UserLog()
111 user_log.user_id = user_obj.user_id
89 user_log.user_id = user_obj.user_id
112 user_log.action = action
90 user_log.action = action
113
91
114 user_log.repository_id = repo_obj.repo_id
92 user_log.repository_id = repo_obj.repo_id
115 user_log.repository_name = repo_name
93 user_log.repository_name = repo_name
116
94
117 user_log.action_date = datetime.datetime.now()
95 user_log.action_date = datetime.datetime.now()
118 user_log.user_ip = ipaddr
96 user_log.user_ip = ipaddr
119 sa.add(user_log)
97 sa.add(user_log)
120 sa.commit()
98 sa.commit()
121
99
122 log.info('Adding user %s, action %s on %s',
100 log.info('Adding user %s, action %s on %s', user_obj, action, repo)
123 user_obj.username, action, repo)
124 except:
101 except:
125 log.error(traceback.format_exc())
102 log.error(traceback.format_exc())
126 sa.rollback()
103 sa.rollback()
@@ -150,10 +127,6 b' def get_repos(path, recursive=False, ini'
150 except VCSError:
127 except VCSError:
151 pass
128 pass
152
129
153 if __name__ == '__main__':
154 get_repos('', '/home/marcink/workspace-python')
155
156
157 def check_repo_fast(repo_name, base_path):
130 def check_repo_fast(repo_name, base_path):
158 if os.path.isdir(os.path.join(base_path, repo_name)):return False
131 if os.path.isdir(os.path.join(base_path, repo_name)):return False
159 return True
132 return True
@@ -185,66 +158,6 b' def ask_ok(prompt, retries=4, complaint='
185 if retries < 0: raise IOError
158 if retries < 0: raise IOError
186 print complaint
159 print complaint
187
160
188 def get_hg_ui_cached():
189 try:
190 sa = meta.Session
191 ret = sa.query(RhodeCodeUi)\
192 .options(FromCache("sql_cache_short", "get_hg_ui_settings"))\
193 .all()
194 except:
195 pass
196 finally:
197 meta.Session.remove()
198 return ret
199
200
201 def get_hg_settings():
202 try:
203 sa = meta.Session()
204 ret = sa.query(RhodeCodeSettings)\
205 .options(FromCache("sql_cache_short", "get_hg_settings"))\
206 .all()
207 except:
208 pass
209 finally:
210 meta.Session.remove()
211
212 if not ret:
213 raise Exception('Could not get application settings !')
214 settings = {}
215 for each in ret:
216 settings['rhodecode_' + each.app_settings_name] = each.app_settings_value
217
218 return settings
219
220 def get_hg_ui_settings():
221 try:
222 sa = meta.Session()
223 ret = sa.query(RhodeCodeUi).all()
224 except:
225 pass
226 finally:
227 meta.Session.remove()
228
229 if not ret:
230 raise Exception('Could not get application ui settings !')
231 settings = {}
232 for each in ret:
233 k = each.ui_key
234 v = each.ui_value
235 if k == '/':
236 k = 'root_path'
237
238 if k.find('.') != -1:
239 k = k.replace('.', '_')
240
241 if each.ui_section == 'hooks':
242 v = each.ui_active
243
244 settings[each.ui_section + '_' + k] = v
245
246 return settings
247
248 #propagated from mercurial documentation
161 #propagated from mercurial documentation
249 ui_sections = ['alias', 'auth',
162 ui_sections = ['alias', 'auth',
250 'decode/encode', 'defaults',
163 'decode/encode', 'defaults',
@@ -288,7 +201,12 b" def make_ui(read_from='file', path=None,"
288
201
289
202
290 elif read_from == 'db':
203 elif read_from == 'db':
291 hg_ui = get_hg_ui_cached()
204 sa = meta.Session()
205 ret = sa.query(RhodeCodeUi)\
206 .options(FromCache("sql_cache_short",
207 "get_hg_ui_settings")).all()
208 meta.Session.remove()
209 hg_ui = ret
292 for ui_ in hg_ui:
210 for ui_ in hg_ui:
293 if ui_.ui_active:
211 if ui_.ui_active:
294 log.debug('settings ui from db[%s]%s:%s', ui_.ui_section, ui_.ui_key, ui_.ui_value)
212 log.debug('settings ui from db[%s]%s:%s', ui_.ui_section, ui_.ui_key, ui_.ui_value)
@@ -297,7 +215,12 b" def make_ui(read_from='file', path=None,"
297
215
298
216
299 def set_rhodecode_config(config):
217 def set_rhodecode_config(config):
300 hgsettings = get_hg_settings()
218 """
219 Updates pylons config with new settings from database
220 :param config:
221 """
222 from rhodecode.model.settings import SettingsModel
223 hgsettings = SettingsModel().get_app_settings()
301
224
302 for k, v in hgsettings.items():
225 for k, v in hgsettings.items():
303 config[k] = v
226 config[k] = v
@@ -28,7 +28,6 b' from rhodecode.model import BaseModel'
28 from rhodecode.model.caching_query import FromCache
28 from rhodecode.model.caching_query import FromCache
29 from rhodecode.model.db import RhodeCodeSettings
29 from rhodecode.model.db import RhodeCodeSettings
30 from sqlalchemy.orm import joinedload
30 from sqlalchemy.orm import joinedload
31 from sqlalchemy.orm.session import make_transient
32 import logging
31 import logging
33
32
34 log = logging.getLogger(__name__)
33 log = logging.getLogger(__name__)
@@ -46,6 +45,18 b' class SettingsModel(BaseModel):'
46 "get_setting_%s" % settings_key))
45 "get_setting_%s" % settings_key))
47 return r
46 return r
48
47
48 def get_app_settings(self):
49 ret = self.sa.query(RhodeCodeSettings)\
50 .options(FromCache("sql_cache_short",
51 "get_hg_settings")).all()
52
53 if not ret:
54 raise Exception('Could not get application settings !')
55 settings = {}
56 for each in ret:
57 settings['rhodecode_' + each.app_settings_name] = each.app_settings_value
58
59 return settings
49
60
50 def get_ldap_settings(self):
61 def get_ldap_settings(self):
51 """
62 """
General Comments 0
You need to be logged in to leave comments. Login now