[Checkins] SVN: grok/branches/jw-define-roles-directive/src/grok/ Remove the define_permission directive in favor of the grok.Permission

Jan-Wijbrand Kolman janwijbrand at gmail.com
Mon Aug 20 10:49:53 EDT 2007


Log message for revision 79030:
  Remove the define_permission directive in favor of the grok.Permission
  component base class.

Changed:
  U   grok/branches/jw-define-roles-directive/src/grok/__init__.py
  U   grok/branches/jw-define-roles-directive/src/grok/components.py
  U   grok/branches/jw-define-roles-directive/src/grok/directive.py
  U   grok/branches/jw-define-roles-directive/src/grok/interfaces.py
  U   grok/branches/jw-define-roles-directive/src/grok/meta.py
  U   grok/branches/jw-define-roles-directive/src/grok/util.py

-=-
Modified: grok/branches/jw-define-roles-directive/src/grok/__init__.py
===================================================================
--- grok/branches/jw-define-roles-directive/src/grok/__init__.py	2007-08-20 11:03:13 UTC (rev 79029)
+++ grok/branches/jw-define-roles-directive/src/grok/__init__.py	2007-08-20 14:49:52 UTC (rev 79030)
@@ -35,10 +35,10 @@
 from grok.components import Site, GlobalUtility, LocalUtility, Annotation
 from grok.components import Application, Form, AddForm, EditForm, DisplayForm
 from grok.components import Indexes
-from grok.components import Role
+from grok.components import Permission, Role
 from grok.directive import (context, name, title, template, templatedir,
                             provides, baseclass, global_utility, local_utility,
-                            define_permission, permissions, require, site)
+                            permissions, require, site)
 from grok._grok import do_grok as grok  # Avoid name clash within _grok
 from grok._grok import grok_component
 from grok._grok import SubscribeDecorator as subscribe

Modified: grok/branches/jw-define-roles-directive/src/grok/components.py
===================================================================
--- grok/branches/jw-define-roles-directive/src/grok/components.py	2007-08-20 11:03:13 UTC (rev 79029)
+++ grok/branches/jw-define-roles-directive/src/grok/components.py	2007-08-20 14:49:52 UTC (rev 79030)
@@ -473,5 +473,8 @@
 
 Indexes = IndexesClass('Indexes')
 
+class Permission(object):
+    pass
+
 class Role(object):
     pass

Modified: grok/branches/jw-define-roles-directive/src/grok/directive.py
===================================================================
--- grok/branches/jw-define-roles-directive/src/grok/directive.py	2007-08-20 11:03:13 UTC (rev 79029)
+++ grok/branches/jw-define-roles-directive/src/grok/directive.py	2007-08-20 14:49:52 UTC (rev 79030)
@@ -98,7 +98,7 @@
 
     def check_arguments(self, *values):
         pass
-    
+
     def value_factory(self, *args):
         return args
 
@@ -114,8 +114,6 @@
                                         ModuleDirectiveContext())
 local_utility = LocalUtilityDirective('grok.local_utility',
                                       ClassDirectiveContext())
-define_permission = MultipleTextDirective('grok.define_permission',
-                                          ModuleDirectiveContext())
 require = RequireDirective('grok.require', ClassDirectiveContext())
 site = InterfaceOrClassDirective('grok.site',
                                  ClassDirectiveContext())

Modified: grok/branches/jw-define-roles-directive/src/grok/interfaces.py
===================================================================
--- grok/branches/jw-define-roles-directive/src/grok/interfaces.py	2007-08-20 11:03:13 UTC (rev 79029)
+++ grok/branches/jw-define-roles-directive/src/grok/interfaces.py	2007-08-20 14:49:52 UTC (rev 79030)
@@ -43,6 +43,8 @@
     DisplayForm = interface.Attribute("Base class for display forms.")
     Indexes = interface.Attribute("Base class for catalog index definitions.")
 
+    Permission = interface.Attribute("Base class for a permission definition.")
+    Role = interface.Attribute("Base class for a role definition.")
 
 class IGrokErrors(interface.Interface):
 
@@ -122,14 +124,11 @@
         name_in_container - the name to use for storing the utility
         """
 
-    def define_permission(permission):
-        """Defines a new permission with the id ``permission``."""
-
     def require(permission):
         """Protect a view class or an XMLRPC method with ``permision``.
 
         ``permission`` must already be defined, e.g. using
-        grok.define_permission.
+        grok.Permission.
 
         grok.require can be used as a class-level directive or as a
         method decorator."""

Modified: grok/branches/jw-define-roles-directive/src/grok/meta.py
===================================================================
--- grok/branches/jw-define-roles-directive/src/grok/meta.py	2007-08-20 11:03:13 UTC (rev 79029)
+++ grok/branches/jw-define-roles-directive/src/grok/meta.py	2007-08-20 14:49:52 UTC (rev 79030)
@@ -492,22 +492,23 @@
     site_manager.registerUtility(utility, provided=provides,
                                  name=name)
 
-
-class DefinePermissionGrokker(martian.GlobalGrokker):
-
+class DefinePermissionGrokker(martian.ClassGrokker):
+    component_class = grok.Permission
     priority = 1500
 
-    def grok(self, name, module, context, module_info, templates):
-        permissions = module_info.getAnnotation('grok.define_permission', [])
-        for permission in permissions:
-            # IPermission.title says that permission ids (and titles,
-            # descriptions) *must* be unicode objects.  Good news is
-            # that the directive handler already made sure we either
-            # got pure ASCII or unicode here:
-            permission = unicode(permission)
-            # TODO permission title and description
-            component.provideUtility(Permission(permission, title=permission),
-                                     name=permission)
+    def grok(self, name, factory, context, module_info, templates):
+        permission_name = util.class_annotation(factory, 'grok.name', None)
+        if permission_name is None:
+            raise GrokError(
+                "A permission needs to have a dotted name for its id. Use "
+                "grok.name to specify one.", factory)
+        permission_name = unicode(permission_name)
+        title = unicode(
+            util.class_annotation(factory, 'grok.title', permission_name))
+        # TODO permission description
+        component.provideUtility(
+            Permission(permission_name, title=title),
+            name=permission_name)
         return True
 
 class DefineRoleGrokker(martian.ClassGrokker):
@@ -519,7 +520,7 @@
         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)            
+                "grok.name to specify one.", factory)
         title = util.class_annotation(factory, 'grok.title', role_name)
         component.provideUtility(Role(role_name, title=title), name=role_name)
 

Modified: grok/branches/jw-define-roles-directive/src/grok/util.py
===================================================================
--- grok/branches/jw-define-roles-directive/src/grok/util.py	2007-08-20 11:03:13 UTC (rev 79029)
+++ grok/branches/jw-define-roles-directive/src/grok/util.py	2007-08-20 14:49:52 UTC (rev 79030)
@@ -55,7 +55,7 @@
     if component.queryUtility(IPermission,
                               name=permission) is None:
        raise GrokError('Undefined permission %r in %r. Use '
-                       'grok.define_permission first.'
+                       'grok.Permission first.'
                        % (permission, factory), factory)
 
 def get_default_permission(factory):



More information about the Checkins mailing list