comparison rhodecode/controllers/admin/settings.py @ 3960:5293d4bbb1ea

Merged dev into stable/default/master branch
author Marcin Kuzminski <marcin@python-works.com>
date Fri, 07 Jun 2013 00:31:11 +0200
parents 3563bb7b4b82 fc63a1d93803
children 9b4ba12ef8c3
comparison
equal deleted inserted replaced
3879:51596d9ef2f8 3960:5293d4bbb1ea
39 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \ 39 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \
40 HasPermissionAnyDecorator, NotAnonymous, HasPermissionAny,\ 40 HasPermissionAnyDecorator, NotAnonymous, HasPermissionAny,\
41 HasReposGroupPermissionAll, HasReposGroupPermissionAny, AuthUser 41 HasReposGroupPermissionAll, HasReposGroupPermissionAny, AuthUser
42 from rhodecode.lib.base import BaseController, render 42 from rhodecode.lib.base import BaseController, render
43 from rhodecode.lib.celerylib import tasks, run_task 43 from rhodecode.lib.celerylib import tasks, run_task
44 from rhodecode.lib.utils import repo2db_mapper, invalidate_cache, \ 44 from rhodecode.lib.utils import repo2db_mapper, set_rhodecode_config, \
45 set_rhodecode_config, repo_name_slug, check_git_version 45 check_git_version
46 from rhodecode.model.db import RhodeCodeUi, Repository, RepoGroup, \ 46 from rhodecode.model.db import RhodeCodeUi, Repository, RepoGroup, \
47 RhodeCodeSetting, PullRequest, PullRequestReviewers 47 RhodeCodeSetting, PullRequest, PullRequestReviewers
48 from rhodecode.model.forms import UserForm, ApplicationSettingsForm, \ 48 from rhodecode.model.forms import UserForm, ApplicationSettingsForm, \
49 ApplicationUiSettingsForm, ApplicationVisualisationForm 49 ApplicationUiSettingsForm, ApplicationVisualisationForm
50 from rhodecode.model.scm import ScmModel, GroupList 50 from rhodecode.model.scm import ScmModel, RepoGroupList
51 from rhodecode.model.user import UserModel 51 from rhodecode.model.user import UserModel
52 from rhodecode.model.repo import RepoModel 52 from rhodecode.model.repo import RepoModel
53 from rhodecode.model.db import User 53 from rhodecode.model.db import User
54 from rhodecode.model.notification import EmailNotificationModel 54 from rhodecode.model.notification import EmailNotificationModel
55 from rhodecode.model.meta import Session 55 from rhodecode.model.meta import Session
56 from rhodecode.lib.utils2 import str2bool, safe_unicode 56 from rhodecode.lib.utils2 import str2bool, safe_unicode
57 from rhodecode.lib.compat import json 57 from rhodecode.lib.compat import json
58 from webob.exc import HTTPForbidden
59 log = logging.getLogger(__name__) 58 log = logging.getLogger(__name__)
60 59
61 60
62 class SettingsController(BaseController): 61 class SettingsController(BaseController):
63 """REST Controller styled on the Atom Publishing Protocol""" 62 """REST Controller styled on the Atom Publishing Protocol"""
66 # map.resource('setting', 'settings', controller='admin/settings', 65 # map.resource('setting', 'settings', controller='admin/settings',
67 # path_prefix='/admin', name_prefix='admin_') 66 # path_prefix='/admin', name_prefix='admin_')
68 67
69 @LoginRequired() 68 @LoginRequired()
70 def __before__(self): 69 def __before__(self):
71 c.admin_user = session.get('admin_user') 70 super(SettingsController, self).__before__()
72 c.admin_username = session.get('admin_username')
73 c.modules = sorted([(p.project_name, p.version) 71 c.modules = sorted([(p.project_name, p.version)
74 for p in pkg_resources.working_set] 72 for p in pkg_resources.working_set]
75 + [('git', check_git_version())], 73 + [('git', check_git_version())],
76 key=lambda k: k[0].lower()) 74 key=lambda k: k[0].lower())
77 c.py_version = platform.python_version() 75 c.py_version = platform.python_version()
78 c.platform = platform.platform() 76 c.platform = platform.platform()
79 super(SettingsController, self).__before__()
80 77
81 @HasPermissionAllDecorator('hg.admin') 78 @HasPermissionAllDecorator('hg.admin')
82 def index(self, format='html'): 79 def index(self, format='html'):
83 """GET /admin/settings: All items in the collection""" 80 """GET /admin/settings: All items in the collection"""
84 # url('admin_settings') 81 # url('admin_settings')
113 # method='put') 110 # method='put')
114 # url('admin_setting', setting_id=ID) 111 # url('admin_setting', setting_id=ID)
115 112
116 if setting_id == 'mapping': 113 if setting_id == 'mapping':
117 rm_obsolete = request.POST.get('destroy', False) 114 rm_obsolete = request.POST.get('destroy', False)
118 log.debug('Rescanning directories with destroy=%s' % rm_obsolete) 115 invalidate_cache = request.POST.get('invalidate', False)
119 initial = ScmModel().repo_scan() 116 log.debug('rescanning repo location with destroy obsolete=%s'
120 log.debug('invalidating all repositories') 117 % (rm_obsolete,))
121 for repo_name in initial.keys(): 118
122 invalidate_cache('get_repo_cached_%s' % repo_name) 119 if invalidate_cache:
123 120 log.debug('invalidating all repositories cache')
124 added, removed = repo2db_mapper(initial, rm_obsolete) 121 for repo in Repository.get_all():
122 ScmModel().mark_for_invalidation(repo.repo_name)
123
124 filesystem_repos = ScmModel().repo_scan()
125 added, removed = repo2db_mapper(filesystem_repos, rm_obsolete)
125 _repr = lambda l: ', '.join(map(safe_unicode, l)) or '-' 126 _repr = lambda l: ', '.join(map(safe_unicode, l)) or '-'
126 h.flash(_('Repositories successfully ' 127 h.flash(_('Repositories successfully '
127 'rescanned added: %s ; removed: %s') % 128 'rescanned added: %s ; removed: %s') %
128 (_repr(added), _repr(removed)), 129 (_repr(added), _repr(removed)),
129 category='success') 130 category='success')
184 prefix_error=False, 185 prefix_error=False,
185 encoding="UTF-8" 186 encoding="UTF-8"
186 ) 187 )
187 188
188 try: 189 try:
190 #TODO: rewrite this to something less ugly
189 sett1 = RhodeCodeSetting.get_by_name_or_create('show_public_icon') 191 sett1 = RhodeCodeSetting.get_by_name_or_create('show_public_icon')
190 sett1.app_settings_value = \ 192 sett1.app_settings_value = \
191 form_result['rhodecode_show_public_icon'] 193 form_result['rhodecode_show_public_icon']
192 Session().add(sett1) 194 Session().add(sett1)
193 195
199 sett3 = RhodeCodeSetting.get_by_name_or_create('stylify_metatags') 201 sett3 = RhodeCodeSetting.get_by_name_or_create('stylify_metatags')
200 sett3.app_settings_value = \ 202 sett3.app_settings_value = \
201 form_result['rhodecode_stylify_metatags'] 203 form_result['rhodecode_stylify_metatags']
202 Session().add(sett3) 204 Session().add(sett3)
203 205
204 sett4 = RhodeCodeSetting.get_by_name_or_create('lightweight_dashboard')
205 sett4.app_settings_value = \
206 form_result['rhodecode_lightweight_dashboard']
207 Session().add(sett4)
208
209 sett4 = RhodeCodeSetting.get_by_name_or_create('repository_fields') 206 sett4 = RhodeCodeSetting.get_by_name_or_create('repository_fields')
210 sett4.app_settings_value = \ 207 sett4.app_settings_value = \
211 form_result['rhodecode_repository_fields'] 208 form_result['rhodecode_repository_fields']
212 Session().add(sett4) 209 Session().add(sett4)
210
211 sett5 = RhodeCodeSetting.get_by_name_or_create('dashboard_items')
212 sett5.app_settings_value = \
213 form_result['rhodecode_dashboard_items']
214 Session().add(sett5)
215
216 sett6 = RhodeCodeSetting.get_by_name_or_create('show_version')
217 sett6.app_settings_value = \
218 form_result['rhodecode_show_version']
219 Session().add(sett6)
213 220
214 Session().commit() 221 Session().commit()
215 set_rhodecode_config(config) 222 set_rhodecode_config(config)
216 h.flash(_('Updated visualisation settings'), 223 h.flash(_('Updated visualisation settings'),
217 category='success') 224 category='success')
237 244
238 try: 245 try:
239 sett = RhodeCodeUi.get_by_key('push_ssl') 246 sett = RhodeCodeUi.get_by_key('push_ssl')
240 sett.ui_value = form_result['web_push_ssl'] 247 sett.ui_value = form_result['web_push_ssl']
241 Session().add(sett) 248 Session().add(sett)
242 249 if c.visual.allow_repo_location_change:
243 sett = RhodeCodeUi.get_by_key('/') 250 sett = RhodeCodeUi.get_by_key('/')
244 sett.ui_value = form_result['paths_root_path'] 251 sett.ui_value = form_result['paths_root_path']
245 Session().add(sett) 252 Session().add(sett)
246 253
247 #HOOKS 254 #HOOKS
248 sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_UPDATE) 255 sett = RhodeCodeUi.get_by_key(RhodeCodeUi.HOOK_UPDATE)
249 sett.ui_active = form_result['hooks_changegroup_update'] 256 sett.ui_active = form_result['hooks_changegroup_update']
250 Session().add(sett) 257 Session().add(sett)