##// END OF EJS Templates
added some failing tests for compare using cherry pick changesets, to be fixed later
added some failing tests for compare using cherry pick changesets, to be fixed later

File last commit:

r2987:4150c45b beta
r3331:0379e15f beta
Show More
users_groups.py
282 lines | 11.4 KiB | text/x-python | PythonLexer
started working on issue #56
r956 # -*- coding: utf-8 -*-
"""
rhodecode.controllers.admin.users_groups
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Users Groups crud controller for pylons
source code cleanup: remove trailing white space, normalize file endings
r1203
started working on issue #56
r956 :created_on: Jan 25, 2011
:author: marcink
2012 copyrights
r1824 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
started working on issue #56
r956 :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 #
started working on issue #56
r956 # 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 #
started working on issue #56
r956 # 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/>.
started working on issue #56
r956
import logging
import traceback
import formencode
from formencode import htmlfill
from pylons import request, session, tmpl_context as c, url, config
from pylons.controllers.util import abort, redirect
from pylons.i18n.translation import _
utils/conf...
r2109 from rhodecode.lib import helpers as h
fixes #228 - added detection of assigned groups to prevent errors on sqlite
r1435 from rhodecode.lib.exceptions import UsersGroupsAssignedException
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 from rhodecode.lib.utils2 import safe_unicode, str2bool
Major rewrite of auth objects. Moved parts of filling user data into user model....
r1117 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
started working on issue #56
r956 from rhodecode.lib.base import BaseController, render
commit less models...
r1749 from rhodecode.model.users_group import UsersGroupModel
Implemented #638 permissions overview to groups
r2987 from rhodecode.model.db import User, UsersGroup, UsersGroupToPerm,\
UsersGroupRepoToPerm, UsersGroupRepoGroupToPerm
commit less models...
r1749 from rhodecode.model.forms import UsersGroupForm
from rhodecode.model.meta import Session
Implemented #467 Journal logs comments on changesets...
r2375 from rhodecode.lib.utils import action_logger
Implemented #638 permissions overview to groups
r2987 from sqlalchemy.orm import joinedload
started working on issue #56
r956
log = logging.getLogger(__name__)
PEP8ify - controllers
r1245
started working on issue #56
r956 class UsersGroupsController(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('users_group', 'users_groups')
@LoginRequired()
@HasPermissionAllDecorator('hg.admin')
def __before__(self):
c.admin_user = session.get('admin_user')
c.admin_username = session.get('admin_username')
super(UsersGroupsController, self).__before__()
c.available_permissions = config['available_permissions']
def index(self, format='html'):
"""GET /users_groups: All items in the collection"""
# url('users_groups')
sqlalchemy sessions cleanup in admin...
r2662 c.users_groups_list = UsersGroup().query().all()
started working on issue #56
r956 return render('admin/users_groups/users_groups.html')
def create(self):
"""POST /users_groups: Create a new item"""
# url('users_groups')
removed users_group controller in replace for model methods,...
r1436
#56 fixed found bugs, implemented adding of new group + forms+validators...
r959 users_group_form = UsersGroupForm()()
try:
form_result = users_group_form.to_python(dict(request.POST))
commit less models...
r1749 UsersGroupModel().create(name=form_result['users_group_name'],
active=form_result['users_group_active'])
Implemented #467 Journal logs comments on changesets...
r2375 gr = form_result['users_group_name']
action_logger(self.rhodecode_user,
'admin_created_users_group:%s' % gr,
None, self.ip_addr, self.sa)
h.flash(_('created users group %s') % gr, category='success')
sqlalchemy sessions cleanup in admin...
r2662 Session().commit()
#56 fixed found bugs, implemented adding of new group + forms+validators...
r959 except formencode.Invalid, errors:
return htmlfill.render(
render('admin/users_groups/users_group_add.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 occurred during creation of users group %s') \
% request.POST.get('users_group_name'), category='error')
return redirect(url('users_groups'))
started working on issue #56
r956
def new(self, format='html'):
"""GET /users_groups/new: Form to create a new item"""
# url('new_users_group')
#56 fixed found bugs, implemented adding of new group + forms+validators...
r959 return render('admin/users_groups/users_group_add.html')
started working on issue #56
r956
Implemented #638 permissions overview to groups
r2987 def _load_data(self, id):
c.users_group.permissions = {
'repositories': {},
'repositories_groups': {}
}
ugroup_repo_perms = UsersGroupRepoToPerm.query()\
.options(joinedload(UsersGroupRepoToPerm.permission))\
.options(joinedload(UsersGroupRepoToPerm.repository))\
.filter(UsersGroupRepoToPerm.users_group_id == id)\
.all()
for gr in ugroup_repo_perms:
c.users_group.permissions['repositories'][gr.repository.repo_name] \
= gr.permission.permission_name
ugroup_group_perms = UsersGroupRepoGroupToPerm.query()\
.options(joinedload(UsersGroupRepoGroupToPerm.permission))\
.options(joinedload(UsersGroupRepoGroupToPerm.group))\
.filter(UsersGroupRepoGroupToPerm.users_group_id == id)\
.all()
for gr in ugroup_group_perms:
c.users_group.permissions['repositories_groups'][gr.group.group_name] \
= gr.permission.permission_name
c.group_members_obj = [x.user for x in c.users_group.members]
c.group_members = [(x.user_id, x.username) for x in
c.group_members_obj]
c.available_members = [(x.user_id, x.username) for x in
User.query().all()]
started working on issue #56
r956 def update(self, id):
"""PUT /users_groups/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('users_group', id=ID),
# method='put')
# url('users_group', id=ID)
Implemented #638 permissions overview to groups
r2987 c.users_group = UsersGroup.get_or_404(id)
self._load_data(id)
auto white-space removal
r1818
commit less models...
r1749 available_members = [safe_unicode(x[0]) for x in c.available_members]
auto white-space removal
r1818
#56 implemented users groups editing,...
r972 users_group_form = UsersGroupForm(edit=True,
old_data=c.users_group.get_dict(),
commit less models...
r1749 available_members=available_members)()
#56 implemented users groups editing,...
r972
try:
form_result = users_group_form.to_python(request.POST)
commit less models...
r1749 UsersGroupModel().update(c.users_group, form_result)
Implemented #467 Journal logs comments on changesets...
r2375 gr = form_result['users_group_name']
action_logger(self.rhodecode_user,
'admin_updated_users_group:%s' % gr,
None, self.ip_addr, self.sa)
h.flash(_('updated users group %s') % gr, category='success')
sqlalchemy sessions cleanup in admin...
r2662 Session().commit()
#56 implemented users groups editing,...
r972 except formencode.Invalid, errors:
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 ug_model = UsersGroupModel()
defaults = errors.value
Fixed permissions for users groups, group can have create repo permission now....
r1271 e = errors.error_dict or {}
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 defaults.update({
'create_repo_perm': ug_model.has_perm(id,
'hg.create.repository'),
'fork_repo_perm': ug_model.has_perm(id,
'hg.fork.repository'),
'_method': 'put'
})
Fixed permissions for users groups, group can have create repo permission now....
r1271
#56 implemented users groups editing,...
r972 return htmlfill.render(
render('admin/users_groups/users_group_edit.html'),
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 defaults=defaults,
Fixed permissions for users groups, group can have create repo permission now....
r1271 errors=e,
#56 implemented users groups editing,...
r972 prefix_error=False,
encoding="UTF-8")
except Exception:
log.error(traceback.format_exc())
h.flash(_('error occurred during update of users group %s') \
% request.POST.get('users_group_name'), category='error')
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 return redirect(url('edit_users_group', id=id))
#56 implemented users groups editing,...
r972
started working on issue #56
r956 def delete(self, id):
"""DELETE /users_groups/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('users_group', id=ID),
# method='delete')
# url('users_group', id=ID)
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 usr_gr = UsersGroup.get_or_404(id)
#56 implemented users groups deletes
r973 try:
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 UsersGroupModel().delete(usr_gr)
sqlalchemy sessions cleanup in admin...
r2662 Session().commit()
#56 implemented users groups deletes
r973 h.flash(_('successfully deleted users group'), category='success')
fixes #228 - added detection of assigned groups to prevent errors on sqlite
r1435 except UsersGroupsAssignedException, e:
h.flash(e, category='error')
#56 implemented users groups deletes
r973 except Exception:
fixed #373 missing cascade drop on user_group_to_perm table
r2063 log.error(traceback.format_exc())
#56 implemented users groups deletes
r973 h.flash(_('An error occurred during deletion of users group'),
category='error')
return redirect(url('users_groups'))
started working on issue #56
r956
def show(self, id, format='html'):
"""GET /users_groups/id: Show a specific item"""
# url('users_group', id=ID)
def edit(self, id, format='html'):
"""GET /users_groups/id/edit: Form to edit an existing item"""
# url('edit_users_group', id=ID)
#56 implemented users groups editing,...
r972
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 c.users_group = UsersGroup.get_or_404(id)
Implemented #638 permissions overview to groups
r2987 self._load_data(id)
#56 implemented users groups editing,...
r972
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 ug_model = UsersGroupModel()
#56 implemented users groups editing,...
r972 defaults = c.users_group.get_dict()
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 defaults.update({
'create_repo_perm': ug_model.has_perm(c.users_group,
'hg.create.repository'),
'fork_repo_perm': ug_model.has_perm(c.users_group,
'hg.fork.repository'),
})
#56 implemented users groups editing,...
r972 return htmlfill.render(
render('admin/users_groups/users_group_edit.html'),
defaults=defaults,
encoding="UTF-8",
force_defaults=False
)
Fixed permissions for users groups, group can have create repo permission now....
r1271
def update_perm(self, id):
"""PUT /users_perm/id: Update an existing item"""
# url('users_group_perm', id=ID, method='put')
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 users_group = UsersGroup.get_or_404(id)
grant_create_perm = str2bool(request.POST.get('create_repo_perm'))
grant_fork_perm = str2bool(request.POST.get('fork_repo_perm'))
inherit_perms = str2bool(request.POST.get('inherit_default_permissions'))
usersgroup_model = UsersGroupModel()
try:
users_group.inherit_default_permissions = inherit_perms
Session().add(users_group)
Fixed permissions for users groups, group can have create repo permission now....
r1271
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 if grant_create_perm:
usersgroup_model.revoke_perm(id, 'hg.create.none')
usersgroup_model.grant_perm(id, 'hg.create.repository')
h.flash(_("Granted 'repository create' permission to users group"),
category='success')
else:
usersgroup_model.revoke_perm(id, 'hg.create.repository')
usersgroup_model.grant_perm(id, 'hg.create.none')
h.flash(_("Revoked 'repository create' permission to users group"),
category='success')
Fixed permissions for users groups, group can have create repo permission now....
r1271
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 if grant_fork_perm:
usersgroup_model.revoke_perm(id, 'hg.fork.none')
usersgroup_model.grant_perm(id, 'hg.fork.repository')
h.flash(_("Granted 'repository fork' permission to users group"),
category='success')
else:
usersgroup_model.revoke_perm(id, 'hg.fork.repository')
usersgroup_model.grant_perm(id, 'hg.fork.none')
h.flash(_("Revoked 'repository fork' permission to users group"),
category='success')
auto white-space removal
r1818
sqlalchemy sessions cleanup in admin...
r2662 Session().commit()
RhodeCode now has a option to explicitly set forking permissions. ref #508...
r2709 except Exception:
log.error(traceback.format_exc())
h.flash(_('An error occurred during permissions saving'),
category='error')
Fixed permissions for users groups, group can have create repo permission now....
r1271
return redirect(url('edit_users_group', id=id))