[Checkins] SVN: grokcore.security/trunk/ Fix the condition role feature.

Sylvain Viollow cvs-admin at zope.org
Wed May 2 09:09:42 UTC 2012


Log message for revision 125574:
  Fix the condition role feature.
  

Changed:
  U   grokcore.security/trunk/CHANGES.txt
  U   grokcore.security/trunk/src/grokcore/security/components.py
  U   grokcore.security/trunk/src/grokcore/security/meta/role.py
  D   grokcore.security/trunk/src/grokcore/security/meta-minimal.zcml
  U   grokcore.security/trunk/src/grokcore/security/meta.zcml

-=-
Modified: grokcore.security/trunk/CHANGES.txt
===================================================================
--- grokcore.security/trunk/CHANGES.txt	2012-05-02 09:08:54 UTC (rev 125573)
+++ grokcore.security/trunk/CHANGES.txt	2012-05-02 09:09:38 UTC (rev 125574)
@@ -4,9 +4,9 @@
 1.7 (unreleased)
 ----------------
 
-- Nothing changed yet.
+- Fix the package to properly work if the extra ``role`` is not
+  specified.
 
-
 1.6 (2012-05-01)
 ----------------
 

Modified: grokcore.security/trunk/src/grokcore/security/components.py
===================================================================
--- grokcore.security/trunk/src/grokcore/security/components.py	2012-05-02 09:08:54 UTC (rev 125573)
+++ grokcore.security/trunk/src/grokcore/security/components.py	2012-05-02 09:09:38 UTC (rev 125574)
@@ -15,23 +15,35 @@
 
 from zope.security.permission import Permission
 
+def api(name):
+    from zope.dottedname.resolve import resolve
+    from zope.interface import Interface
+
+    try:
+        return True, resolve(name)
+    except ImportError:
+        return False, Interface
+
+
 class Permission(Permission):
     pass
 
 Public = 'zope.Public'
 
-from zope.securitypolicy.role import Role as securitypolicy_Role
 
-class Role(securitypolicy_Role):
-    """Base class for roles in Grok applications.
+HAVE_ROLE, securitypolicy_Role = api('zope.securitypolicy.role.Role')
 
-    A role is a description of a class of users that gives them a
-    machine-readable name, a human-readable title, and a set of
-    permissions which users belong to that role should possess::
+if HAVE_ROLE:
+    class Role(securitypolicy_Role):
+        """Base class for roles in Grok applications.
 
-        class Editor(grok.Role):
-            grok.name('news.Editor')
-            grok.title('Editor')
-            grok.permissions('news.EditArticle', 'news.PublishArticle')
+        A role is a description of a class of users that gives them a
+        machine-readable name, a human-readable title, and a set of
+        permissions which users belong to that role should possess::
 
-    """
\ No newline at end of file
+            class Editor(grok.Role):
+                grok.name('news.Editor')
+                grok.title('Editor')
+                grok.permissions('news.EditArticle', 'news.PublishArticle')
+
+        """

Modified: grokcore.security/trunk/src/grokcore/security/meta/role.py
===================================================================
--- grokcore.security/trunk/src/grokcore/security/meta/role.py	2012-05-02 09:08:54 UTC (rev 125573)
+++ grokcore.security/trunk/src/grokcore/security/meta/role.py	2012-05-02 09:09:38 UTC (rev 125574)
@@ -13,62 +13,66 @@
 ##############################################################################
 """Grokkers for security-related components."""
 
-import martian
-import grokcore.component
-import grokcore.security
 
-from martian.error import GrokError
+from grokcore.security.components import HAVE_ROLE
 
-from zope.i18nmessageid import Message
-from zope.securitypolicy.rolepermission import rolePermissionManager
-from zope.securitypolicy.interfaces import IRole
+if HAVE_ROLE:
+    import martian
 
-from grokcore.security.directive import permissions
-from grokcore.security.components import Role
-from grokcore.security.meta.permission import PermissionGrokker
-from grokcore.security.meta.permission import default_fallback_to_name
+    import grokcore.component
+    import grokcore.security
 
+    from martian.error import GrokError
+    from zope.i18nmessageid import Message
+    from zope.securitypolicy.rolepermission import rolePermissionManager
+    from zope.securitypolicy.interfaces import IRole
 
