[copr] master: Handle PermissionsEnum better (19ef32c)
bkabrda at fedoraproject.org
bkabrda at fedoraproject.org
Tue Feb 19 13:29:43 UTC 2013
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 19ef32c10a24800d5ed7e7ac9559ccb029d8fb4d
Author: Bohuslav Kabrda <bkabrda at redhat.com>
Date: Tue Feb 19 13:53:07 2013 +0100
Handle PermissionsEnum better
>---------------------------------------------------------------
coprs_frontend/coprs/filters.py | 2 +-
coprs_frontend/coprs/forms.py | 8 +++---
coprs_frontend/coprs/helpers.py | 22 ++++++++++----------
coprs_frontend/coprs/logic/coprs_logic.py | 6 ++--
coprs_frontend/coprs/models.py | 4 +-
coprs_frontend/tests/coprs_test_case.py | 6 ++--
.../tests/test_views/test_coprs_ns/test_general.py | 8 +++---
7 files changed, 28 insertions(+), 28 deletions(-)
diff --git a/coprs_frontend/coprs/filters.py b/coprs_frontend/coprs/filters.py
index 5cbdb75..12374b6 100644
--- a/coprs_frontend/coprs/filters.py
+++ b/coprs_frontend/coprs/filters.py
@@ -9,7 +9,7 @@ def date_from_secs(secs):
@app.template_filter('perm_type_from_num')
def perm_type_from_num(num):
- return helpers.PermissionEnum.key(num)
+ return helpers.PermissionEnum(num)
# this should probably be stored in DB with the whole mock_chroot...
@app.template_filter('os_name_short')
diff --git a/coprs_frontend/coprs/forms.py b/coprs_frontend/coprs/forms.py
index e5038f2..6d14b60 100644
--- a/coprs_frontend/coprs/forms.py
+++ b/coprs_frontend/coprs/forms.py
@@ -61,8 +61,8 @@ class StringListFilter(object):
class ValueToPermissionNumberFilter(object):
def __call__(self, value):
if value:
- return helpers.PermissionEnum.num('request')
- return helpers.PermissionEnum.num('nothing')
+ return helpers.PermissionEnum('request')
+ return helpers.PermissionEnum('nothing')
class CoprFormFactory(object):
@staticmethod
@@ -146,9 +146,9 @@ class PermissionsApplierFormFactory(object):
admin_default = False
if permission:
- if permission.copr_builder != helpers.PermissionEnum.num('nothing'):
+ if permission.copr_builder != helpers.PermissionEnum('nothing'):
builder_default = True
- if permission.copr_admin != helpers.PermissionEnum.num('nothing'):
+ if permission.copr_admin != helpers.PermissionEnum('nothing'):
admin_default = True
setattr(F, 'copr_builder', wtf.BooleanField(default = builder_default, filters = [ValueToPermissionNumberFilter()]))
diff --git a/coprs_frontend/coprs/helpers.py b/coprs_frontend/coprs/helpers.py
index 6cb7c16..ac105ec 100644
--- a/coprs_frontend/coprs/helpers.py
+++ b/coprs_frontend/coprs/helpers.py
@@ -17,21 +17,21 @@ def generate_api_token(size=30):
return ''.join(random.choice(string.ascii_lowercase) for x in range(size))
+class EnumType(type):
+ def __call__(self, attr):
+ if isinstance(attr, int):
+ for k, v in self.vals.items():
+ if v == attr:
+ return k
+ raise KeyError('num {0} is not mapped'.format(attr))
+ else:
+ return self.vals[attr]
+
class PermissionEnum(object):
+ __metaclass__ = EnumType
vals = {'nothing': 0, 'request': 1, 'approved': 2}
@classmethod
- def num(cls, key):
- return cls.vals[key]
-
- @classmethod
- def key(cls, num):
- for k, n in cls.vals.items():
- if n == num:
- return k
- raise KeyError('num {0} is not mapped'.format(num))
-
- @classmethod
def choices_list(cls, without = -1):
return [(n, k) for k, n in cls.vals.items() if n != without]
diff --git a/coprs_frontend/coprs/logic/coprs_logic.py b/coprs_frontend/coprs/logic/coprs_logic.py
index f124006..aee017d 100644
--- a/coprs_frontend/coprs/logic/coprs_logic.py
+++ b/coprs_frontend/coprs/logic/coprs_logic.py
@@ -44,7 +44,7 @@ class CoprsLogic(object):
elif user_relation == 'allowed':
aliased_user = db.aliased(models.User)
query = query.join(models.CoprPermission, models.Copr.copr_permissions).\
- filter(models.CoprPermission.copr_builder == helpers.PermissionEnum.num('approved')).\
+ filter(models.CoprPermission.copr_builder == helpers.PermissionEnum('approved')).\
join(aliased_user, models.CoprPermission.user).\
filter(aliased_user.openid_name == models.User.openidize_name(username))
if with_mock_chroots:
@@ -132,9 +132,9 @@ class CoprPermissionsLogic(object):
def update_permissions_by_applier(cls, user, copr, copr_permission, new_builder, new_admin):
if copr_permission:
# preserve approved permissions if set
- if not new_builder or copr_permission.copr_builder != helpers.PermissionEnum.num('approved'):
+ if not new_builder or copr_permission.copr_builder != helpers.PermissionEnum('approved'):
copr_permission.copr_builder = new_builder
- if not new_admin or copr_permission.copr_admin != helpers.PermissionEnum.num('approved'):
+ if not new_admin or copr_permission.copr_admin != helpers.PermissionEnum('approved'):
copr_permission.copr_admin = new_admin
else:
perm = models.CoprPermission(user = user, copr = copr, copr_builder = new_builder, copr_admin = new_admin)
diff --git a/coprs_frontend/coprs/models.py b/coprs_frontend/coprs/models.py
index 81d23df..0f81c85 100644
--- a/coprs_frontend/coprs/models.py
+++ b/coprs_frontend/coprs/models.py
@@ -78,7 +78,7 @@ class User(db.Model, Serializer):
can_build = False
if copr.owner == self:
can_build = True
- if self.permissions_for_copr(copr) and self.permissions_for_copr(copr).copr_builder == helpers.PermissionEnum.num('approved'):
+ if self.permissions_for_copr(copr) and self.permissions_for_copr(copr).copr_builder == helpers.PermissionEnum('approved'):
can_build = True
return can_build
@@ -87,7 +87,7 @@ class User(db.Model, Serializer):
can_edit = False
if copr.owner == self:
can_edit = True
- if self.permissions_for_copr(copr) and self.permissions_for_copr(copr).copr_admin == helpers.PermissionEnum.num('approved'):
+ if self.permissions_for_copr(copr) and self.permissions_for_copr(copr).copr_admin == helpers.PermissionEnum('approved'):
can_edit = True
return can_edit
diff --git a/coprs_frontend/tests/coprs_test_case.py b/coprs_frontend/tests/coprs_test_case.py
index 7756343..2028401 100644
--- a/coprs_frontend/tests/coprs_test_case.py
+++ b/coprs_frontend/tests/coprs_test_case.py
@@ -92,8 +92,8 @@ class CoprsTestCase(object):
@pytest.fixture
def f_copr_permissions(self):
- self.cp1 = models.CoprPermission(copr = self.c2, user = self.u1, copr_builder = helpers.PermissionEnum.num('approved'), copr_admin = helpers.PermissionEnum.num('nothing'))
- self.cp2 = models.CoprPermission(copr = self.c3, user = self.u3, copr_builder = helpers.PermissionEnum.num('nothing'), copr_admin = helpers.PermissionEnum.num('nothing'))
- self.cp3 = models.CoprPermission(copr = self.c3, user = self.u1, copr_builder = helpers.PermissionEnum.num('request'), copr_admin = helpers.PermissionEnum.num('approved'))
+ self.cp1 = models.CoprPermission(copr = self.c2, user = self.u1, copr_builder = helpers.PermissionEnum('approved'), copr_admin = helpers.PermissionEnum('nothing'))
+ self.cp2 = models.CoprPermission(copr = self.c3, user = self.u3, copr_builder = helpers.PermissionEnum('nothing'), copr_admin = helpers.PermissionEnum('nothing'))
+ self.cp3 = models.CoprPermission(copr = self.c3, user = self.u1, copr_builder = helpers.PermissionEnum('request'), copr_admin = helpers.PermissionEnum('approved'))
self.db.session.add_all([self.cp1, self.cp2, self.cp3])
diff --git a/coprs_frontend/tests/test_views/test_coprs_ns/test_general.py b/coprs_frontend/tests/test_views/test_coprs_ns/test_general.py
index 572bfef..691276f 100644
--- a/coprs_frontend/tests/test_views/test_coprs_ns/test_general.py
+++ b/coprs_frontend/tests/test_views/test_coprs_ns/test_general.py
@@ -351,14 +351,14 @@ class TestCoprUpdatePermissions(CoprsTestCase):
u1_c3_perms = self.models.CoprPermission.query.filter(self.models.CoprPermission.copr_id == self.c3.id).\
filter(self.models.CoprPermission.user_id == self.u1.id).\
first()
- assert u1_c3_perms.copr_builder == self.helpers.PermissionEnum.num('approved')
- assert u1_c3_perms.copr_admin == self.helpers.PermissionEnum.num('request')
+ assert u1_c3_perms.copr_builder == self.helpers.PermissionEnum('approved')
+ assert u1_c3_perms.copr_admin == self.helpers.PermissionEnum('request')
u3_c3_perms = self.models.CoprPermission.query.filter(self.models.CoprPermission.copr_id == self.c3.id).\
filter(self.models.CoprPermission.user_id == self.u3.id).\
first()
- assert u3_c3_perms.copr_builder == self.helpers.PermissionEnum.num('nothing')
- assert u3_c3_perms.copr_admin == self.helpers.PermissionEnum.num('approved')
+ assert u3_c3_perms.copr_builder == self.helpers.PermissionEnum('nothing')
+ assert u3_c3_perms.copr_admin == self.helpers.PermissionEnum('approved')
def test_copr_admin_can_update_permissions(self, f_users, f_coprs, f_copr_permissions, f_db):
with self.tc as c:
More information about the copr-devel
mailing list