Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : bkabrda-workspace
---------------------------------------------------------------
commit 08ae74604e58422cbae440ae3b0e5565375d5a25
Author: Bohuslav Kabrda <bkabrda(a)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))