[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