[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