Browse Source

Refactored perms provider module

Rafał Pitoń 11 years ago
parent
commit
e0a98eab66
2 changed files with 52 additions and 69 deletions
  1. 1 21
      misago/acl/__init__.py
  2. 51 48
      misago/acl/providers.py

+ 1 - 21
misago/acl/__init__.py

@@ -1,21 +1 @@
-from misago.acl.providers import providers  # noqa
-
-
-def get_change_permissions_forms(role, data=None):
-    return providers.get_change_permissions_forms(role, data)
-
-
-def build_acl_cache(roles):
-    return providers.build_acl_cache(roles)
-
-
-def hydrate_acl_cache(acl):
-    return providers.hydrate_acl_cache(acl)
-
-
-def get_acl_by_token(token):
-    return providers.get_acl_by_token(token)
-
-
-def get_acl_by_roles(roles):
-    return providers.get_acl_by_roles(roles)
+from misago.acl.providers import *  # noqa

+ 51 - 48
misago/acl/providers.py

@@ -2,78 +2,81 @@ from importlib import import_module
 from django.conf import settings
 from django.conf import settings
 
 
 
 
+__ALL__ = ['providers', 'get_default_permissions',
+           'get_change_permissions_forms']
+
+
+# Manager for permission providers
 class PermissionProviders(object):
 class PermissionProviders(object):
     def __init__(self):
     def __init__(self):
         self._initialized = False
         self._initialized = False
         self._providers = []
         self._providers = []
         self._providers_dict = {}
         self._providers_dict = {}
 
 
-    def initialize_providers(self):
+    def _assert_providers_imported(self):
         if not self._initialized:
         if not self._initialized:
-            self.import_providers()
+            self._import_providers()
             self._initialized = True
             self._initialized = True
 
 
-    def import_providers(self):
+    def _import_providers(self):
         for namespace in settings.MISAGO_PERMISSION_PROVIDERS:
         for namespace in settings.MISAGO_PERMISSION_PROVIDERS:
             self._providers.append((namespace, import_module(namespace)))
             self._providers.append((namespace, import_module(namespace)))
             self._providers_dict[namespace] = import_module(namespace)
             self._providers_dict[namespace] = import_module(namespace)
 
 
-    def get_default_permissions(self):
-        default_permissions = {}
+    def list(self):
+        self._assert_providers_imported()
+        return self._providers
 
 
-        for provider, module in self._providers:
-            try:
-                default_data = module.DEFAULT_PERMISSIONS
-            except AttributeError:
-                message = "'%s' object has no attribute '%s'"
-                raise AttributeError(
-                    message % (provider, 'DEFAULT_PERMISSIONS'))
+    def dict(self):
+        self._assert_providers_imported()
+        return self._providers_dict
 
 
-        default_permissions
 
 
+providers = PermissionProviders()
 
 
-    def get_change_permissions_forms(self, role, data=None):
-        self.initialize_providers()
-        role_permissions = role.permissions
 
 
-        forms = []
-        for provider, module in self._providers:
-            try:
-                default_data = module.DEFAULT_PERMISSIONS
-            except AttributeError:
-                message = "'%s' object has no attribute '%s'"
-                raise AttributeError(
-                    message % (provider, 'DEFAULT_PERMISSIONS'))
-            try:
-                module.change_permissions_form
-            except AttributeError:
-                message = "'%s' object has no attribute '%s'"
-                raise AttributeError(
-                    message % (provider, 'change_permissions_form'))
+def get_default_permissions():
+    default_permissions = {}
 
 
-            FormType = module.change_permissions_form(role)
+    for provider, module in providers.list():
+        try:
+            default_data = module.DEFAULT_PERMISSIONS
+        except AttributeError:
+            message = "'%s' object has no attribute '%s'"
+            raise AttributeError(
+                message % (provider, 'DEFAULT_PERMISSIONS'))
 
 
-            if FormType:
-                if data:
-                    forms.append(FormType(data, prefix=provider))
-                else:
-                    initial_data = role_permissions.get(provider, default_data)
-                    forms.append(FormType(initial=initial_data,
-                                          prefix=provider))
+        default_permissions[provider] = default_data
 
 
-        return forms
+    return default_permissions
 
 
-    def build_acl_cache(self, roles):
-        self.initialize_providers()
 
 
-    def hydrate_acl_cache(self, acl):
-        self.initialize_providers()
+def get_change_permissions_forms(role, data=None):
+    role_permissions = role.permissions
 
 
-    def get_acl_by_token(self, token):
-        pass
+    forms = []
+    for provider, module in providers.list():
+        try:
+            default_data = module.DEFAULT_PERMISSIONS
+        except AttributeError:
+            message = "'%s' object has no attribute '%s'"
+            raise AttributeError(
+                message % (provider, 'DEFAULT_PERMISSIONS'))
+        try:
+            module.change_permissions_form
+        except AttributeError:
+            message = "'%s' object has no attribute '%s'"
+            raise AttributeError(
+                message % (provider, 'change_permissions_form'))
 
 
-    def get_acl_by_roles(self, roles):
-        pass
+        FormType = module.change_permissions_form(role)
 
 
+        if FormType:
+            if data:
+                forms.append(FormType(data, prefix=provider))
+            else:
+                initial_data = role_permissions.get(provider, default_data)
+                forms.append(FormType(initial=initial_data,
+                                      prefix=provider))
 
 
-providers = PermissionProviders()
+    return forms