-class RoleGrokker(martian.ClassGrokker):
-    """Grokker for components subclassed from `grok.Role`.
+    from grokcore.security.components import Role
+    from grokcore.security.directive import permissions
+    from grokcore.security.meta.permission import PermissionGrokker
+    from grokcore.security.meta.permission import default_fallback_to_name
 
-    Each role is registered as a global utility providing the service
-    `IRole` under its own particular name, and then granted every
-    permission named in its `grok.permission()` directive.
 
-    """
-    martian.component(Role)
-    martian.priority(martian.priority.bind().get(PermissionGrokker()) - 1)
-    martian.directive(grokcore.component.name)
-    martian.directive(
-        grokcore.component.title, get_default=default_fallback_to_name)
-    martian.directive(grokcore.component.description)
-    martian.directive(permissions)
+    class RoleGrokker(martian.ClassGrokker):
+        """Grokker for components subclassed from `grok.Role`.
 
-    def execute(self, factory, config, name, title, description,
-                permissions, **kw):
-        if not name:
-            raise GrokError(
-                "A role needs to have a dotted name for its id. Use "
-                "grok.name to specify one.", factory)
-        # We can safely convert to unicode, since the directives makes sure
-        # it is either unicode already or ASCII.
-        if not isinstance(title, Message):
-            title = unicode(title)
-        if not isinstance(description, Message):
-            description = unicode(description)
-        role = factory(unicode(name), title, description)
+        Each role is registered as a global utility providing the service
+        `IRole` under its own particular name, and then granted every
+        permission named in its `grok.permission()` directive.
 
-        config.action(
-            discriminator=('utility', IRole, name),
-            callable=grokcore.component.provideUtility,
-            args=(role, IRole, name),
-            )
+        """
+        martian.component(Role)
+        martian.priority(martian.priority.bind().get(PermissionGrokker()) - 1)
+        martian.directive(grokcore.component.name)
+        martian.directive(
+            grokcore.component.title, get_default=default_fallback_to_name)
+        martian.directive(grokcore.component.description)
+        martian.directive(permissions)
 
-        for permission in permissions:
+        def execute(self, factory, config, name, title, description,
+                    permissions, **kw):
+            if not name:
+                raise GrokError(
+                    "A role needs to have a dotted name for its id. Use "
+                    "grok.name to specify one.", factory)
+            # We can safely convert to unicode, since the directives makes sure
+            # it is either unicode already or ASCII.
+            if not isinstance(title, Message):
+                title = unicode(title)
+            if not isinstance(description, Message):
+                description = unicode(description)
+            role = factory(unicode(name), title, description)
+
             config.action(
-                discriminator=('grantPermissionToRole', permission, name),
-                callable=rolePermissionManager.grantPermissionToRole,
-                args=(permission, name),
+                discriminator=('utility', IRole, name),
+                callable=grokcore.component.provideUtility,
+                args=(role, IRole, name),
                 )
-        return True
+
+            for permission in permissions:
+                config.action(
+                    discriminator=('grantPermissionToRole', permission, name),
+                    callable=rolePermissionManager.grantPermissionToRole,
+                    args=(permission, name),
+                    )
+            return True

Deleted: grokcore.security/trunk/src/grokcore/security/meta-minimal.zcml
===================================================================
--- grokcore.security/trunk/src/grokcore/security/meta-minimal.zcml	2012-05-02 09:08:54 UTC (rev 125573)
+++ grokcore.security/trunk/src/grokcore/security/meta-minimal.zcml	2012-05-02 09:09:38 UTC (rev 125574)
@@ -1,6 +0,0 @@
-<configure
-    xmlns="http://namespaces.zope.org/zope"
-    xmlns:grok="http://namespaces.zope.org/grok">
-  <include package="grokcore.component" file="meta.zcml" />
-  <grok:grok package=".meta.permission" />
-</configure>

Modified: grokcore.security/trunk/src/grokcore/security/meta.zcml
===================================================================
--- grokcore.security/trunk/src/grokcore/security/meta.zcml	2012-05-02 09:08:54 UTC (rev 125573)
+++ grokcore.security/trunk/src/grokcore/security/meta.zcml	2012-05-02 09:09:38 UTC (rev 125574)
@@ -2,6 +2,5 @@
     xmlns="http://namespaces.zope.org/zope"
     xmlns:grok="http://namespaces.zope.org/grok">
   <include package="grokcore.component" file="meta.zcml" />
-  <grok:grok package=".meta.permission" />
-  <grok:grok package=".meta.role" />
+  <grok:grok package=".meta" />
 </configure>



More information about the checkins mailing list