##// END OF EJS Templates
use cs get history instead of node.history, node history have to much reference calls
use cs get history instead of node.history, node history have to much reference calls

File last commit:

r1164:4ceced79 beta
r1190:0d7a127e beta
Show More
settings.py
359 lines | 13.9 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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Added isanonymous decorator for checking permissions for anonymous access
r779 settings controller for rhodecode admin
:created_on: Jul 14, 2010
:author: marcink
fixed copyright year to 2011
r902 :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.
"""
renamed project to rhodecode
r547 # 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; version 2
# of the License or (at your opinion) any later version of the license.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
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
#109, added optional clone uri when creating repo....
r1112 from rhodecode.model.db import RhodeCodeUi, Repository, Group
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
implements #60, ldap configuration and authentication....
r705 from rhodecode.model.settings import SettingsModel
Code refactoring,models renames...
r629 from rhodecode.model.user import UserModel
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:
# map.resource('setting', 'settings', controller='admin/settings',
# 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')
project refactoring, cleaned up lib.utils from rarly used functions, and place them...
r756 defaults = SettingsModel().get_app_settings()
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'
' 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))
implements #60, ldap configuration and authentication....
r705 settings_model = SettingsModel()
implemented #89 google analytics code
r890
renamed project to rhodecode
r547 try:
implements #60, ldap configuration and authentication....
r705 hgsettings1 = settings_model.get('title')
Code refactoring,models renames...
r629 hgsettings1.app_settings_value = form_result['rhodecode_title']
bugfix for application name
r709 hgsettings2 = settings_model.get('realm')
Code refactoring,models renames...
r629 hgsettings2.app_settings_value = form_result['rhodecode_realm']
implemented #89 google analytics code
r890 hgsettings3 = settings_model.get('ga_code')
fixes for #89 ga code
r891 hgsettings3.app_settings_value = form_result['rhodecode_ga_code']
implemented #89 google analytics code
r890
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())
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
renamed project to rhodecode
r547
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()
Code refactoring,models renames...
r629 hgsettings3.ui_active = bool(form_result['hooks_changegroup_update'])
more renames for rhode code !!
r549 hgsettings4 = self.sa.query(RhodeCodeUi)\
.filter(RhodeCodeUi.ui_key == 'changegroup.repo_size').one()
Code refactoring,models renames...
r629 hgsettings4.ui_active = bool(form_result['hooks_changegroup_repo_size'])
added option to enable/disable of logger hooks from admin panel....
r661 hgsettings5 = self.sa.query(RhodeCodeUi)\
.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)\
.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())
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
renamed project to rhodecode
r547
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 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)
Code refactoring,models renames...
r629
renamed project to rhodecode
r547 @HasPermissionAllDecorator('hg.admin')
def show(self, setting_id, format='html'):
"""GET /admin/settings/setting_id: Show a specific item"""
# 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'):
"""GET /admin/settings/setting_id/edit: Form to edit an existing item"""
# url('admin_edit_setting', setting_id=ID)
Added isanonymous decorator for checking permissions for anonymous access
r779 @NotAnonymous()
renamed project to rhodecode
r547 def my_account(self):
"""
GET /_admin/my_account Displays info about my account
"""
Added isanonymous decorator for checking permissions for anonymous access
r779 # url('admin_settings_my_account')
Moved out reposcan into hg Model....
r665
replaced all global calls to template context (rhodecode_user), into instance attributes
r1121 c.user = UserModel().get(self.rhodecode_user.user_id, cache=False)
another major codes rewrite:...
r1045 all_repos = [r.repo_name for r in 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)
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
renamed project to rhodecode
r547 _form = UserForm(edit=True, old_data={'user_id':uid,
replaced all global calls to template context (rhodecode_user), into instance attributes
r1121 '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:
replaced all global calls to template context (rhodecode_user), into instance attributes
r1121 c.user = user_model.get(self.rhodecode_user.user_id, cache=False)
c.user = UserModel().get(self.rhodecode_user.user_id, cache=False)
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
c.repo_groups = [('', '')]
parents_link = lambda k:h.literal('&raquo;'.join(
map(lambda k:k.group_name,
k.parents + [k])
)
)
c.repo_groups.extend([(x.group_id, parents_link(x)) for \
x in self.sa.query(Group).all()])
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