[copr] master: Rewrite the logic and views to reflect new permissions system (1ef596c)
bkabrda at fedoraproject.org
bkabrda at fedoraproject.org
Fri Jan 11 10:21:17 UTC 2013
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 1ef596cae860109962a91cd2a02da15b41a3a81f
Author: Bohuslav Kabrda <bkabrda at redhat.com>
Date: Thu Jan 10 14:26:51 2013 +0100
Rewrite the logic and views to reflect new permissions system
>---------------------------------------------------------------
coprs_frontend/coprs/logic/coprs_logic.py | 37 +++----------------
.../coprs/views/coprs_ns/coprs_general.py | 33 ++++++++++++------
2 files changed, 28 insertions(+), 42 deletions(-)
diff --git a/coprs_frontend/coprs/logic/coprs_logic.py b/coprs_frontend/coprs/logic/coprs_logic.py
index 2d8c200..1b691a2 100644
--- a/coprs_frontend/coprs/logic/coprs_logic.py
+++ b/coprs_frontend/coprs/logic/coprs_logic.py
@@ -84,44 +84,19 @@ class CoprsPermissionLogic(object):
@classmethod
def update_permissions(cls, user, copr, copr_permission, new_builder, new_admin):
- copr_builder = copr_permission.copr_builder
- copr_admin = copr_permission.copr_admin
- # if the permission is granted, use Approved
- # otherwise if it was Approved and it is ungranted, use No Action,
- # else use original value
- if new_builder:
- copr_builder = helpers.PermissionEnum.num('Approved')
- elif copr_builder == helpers.PermissionEnum.num('Approved'):
- copr_builder = helpers.PermissionEnum.num('No Action')
- if new_admin:
- copr_admin = helpers.PermissionEnum.num('Approved')
- elif copr_admin == helpers.PermissionEnum.num('Approved'):
- copr_admin = helpers.PermissionEnum.num('No Action')
-
models.CoprPermission.query.filter(models.CoprPermission.copr_id == copr.id).\
filter(models.CoprPermission.user_id == copr_permission.user_id).\
- update({'copr_builder': copr_builder,
- 'copr_admin': copr_admin})
+ update({'copr_builder': new_builder,
+ 'copr_admin': new_admin})
@classmethod
def update_permissions_by_applier(cls, user, copr, copr_permission, new_builder, new_admin):
- approved_num = helpers.PermissionEnum.num('Approved')
if copr_permission:
- prev_builder = copr_permission.copr_builder
- prev_admin = copr_permission.copr_admin
- # if we had Approved before, we can have it now, otherwise not
- if new_builder == approved_num and prev_builder != new_builder or \
- new_admin == approved_num and prev_admin != new_admin:
- raise exceptions.InsufficientRightsException('User can\'t approve himself.')
- else:
- copr_permission.copr_builder = new_builder
- copr_permission.copr_admin = new_admin
+ copr_permission.copr_builder = new_builder
+ copr_permission.copr_admin = new_admin
else:
- if new_builder == approved_num or new_admin == approved_num:
- raise exceptions.InsufficientRightsException('User can\'t approve himself.')
- else:
- perm = models.CoprPermission(user = user, copr = copr, copr_builder = new_builder, copr_admin = new_admin)
- cls.new(user, perm)
+ perm = models.CoprPermission(user = user, copr = copr, copr_builder = new_builder, copr_admin = new_admin)
+ cls.new(user, perm)
@classmethod
def delete(cls, user, copr_permission):
diff --git a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
index 25d0f40..54896fe 100644
--- a/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
+++ b/coprs_frontend/coprs/views/coprs_ns/coprs_general.py
@@ -99,12 +99,23 @@ def copr_detail(username, coprname):
else:
user_perm = None
- permission_applier_form = forms.PermissionsApplierFormFactory.create_form_cls(user_perm)()
+ permissions_applier_form = None
+ permissions_form = None
+
+ # generate a proper form for displaying
+ if flask.g.user:
+ if flask.g.user.can_edit(copr):
+ permissions_form = forms.PermissionsFormFactory.create_form_cls(permissions)()
+ else:
+ permissions_applier_form = forms.PermissionsApplierFormFactory.create_form_cls(user_perm)()
+
return flask.render_template('coprs/detail.html',
copr = copr,
build_form = build_form,
- permission_applier_form = permission_applier_form,
- permissions = permissions)
+ permissions_form = permissions_form,
+ permissions_applier_form = permissions_applier_form,
+ permissions = permissions,
+ current_user_permissions = user_perm)
@coprs_ns.route('/detail/<username>/<coprname>/edit/')
@@ -151,15 +162,16 @@ def copr_update(username, coprname):
def copr_permissions_applier_change(username, coprname):
copr = coprs_logic.CoprsLogic.get(flask.g.user, username, coprname).first()
permission = coprs_logic.CoprsPermissionLogic.get(flask.g.user, copr, flask.g.user).first()
- applier_permissions_form = forms.PermissionsApplierFormFactory.create_form_cls()()
+ applier_permissions_form = forms.PermissionsApplierFormFactory.create_form_cls(permission)()
if not copr:
return page_not_found('Copr with name {0} does not exist.'.format(name))
if copr.owner == flask.g.user:
flask.flash('Owner cannot request permissions for his own copr.')
- else:
- new_builder = int(applier_permissions_form.copr_builder.data)
- new_admin = int(applier_permissions_form.copr_admin.data)
+ elif applier_permissions_form.validate_on_submit():
+ # we rely on these to be 0 or 1 from form. TODO: abstract from that
+ new_builder = applier_permissions_form.copr_builder.data
+ new_admin = applier_permissions_form.copr_admin.data
try:
coprs_logic.CoprsPermissionLogic.update_permissions_by_applier(flask.g.user, copr, permission, new_builder, new_admin)
except exceptions.InsufficientRightsException as ex:
@@ -176,7 +188,7 @@ def copr_update_permissions(username, coprname):
query = coprs_logic.CoprsLogic.get(flask.g.user, username, coprname)
copr = query.first()
permissions = copr.copr_permissions
- permissions_form = forms.DynamicPermissionsFormFactory.create_form_cls(permissions)()
+ permissions_form = forms.PermissionsFormFactory.create_form_cls(permissions)()
# only owner can update copr permissions
if not flask.g.user.can_edit(copr):
@@ -192,6 +204,5 @@ def copr_update_permissions(username, coprname):
db.session.commit()
flask.flash('Copr permissions were updated successfully.')
- return flask.redirect(flask.url_for('coprs_ns.copr_detail', username = copr.owner.name, coprname = copr.name))
- else:
- return flask.render_template('coprs/edit.html', copr = copr, form = form)
+
+ return flask.redirect(flask.url_for('coprs_ns.copr_detail', username = copr.owner.name, coprname = copr.name))
More information about the copr-devel
mailing list