[copr] bkabrda-workspace: Logic for copr permissions (08ae746)

bkabrda at fedoraproject.org bkabrda at fedoraproject.org
Mon Nov 19 13:02:36 UTC 2012


Repository : http://git.fedorahosted.org/cgit/copr.git

On branch  : bkabrda-workspace

>---------------------------------------------------------------

commit 08ae74604e58422cbae440ae3b0e5565375d5a25
Author: Bohuslav Kabrda <bkabrda at redhat.com>
Date:   Mon Nov 19 14:02:28 2012 +0100

    Logic for copr permissions


>---------------------------------------------------------------

 wsgi/coprs/logic/coprs_logic.py            |   16 ++++++++++++++++
 wsgi/coprs/views/coprs_ns/coprs_general.py |   25 ++++++++++---------------
 2 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/wsgi/coprs/logic/coprs_logic.py b/wsgi/coprs/logic/coprs_logic.py
index e39347c..c2b967d 100644
--- a/wsgi/coprs/logic/coprs_logic.py
+++ b/wsgi/coprs/logic/coprs_logic.py
@@ -67,3 +67,19 @@ class CoprsLogic(object):
     def increment_build_count(cls, user, copr): # TODO API of this method is different, maybe change?
         models.Copr.query.filter(models.Copr.id == copr.id).\
                           update({models.Copr.build_count: models.Copr.build_count + 1})
+
+class CoprsPermissionLogic(object):
+    @classmethod
+    def get(cls, user, copr, searched_user):
+        query = models.CoprPermission.query.filter(models.CoprPermission.copr == copr).\
+                                            filter(models.CoprPermission.user == searched_user)
+
+        return query
+
+    @classmethod
+    def new(cls, user, copr_permission):
+        db.session.add(copr_permission)
+
+    @classmethod
+    def delete(cls, user, copr_permission):
+        db.session.delete(copr_permission)
diff --git a/wsgi/coprs/views/coprs_ns/coprs_general.py b/wsgi/coprs/views/coprs_ns/coprs_general.py
index a4e34a6..077609e 100644
--- a/wsgi/coprs/views/coprs_ns/coprs_general.py
+++ b/wsgi/coprs/views/coprs_ns/coprs_general.py
@@ -126,24 +126,18 @@ def copr_update(username, coprname):
 @coprs_ns.route('/detail/<username>/<coprname>/apply_for_building', methods = ['POST'])
 @login_required
 def copr_apply_for_building(username, coprname):
-    query = db.session.query(models.Copr, models.CoprPermission).\
-                       join(models.Copr.owner).\
-                       outerjoin(models.CoprPermission).\
-                       options(db.contains_eager(models.Copr.owner)).\
-                       filter(models.Copr.name == coprname).\
-                       filter(models.User.openid_name == models.User.openidize_name(username)).\
-                       filter(db.or_(models.CoprPermission.user == flask.g.user, models.CoprPermission.user == None)).\
-                       first()
-    copr = query[0]
+    copr = coprs_logic.CoprsLogic.get(flask.g.user, username, coprname).first()
+    permission = coprs_logic.CoprsPermissionLogic.get(flask.g.user, copr, flask.g.user).first()
+
     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.')
-    elif query[1]:
+    elif permission:
         flask.flash('You are already listed in permissions for Copr "{0}".'.format(copr.name))
     else:
         perm = models.CoprPermission(user = flask.g.user, copr = copr, approved = False)
-        db.session.add(perm)
+        coprs_logic.CoprsPermissionLogic.new(flask.g.user, perm)
         db.session.commit()
         flask.flash('You have successfuly applied for building in Copr "{0}".'.format(copr.name))
 
@@ -153,15 +147,16 @@ def copr_apply_for_building(username, coprname):
 @coprs_ns.route('/detail/<username>/<coprname>/give_up_building/', methods = ['POST'])
 @login_required
 def copr_give_up_building(username, coprname):
-    query = coprs_logic.CoprsLogic.get(flask.g.user, username, coprname, with_permissions = True)
-    copr = query.first()
+    copr = coprs_logic.CoprsLogic.get(flask.g.user, username, coprname).first()
+    permission = coprs_logic.CoprsPermissionLogic.get(flask.g.user, copr, flask.g.user).first()
+
     if not copr:
         return page_not_found('Copr with name {0} does not exist.'.format(name))
 
-    if not query[1]:
+    if not permission:
         flask.flash('You are already not in permissions for Copr "{0}".'.format(copr.name))
     else:
-        db.session.delete(query[1]) # TODO: do we really want to delete this, or just inactivate?
+        coprs_logic.CoprsPermissionLogic.delete(flask.g.user, permission) # TODO: do we really want to delete this, or just inactivate?
         db.session.commit()
         flask.flash('You have successfuly given up building in Copr "{0}".'.format(copr.name))
 



More information about the copr-devel mailing list