[Checkins] SVN: grok/branches/jw-define-roles-directive/src/grok/ Implement Role Grokker, Minimal tests.

Jan-Wijbrand Kolman janwijbrand at gmail.com
Fri Aug 3 17:39:37 EDT 2007


Log message for revision 78566:
  Implement Role Grokker, Minimal tests.

Changed:
  U   grok/branches/jw-define-roles-directive/src/grok/ftests/security/roles.py
  U   grok/branches/jw-define-roles-directive/src/grok/meta.py
  A   grok/branches/jw-define-roles-directive/src/grok/tests/security/missing_role_name.py

-=-
Modified: grok/branches/jw-define-roles-directive/src/grok/ftests/security/roles.py
===================================================================
--- grok/branches/jw-define-roles-directive/src/grok/ftests/security/roles.py	2007-08-03 21:39:16 UTC (rev 78565)
+++ grok/branches/jw-define-roles-directive/src/grok/ftests/security/roles.py	2007-08-03 21:39:36 UTC (rev 78566)
@@ -48,9 +48,11 @@
 grok.define_permission('grok.ErasePainting')
 grok.define_permission('grok.ApprovePainting')
 
-grok.define_role(
-    'grok.PaintingOwner',
-    ('grok.ViewPainting', 'grok.EditPainting', 'grok.ErasePainting'))
+class PaintingOwner(grok.Role):
+    grok.name('grok.PaintingOwner')
+    grok.title('Painting Owner')
+    grok.permissions(
+        'grok.ViewPainting', 'grok.EditPainting', 'grok.ErasePainting')
 
 class CavePainting(grok.View):
 

Modified: grok/branches/jw-define-roles-directive/src/grok/meta.py
===================================================================
--- grok/branches/jw-define-roles-directive/src/grok/meta.py	2007-08-03 21:39:16 UTC (rev 78565)
+++ grok/branches/jw-define-roles-directive/src/grok/meta.py	2007-08-03 21:39:36 UTC (rev 78566)
@@ -508,26 +508,26 @@
             # TODO permission title and description
             component.provideUtility(Permission(permission, title=permission),
                                      name=permission)
-
         return True
 
+class DefineRoleGrokker(martian.ClassGrokker):
+    component_class = grok.Role
+    priority = DefinePermissionGrokker.priority - 1
 
-class DefineRoleGrokker(martian.GlobalGrokker):
+    def grok(self, name, factory, context, module_info, templates):
+        role_name = util.class_annotation(factory, 'grok.name', None)
+        if role_name is None:
+            raise GrokError(
+                "A role needs to have a dotted name for its id. Use "
+                "grok.name to specifiy one.", factory)            
+        title = util.class_annotation(factory, 'grok.title', role_name)
+        component.provideUtility(Role(role_name, title=title), name=role_name)
 
-    priority = 1500
-
-    def grok(self, name, module, context, module_info, templates):
-        role_infos = module_info.getAnnotation('grok.define_role', [])
-        for role_id, permissions in role_infos:
-            component.provideUtility(
-                Role(role_id, title=role_id), name=role_id)
-            if permissions is None:
-                continue
-            for permission in permissions:
-                rolePermissionManager.grantPermissionToRole(permission, role_id)
+        permissions = util.class_annotation(factory, 'grok.permissions', ())
+        for permission in permissions:
+            rolePermissionManager.grantPermissionToRole(permission, role_name)
         return True
 
-
 class AnnotationGrokker(martian.ClassGrokker):
     component_class = grok.Annotation
 

Added: grok/branches/jw-define-roles-directive/src/grok/tests/security/missing_role_name.py
===================================================================
--- grok/branches/jw-define-roles-directive/src/grok/tests/security/missing_role_name.py	                        (rev 0)
+++ grok/branches/jw-define-roles-directive/src/grok/tests/security/missing_role_name.py	2007-08-03 21:39:36 UTC (rev 78566)
@@ -0,0 +1,14 @@
+"""
+A role has to have a name to be defined.
+
+  >>> grok.grok(__name__)
+  Traceback (most recent call last):
+  GrokError: A role needs to have a dotted name for its id.
+  Use grok.name to specifiy one.
+"""
+
+import grok
+import zope.interface
+
+class MissingName(grok.Role):
+    pass



More information about the Checkins mailing list