##// END OF EJS Templates
fixed typo
fixed typo

File last commit:

r1673:333b3e7c beta
r1692:b76bb93d beta
Show More
settings.py
407 lines | 15.4 KiB | text/x-python | PythonLexer
Added isanonymous decorator for checking permissions for anonymous access
r779 # -*- coding: utf-8 -*-
"""
fixed spelling mistakes, and some minor docs bugs
r860 rhodecode.controllers.admin.settings
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
source code cleanup: remove trailing white space, normalize file endings
r1203
Added isanonymous decorator for checking permissions for anonymous access
r779 settings controller for rhodecode admin
source code cleanup: remove trailing white space, normalize file endings
r1203
Added isanonymous decorator for checking permissions for anonymous access
r779 :created_on: Jul 14, 2010
:author: marcink
source code cleanup: remove trailing white space, normalize file endings
r1203 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
Added isanonymous decorator for checking permissions for anonymous access
r779 :license: GPLv3, see COPYING for more details.
"""
fixed license issue #149
r1206 # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
source code cleanup: remove trailing white space, normalize file endings
r1203 #
renamed project to rhodecode
r547 # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
source code cleanup: remove trailing white space, normalize file endings
r1203 #
renamed project to rhodecode
r547 # You should have received a copy of the GNU General Public License
fixed license issue #149
r1206 # along with this program. If not, see <http://www.gnu.org/licenses/>.
Added isanonymous decorator for checking permissions for anonymous access
r779
implemented #89 google analytics code
r890 import logging
import traceback
import formencode
Code refactor number 2
r1022 from sqlalchemy import func
renamed project to rhodecode
r547 from formencode import htmlfill
Major refactoring, removed when possible calls to app globals....
r1036 from pylons import request, session, tmpl_context as c, url, config
renamed project to rhodecode
r547 from pylons.controllers.util import abort, redirect
from pylons.i18n.translation import _
implemented #89 google analytics code
r890
renamed project to rhodecode
r547 from rhodecode.lib import helpers as h
from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator, \
Added isanonymous decorator for checking permissions for anonymous access
r779 HasPermissionAnyDecorator, NotAnonymous
renamed project to rhodecode
r547 from rhodecode.lib.base import BaseController, render
implements #60, ldap configuration and authentication....
r705 from rhodecode.lib.celerylib import tasks, run_task
renamed project to rhodecode
r547 from rhodecode.lib.utils import repo2db_mapper, invalidate_cache, \
fixed missing repo_name_slug
r1027 set_rhodecode_config, repo_name_slug
refactoring of models names for repoGroup permissions
r1633 from rhodecode.model.db import RhodeCodeUi, Repository, RepoGroup, \
RhodeCodeSetting
renamed project to rhodecode
r547 from rhodecode.model.forms import UserForm, ApplicationSettingsForm, \
ApplicationUiSettingsForm
Refactor codes for scm model...
r691 from rhodecode.model.scm import ScmModel
Code refactoring,models renames...
r629 from rhodecode.model.user import UserModel
Deprecated UserModel removals...
r1501 from rhodecode.model.db import User
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 log = logging.getLogger(__name__)
class SettingsController(BaseController):
"""REST Controller styled on the Atom Publishing Protocol"""
# To properly map this controller, ensure your config/routing.py
# file has a resource setup:
source code cleanup: remove trailing white space, normalize file endings
r1203 # map.resource('setting', 'settings', controller='admin/settings',
renamed project to rhodecode
r547 # path_prefix='/admin', name_prefix='admin_')
@LoginRequired()
def __before__(self):
c.admin_user = session.get('admin_user')
c.admin_username = session.get('admin_username')
super(SettingsController, self).__before__()
Code refactoring,models renames...
r629
@HasPermissionAllDecorator('hg.admin')
renamed project to rhodecode
r547 def index(self, format='html'):
"""GET /admin/settings: All items in the collection"""
# url('admin_settings')
refactoring of models names for repoGroup permissions
r1633 defaults = RhodeCodeSetting.get_app_settings()
project refactoring, cleaned up lib.utils from rarly used functions, and place them...
r756 defaults.update(self.get_hg_ui_settings())
renamed project to rhodecode
r547 return htmlfill.render(
render('admin/settings/settings.html'),
defaults=defaults,
encoding="UTF-8",
force_defaults=False
Code refactoring,models renames...
r629 )
renamed project to rhodecode
r547 @HasPermissionAllDecorator('hg.admin')
def create(self):
"""POST /admin/settings: Create a new item"""
# url('admin_settings')
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 @HasPermissionAllDecorator('hg.admin')
def new(self, format='html'):
"""GET /admin/settings/new: Form to create a new item"""
# url('admin_new_setting')
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 @HasPermissionAllDecorator('hg.admin')
def update(self, setting_id):
"""PUT /admin/settings/setting_id: Update an existing item"""
# Forms posted to this method should contain a hidden field:
# <input type="hidden" name="_method" value="PUT" />
# Or using helpers:
# h.form(url('admin_setting', setting_id=ID),
# method='put')
# url('admin_setting', setting_id=ID)
if setting_id == 'mapping':
rm_obsolete = request.POST.get('destroy', False)
log.debug('Rescanning directories with destroy=%s', rm_obsolete)
Major refactoring, removed when possible calls to app globals....
r1036 initial = ScmModel().repo_scan()
extended admin rescan to show what repositories was added and what removed...
r1039 log.debug('invalidating all repositories')
Moved out reposcan into hg Model....
r665 for repo_name in initial.keys():
invalidate_cache('get_repo_cached_%s' % repo_name)
extended admin rescan to show what repositories was added and what removed...
r1039 added, removed = repo2db_mapper(initial, rm_obsolete)
Moved out reposcan into hg Model....
r665
extended admin rescan to show what repositories was added and what removed...
r1039 h.flash(_('Repositories successfully'
PEP8ify - controllers
r1245 ' rescanned added: %s,removed: %s') % (added, removed),
category='success')
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 if setting_id == 'whoosh':
project refactoring, cleaned up lib.utils from rarly used functions, and place them...
r756 repo_location = self.get_hg_ui_settings()['paths_root_path']
renamed project to rhodecode
r547 full_index = request.POST.get('full_index', False)
pep8
r1164 run_task(tasks.whoosh_index, repo_location, full_index)
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 h.flash(_('Whoosh reindex task scheduled'), category='success')
if setting_id == 'global':
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 application_form = ApplicationSettingsForm()()
try:
form_result = application_form.to_python(dict(request.POST))
implemented #89 google analytics code
r890
renamed project to rhodecode
r547 try:
refactoring of models names for repoGroup permissions
r1633 hgsettings1 = RhodeCodeSetting.get_by_name('title')
PEP8ify - controllers
r1245 hgsettings1.app_settings_value = \
form_result['rhodecode_title']
Code refactoring,models renames...
r629
refactoring of models names for repoGroup permissions
r1633 hgsettings2 = RhodeCodeSetting.get_by_name('realm')
PEP8ify - controllers
r1245 hgsettings2.app_settings_value = \
form_result['rhodecode_realm']
Code refactoring,models renames...
r629
refactoring of models names for repoGroup permissions
r1633 hgsettings3 = RhodeCodeSetting.get_by_name('ga_code')
PEP8ify - controllers
r1245 hgsettings3.app_settings_value = \
form_result['rhodecode_ga_code']
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 self.sa.add(hgsettings1)
self.sa.add(hgsettings2)
implemented #89 google analytics code
r890 self.sa.add(hgsettings3)
renamed project to rhodecode
r547 self.sa.commit()
renamed hg_app to rhodecode
r548 set_rhodecode_config(config)
renamed project to rhodecode
r547 h.flash(_('Updated application settings'),
category='success')
Code refactoring,models renames...
r629
pep8
r1164 except Exception:
renamed project to rhodecode
r547 log.error(traceback.format_exc())
PEP8ify - controllers
r1245 h.flash(_('error occurred during updating '
'application settings'),
renamed project to rhodecode
r547 category='error')
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 self.sa.rollback()
Code refactoring,models renames...
r629
refactor codes and setup for python 2.5...
r564 except formencode.Invalid, errors:
renamed project to rhodecode
r547 return htmlfill.render(
render('admin/settings/settings.html'),
defaults=errors.value,
errors=errors.error_dict or {},
prefix_error=False,
Code refactoring,models renames...
r629 encoding="UTF-8")
renamed project to rhodecode
r547 if setting_id == 'mercurial':
application_form = ApplicationUiSettingsForm()()
try:
form_result = application_form.to_python(dict(request.POST))
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 try:
Code refactoring,models renames...
r629
more renames for rhode code !!
r549 hgsettings1 = self.sa.query(RhodeCodeUi)\
.filter(RhodeCodeUi.ui_key == 'push_ssl').one()
renamed project to rhodecode
r547 hgsettings1.ui_value = form_result['web_push_ssl']
Code refactoring,models renames...
r629
more renames for rhode code !!
r549 hgsettings2 = self.sa.query(RhodeCodeUi)\
.filter(RhodeCodeUi.ui_key == '/').one()
Code refactoring,models renames...
r629 hgsettings2.ui_value = form_result['paths_root_path']
renamed project to rhodecode
r547 #HOOKS
more renames for rhode code !!
r549 hgsettings3 = self.sa.query(RhodeCodeUi)\
.filter(RhodeCodeUi.ui_key == 'changegroup.update').one()
PEP8ify - controllers
r1245 hgsettings3.ui_active = \
bool(form_result['hooks_changegroup_update'])
Code refactoring,models renames...
r629
more renames for rhode code !!
r549 hgsettings4 = self.sa.query(RhodeCodeUi)\
PEP8ify - controllers
r1245 .filter(RhodeCodeUi.ui_key ==
'changegroup.repo_size').one()
hgsettings4.ui_active = \
bool(form_result['hooks_changegroup_repo_size'])
Code refactoring,models renames...
r629
added option to enable/disable of logger hooks from admin panel....
r661 hgsettings5 = self.sa.query(RhodeCodeUi)\
PEP8ify - controllers
r1245 .filter(RhodeCodeUi.ui_key ==
'pretxnchangegroup.push_logger').one()
hgsettings5.ui_active = \
bool(form_result['hooks_pretxnchangegroup'
'_push_logger'])
Code refactoring,models renames...
r629
added option to enable/disable of logger hooks from admin panel....
r661 hgsettings6 = self.sa.query(RhodeCodeUi)\
PEP8ify - controllers
r1245 .filter(RhodeCodeUi.ui_key ==
'preoutgoing.pull_logger').one()
hgsettings6.ui_active = \
bool(form_result['hooks_preoutgoing_pull_logger'])
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 self.sa.add(hgsettings1)
self.sa.add(hgsettings2)
self.sa.add(hgsettings3)
self.sa.add(hgsettings4)
added option to enable/disable of logger hooks from admin panel....
r661 self.sa.add(hgsettings5)
self.sa.add(hgsettings6)
renamed project to rhodecode
r547 self.sa.commit()
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 h.flash(_('Updated mercurial settings'),
category='success')
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 except:
log.error(traceback.format_exc())
PEP8ify - controllers
r1245 h.flash(_('error occurred during updating '
'application settings'), category='error')
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 self.sa.rollback()
Code refactoring,models renames...
r629
refactor codes and setup for python 2.5...
r564 except formencode.Invalid, errors:
renamed project to rhodecode
r547 return htmlfill.render(
render('admin/settings/settings.html'),
defaults=errors.value,
errors=errors.error_dict or {},
prefix_error=False,
Code refactoring,models renames...
r629 encoding="UTF-8")
Added more advanced hook management into rhodecode admin settings
r1460
if setting_id == 'hooks':
ui_key = request.POST.get('new_hook_ui_key')
ui_value = request.POST.get('new_hook_ui_value')
try:
Added email sending test site
r1673
Added more advanced hook management into rhodecode admin settings
r1460 if ui_value and ui_key:
RhodeCodeUi.create_or_update_hook(ui_key, ui_value)
h.flash(_('Added new hook'),
category='success')
# check for edits
update = False
_d = request.POST.dict_of_lists()
Added email sending test site
r1673 for k, v in zip(_d.get('hook_ui_key', []), _d.get('hook_ui_value_new', [])):
Added more advanced hook management into rhodecode admin settings
r1460 RhodeCodeUi.create_or_update_hook(k, v)
update = True
if update:
h.flash(_('Updated hooks'), category='success')
except:
log.error(traceback.format_exc())
h.flash(_('error occurred during hook creation'),
category='error')
return redirect(url('admin_edit_setting', setting_id='hooks'))
Added email sending test site
r1673
if setting_id == 'email':
test_email = request.POST.get('test_email')
test_email_subj = 'RhodeCode TestEmail'
test_email_body = 'RhodeCode Email test'
run_task(tasks.send_email, [test_email], test_email_subj,
test_email_body)
h.flash(_('Email task created'), category='success')
renamed project to rhodecode
r547 return redirect(url('admin_settings'))
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 @HasPermissionAllDecorator('hg.admin')
def delete(self, setting_id):
"""DELETE /admin/settings/setting_id: Delete an existing item"""
# Forms posted to this method should contain a hidden field:
# <input type="hidden" name="_method" value="DELETE" />
# Or using helpers:
# h.form(url('admin_setting', setting_id=ID),
# method='delete')
# url('admin_setting', setting_id=ID)
Added more advanced hook management into rhodecode admin settings
r1460 if setting_id == 'hooks':
hook_id = request.POST.get('hook_id')
RhodeCodeUi.delete(hook_id)
Added email sending test site
r1673
renamed project to rhodecode
r547 @HasPermissionAllDecorator('hg.admin')
def show(self, setting_id, format='html'):
PEP8ify - controllers
r1245 """
GET /admin/settings/setting_id: Show a specific item"""
renamed project to rhodecode
r547 # url('admin_setting', setting_id=ID)
Code refactoring,models renames...
r629
@HasPermissionAllDecorator('hg.admin')
renamed project to rhodecode
r547 def edit(self, setting_id, format='html'):
PEP8ify - controllers
r1245 """
GET /admin/settings/setting_id/edit: Form to
edit an existing item"""
renamed project to rhodecode
r547 # url('admin_edit_setting', setting_id=ID)
Added more advanced hook management into rhodecode admin settings
r1460 c.hooks = RhodeCodeUi.get_builtin_hooks()
c.custom_hooks = RhodeCodeUi.get_custom_hooks()
return htmlfill.render(
render('admin/settings/hooks.html'),
defaults={},
encoding="UTF-8",
force_defaults=False
)
Added isanonymous decorator for checking permissions for anonymous access
r779 @NotAnonymous()
renamed project to rhodecode
r547 def my_account(self):
"""
source code cleanup: remove trailing white space, normalize file endings
r1203 GET /_admin/my_account Displays info about my account
renamed project to rhodecode
r547 """
Added isanonymous decorator for checking permissions for anonymous access
r779 # url('admin_settings_my_account')
Moved out reposcan into hg Model....
r665
Deprecated UserModel removals...
r1501 c.user = User.get(self.rhodecode_user.user_id)
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached...
r1366 all_repos = self.sa.query(Repository)\
another major codes rewrite:...
r1045 .filter(Repository.user_id == c.user.user_id)\
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached...
r1366 .order_by(func.lower(Repository.repo_name)).all()
Refactor codes for scm model...
r691 c.user_repos = ScmModel().get_repos(all_repos)
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 if c.user.username == 'default':
Code refactoring,models renames...
r629 h.flash(_("You can't edit this user since it's"
renamed project to rhodecode
r547 " crucial for entire application"), category='warning')
return redirect(url('users'))
Code refactoring,models renames...
r629
new improved models with helper functions for easier data fetching
r832 defaults = c.user.get_dict()
renamed project to rhodecode
r547 return htmlfill.render(
render('admin/users/user_edit_my_account.html'),
defaults=defaults,
encoding="UTF-8",
force_defaults=False
Code refactoring,models renames...
r629 )
renamed project to rhodecode
r547
def my_account_update(self):
"""PUT /_admin/my_account_update: Update an existing item"""
# Forms posted to this method should contain a hidden field:
# <input type="hidden" name="_method" value="PUT" />
# Or using helpers:
# h.form(url('admin_settings_my_account_update'),
# method='put')
# url('admin_settings_my_account_update', id=ID)
user_model = UserModel()
replaced all global calls to template context (rhodecode_user), into instance attributes
r1121 uid = self.rhodecode_user.user_id
PEP8ify - controllers
r1245 _form = UserForm(edit=True,
old_data={'user_id': uid,
'email': self.rhodecode_user.email})()
renamed project to rhodecode
r547 form_result = {}
try:
form_result = _form.to_python(dict(request.POST))
user_model.update_my_account(uid, form_result)
Added isanonymous decorator for checking permissions for anonymous access
r779 h.flash(_('Your account was updated successfully'),
renamed project to rhodecode
r547 category='success')
Code refactoring,models renames...
r629
refactor codes and setup for python 2.5...
r564 except formencode.Invalid, errors:
Deprecated UserModel removals...
r1501 c.user = User.get(self.rhodecode_user.user_id)
fixed admin settings form resubmition bug....
r687 all_repos = self.sa.query(Repository)\
.filter(Repository.user_id == c.user.user_id)\
.order_by(func.lower(Repository.repo_name))\
.all()
Refactor codes for scm model...
r691 c.user_repos = ScmModel().get_repos(all_repos)
fixed admin settings form resubmition bug....
r687
renamed project to rhodecode
r547 return htmlfill.render(
render('admin/users/user_edit_my_account.html'),
defaults=errors.value,
errors=errors.error_dict or {},
prefix_error=False,
encoding="UTF-8")
except Exception:
log.error(traceback.format_exc())
Added isanonymous decorator for checking permissions for anonymous access
r779 h.flash(_('error occurred during update of user %s') \
renamed project to rhodecode
r547 % form_result.get('username'), category='error')
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 return redirect(url('my_account'))
Code refactoring,models renames...
r629
Added isanonymous decorator for checking permissions for anonymous access
r779 @NotAnonymous()
renamed project to rhodecode
r547 @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository')
def create_repository(self):
"""GET /_admin/create_repository: Form to create a new item"""
added proper groups names in add repo from settings
r1161
refactoring of models names for repoGroup permissions
r1633 c.repo_groups = RepoGroup.groups_choices()
added proper groups names in add repo from settings
r1161 c.repo_groups_choices = map(lambda k: unicode(k[0]), c.repo_groups)
renamed project to rhodecode
r547 new_repo = request.GET.get('repo', '')
Code refactor number 2
r1022 c.new_repo = repo_name_slug(new_repo)
added proper groups names in add repo from settings
r1161
renamed project to rhodecode
r547 return render('admin/repos/repo_add_create_repository.html')
Code refactoring,models renames...
r629
project refactoring, cleaned up lib.utils from rarly used functions, and place them...
r756 def get_hg_ui_settings(self):
ret = self.sa.query(RhodeCodeUi).all()
if not ret:
raise Exception('Could not get application ui settings !')
settings = {}
for each in ret:
k = each.ui_key
v = each.ui_value
if k == '/':
k = 'root_path'
if k.find('.') != -1:
k = k.replace('.', '_')
if each.ui_section == 'hooks':
v = each.ui_active
settings[each.ui_section + '_' + k] = v
return settings