[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