##// END OF EJS Templates
Added tag v0.8.1 for changeset a9814a642e11
Added tag v0.8.1 for changeset a9814a642e11

File last commit:

r388:3bcf9529 default
r394:42367607 default
Show More
settings.py
265 lines | 10.7 KiB | text/x-python | PythonLexer
added settings rest controllers for admin, updated routes with easier submodule handling
r346 #!/usr/bin/env python
# encoding: utf-8
# settings controller for pylons
# Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
new style error display for settings, added flash msg for repo rescan
r359 #
added settings rest controllers for admin, updated routes with easier submodule handling
r346 # 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.
"""
Created on July 14, 2010
settings controller for pylons
@author: marcink
"""
from formencode import htmlfill
Added application settings, are now customizable from database...
r350 from pylons import request, session, tmpl_context as c, url, app_globals as g, \
config
added settings rest controllers for admin, updated routes with easier submodule handling
r346 from pylons.controllers.util import abort, redirect
from pylons.i18n.translation import _
from pylons_app.lib import helpers as h
Added separate create repository views for non administrative users....
r380 from pylons_app.lib.auth import LoginRequired, HasPermissionAllDecorator, \
HasPermissionAnyDecorator
added settings rest controllers for admin, updated routes with easier submodule handling
r346 from pylons_app.lib.base import BaseController, render
Added application settings, are now customizable from database...
r350 from pylons_app.lib.utils import repo2db_mapper, invalidate_cache, \
Added new application settings,Push ssl and repositories path
r388 set_hg_app_config, get_hg_settings, get_hg_ui_settings, make_ui
from pylons_app.model.db import User, UserLog, HgAppSettings, HgAppUi
from pylons_app.model.forms import UserForm, ApplicationSettingsForm, \
ApplicationUiSettingsForm
implemented manual repo rescann and remapping
r348 from pylons_app.model.hg_model import HgModel
added settings rest controllers for admin, updated routes with easier submodule handling
r346 from pylons_app.model.user_model import UserModel
import formencode
import logging
Added application settings, are now customizable from database...
r350 import traceback
added settings rest controllers for admin, updated routes with easier submodule handling
r346 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__()
routes python 2.5 compatible...
r371
@HasPermissionAllDecorator('hg.admin')
added settings rest controllers for admin, updated routes with easier submodule handling
r346 def index(self, format='html'):
"""GET /admin/settings: All items in the collection"""
# url('admin_settings')
Added application settings, are now customizable from database...
r350
cleared global application settings....
r381 defaults = get_hg_settings()
Added new application settings,Push ssl and repositories path
r388 defaults.update(get_hg_ui_settings())
Added application settings, are now customizable from database...
r350 return htmlfill.render(
render('admin/settings/settings.html'),
defaults=defaults,
encoding="UTF-8",
force_defaults=False
)
added settings rest controllers for admin, updated routes with easier submodule handling
r346
routes python 2.5 compatible...
r371 @HasPermissionAllDecorator('hg.admin')
added settings rest controllers for admin, updated routes with easier submodule handling
r346 def create(self):
"""POST /admin/settings: Create a new item"""
# url('admin_settings')
routes python 2.5 compatible...
r371
@HasPermissionAllDecorator('hg.admin')
added settings rest controllers for admin, updated routes with easier submodule handling
r346 def new(self, format='html'):
"""GET /admin/settings/new: Form to create a new item"""
# url('admin_new_setting')
routes python 2.5 compatible...
r371
@HasPermissionAllDecorator('hg.admin')
def update(self, setting_id):
"""PUT /admin/settings/setting_id: Update an existing item"""
added settings rest controllers for admin, updated routes with easier submodule handling
r346 # Forms posted to this method should contain a hidden field:
# <input type="hidden" name="_method" value="PUT" />
# Or using helpers:
routes python 2.5 compatible...
r371 # h.form(url('admin_setting', setting_id=ID),
added settings rest controllers for admin, updated routes with easier submodule handling
r346 # method='put')
routes python 2.5 compatible...
r371 # url('admin_setting', setting_id=ID)
if setting_id == 'mapping':
implemented manual repo rescann and remapping
r348 rm_obsolete = request.POST.get('destroy', False)
log.debug('Rescanning directories with destroy=%s', rm_obsolete)
initial = HgModel.repo_scan(g.paths[0][0], g.paths[0][1], g.baseui)
repo2db_mapper(initial, rm_obsolete)
invalidate_cache('cached_repo_list')
new style error display for settings, added flash msg for repo rescan
r359 h.flash(_('Repositories sucessfully rescanned'), category='success')
Added application settings, are now customizable from database...
r350
routes python 2.5 compatible...
r371 if setting_id == 'global':
implemented manual repo rescann and remapping
r348
Added application settings, are now customizable from database...
r350 application_form = ApplicationSettingsForm()()
try:
form_result = application_form.to_python(dict(request.POST))
try:
Added new application settings,Push ssl and repositories path
r388 hgsettings1 = self.sa.query(HgAppSettings)\
.filter(HgAppSettings.app_settings_name == 'title').one()
cleared global application settings....
r381 hgsettings1.app_settings_value = form_result['hg_app_title']
Added application settings, are now customizable from database...
r350
Added new application settings,Push ssl and repositories path
r388 hgsettings2 = self.sa.query(HgAppSettings)\
.filter(HgAppSettings.app_settings_name == 'realm').one()
cleared global application settings....
r381 hgsettings2.app_settings_value = form_result['hg_app_realm']
self.sa.add(hgsettings1)
self.sa.add(hgsettings2)
Added application settings, are now customizable from database...
r350 self.sa.commit()
set_hg_app_config(config)
h.flash(_('Updated application settings'),
category='success')
except:
log.error(traceback.format_exc())
cleared global application settings....
r381 h.flash(_('error occured during updating application settings'),
Added application settings, are now customizable from database...
r350 category='error')
self.sa.rollback()
except formencode.Invalid as errors:
return htmlfill.render(
render('admin/settings/settings.html'),
new style error display for settings, added flash msg for repo rescan
r359 defaults=errors.value,
errors=errors.error_dict or {},
prefix_error=False,
encoding="UTF-8")
Added new application settings,Push ssl and repositories path
r388
if setting_id == 'mercurial':
application_form = ApplicationUiSettingsForm()()
try:
form_result = application_form.to_python(dict(request.POST))
try:
hgsettings1 = self.sa.query(HgAppUi)\
.filter(HgAppUi.ui_key == 'push_ssl').one()
hgsettings1.ui_value = form_result['web_push_ssl']
hgsettings2 = self.sa.query(HgAppUi)\
.filter(HgAppUi.ui_key == '/').one()
hgsettings2.ui_value = form_result['paths_root_path']
self.sa.add(hgsettings1)
self.sa.add(hgsettings2)
self.sa.commit()
h.flash(_('Updated application settings'),
category='success')
except:
log.error(traceback.format_exc())
h.flash(_('error occured during updating application settings'),
category='error')
self.sa.rollback()
except formencode.Invalid as errors:
return htmlfill.render(
render('admin/settings/settings.html'),
defaults=errors.value,
errors=errors.error_dict or {},
prefix_error=False,
encoding="UTF-8")
Added application settings, are now customizable from database...
r350
implemented manual repo rescann and remapping
r348 return redirect(url('admin_settings'))
routes python 2.5 compatible...
r371
@HasPermissionAllDecorator('hg.admin')
def delete(self, setting_id):
"""DELETE /admin/settings/setting_id: Delete an existing item"""
added settings rest controllers for admin, updated routes with easier submodule handling
r346 # Forms posted to this method should contain a hidden field:
# <input type="hidden" name="_method" value="DELETE" />
# Or using helpers:
routes python 2.5 compatible...
r371 # h.form(url('admin_setting', setting_id=ID),
added settings rest controllers for admin, updated routes with easier submodule handling
r346 # method='delete')
routes python 2.5 compatible...
r371 # url('admin_setting', setting_id=ID)
@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)
@HasPermissionAllDecorator('hg.admin')
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)
def my_account(self):
"""
GET /_admin/my_account Displays info about my account
"""
# url('admin_settings_my_account')
c.user = self.sa.query(User).get(c.hg_app_user.user_id)
if c.user.username == 'default':
h.flash(_("You can't edit this user since it's"
" crucial for entire application"), category='warning')
return redirect(url('users'))
defaults = c.user.__dict__
return htmlfill.render(
render('admin/users/user_edit_my_account.html'),
defaults=defaults,
encoding="UTF-8",
force_defaults=False
)
added settings rest controllers for admin, updated routes with easier submodule handling
r346
routes python 2.5 compatible...
r371 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()
uid = c.hg_app_user.user_id
_form = UserForm(edit=True, old_data={'user_id':uid})()
form_result = {}
try:
form_result = _form.to_python(dict(request.POST))
user_model.update_my_account(uid, form_result)
h.flash(_('Your account was updated succesfully'), category='success')
except formencode.Invalid as errors:
#c.user = self.sa.query(User).get(c.hg_app_user.user_id)
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())
h.flash(_('error occured during update of user %s') \
% form_result.get('username'), category='error')
return redirect(url('my_account'))
Added separate create repository views for non administrative users....
r380 @HasPermissionAnyDecorator('repository.create', 'hg.admin')
def create_repository(self):
"""GET /_admin/create_repository: Form to create a new item"""
new_repo = request.GET.get('repo', '')
c.new_repo = h.repo_name_slug(new_repo)
added settings rest controllers for admin, updated routes with easier submodule handling
r346
Added separate create repository views for non administrative users....
r380 return render('admin/repos/repo_add_create_repository.html')