##// END OF EJS Templates
added mimetypes to annotate
added mimetypes to annotate

File last commit:

r489:460ad816 celery
r496:47f4c7ff celery
Show More
settings.py
298 lines | 12.3 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
fixed bug when new repo had no last commiter,...
r489 from pylons_app.lib.celerylib import tasks, run_task
added settings rest controllers for admin, updated routes with easier submodule handling
r346 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
starting celery branch
r467 if setting_id == 'whoosh':
repo_location = get_hg_ui_settings()['paths_root_path']
fixed bug when new repo had no last commiter,...
r489 full_index = request.POST.get('full_index', False)
task = run_task(tasks.whoosh_index, repo_location, full_index)
starting celery branch
r467
h.flash(_('Whoosh reindex task scheduled'), category='success')
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']
Added hooks managment into application settings
r395
#HOOKS
hgsettings3 = self.sa.query(HgAppUi)\
.filter(HgAppUi.ui_key == 'changegroup.update').one()
hgsettings3.ui_active = bool(form_result['hooks_changegroup_update'])
hgsettings4 = self.sa.query(HgAppUi)\
.filter(HgAppUi.ui_key == 'changegroup.repo_size').one()
hgsettings4.ui_active = bool(form_result['hooks_changegroup_repo_size'])
Added new application settings,Push ssl and repositories path
r388 self.sa.add(hgsettings1)
self.sa.add(hgsettings2)
Added hooks managment into application settings
r395 self.sa.add(hgsettings3)
self.sa.add(hgsettings4)
Added new application settings,Push ssl and repositories path
r388 self.sa.commit()
little css update, and flash messages
r396 h.flash(_('Updated mercurial settings'),
Added new application settings,Push ssl and repositories path
r388 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)
started my page rewrite
r446 c.user_repos = []
for repo in c.cached_repo_list.values():
if repo.dbrepo.user.username == c.user.username:
c.user_repos.append(repo)
routes python 2.5 compatible...
r371 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
fixed bug when new repo had no last commiter,...
r489 _form = UserForm(edit=True, old_data={'user_id':uid,
'email':c.hg_app_user.email})()
routes python 2.5 compatible...
r371 form_result = {}
try:
form_result = _form.to_python(dict(request.POST))
user_model.update_my_account(uid, form_result)
little css update, and flash messages
r396 h.flash(_('Your account was updated succesfully'),
category='success')
routes python 2.5 compatible...
r371
except formencode.Invalid as errors:
fixed bug when new repo had no last commiter,...
r489 c.user = self.sa.query(User).get(c.hg_app_user.user_id)
c.user_repos = []
for repo in c.cached_repo_list.values():
if repo.dbrepo.user.username == c.user.username:
c.user_repos.append(repo)
routes python 2.5 compatible...
r371 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'))
permission refactoring,...
r417 @HasPermissionAnyDecorator('hg.admin', 'hg.create.repository')
Added separate create repository views for non administrative users....
r380 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')