[Checkins] SVN: grok/branches/grokcore.xxx/ move some 'security' tests from grok to grokcore.view

Godefroid Chapelle gotcha at bubblenet.be
Fri Jul 18 09:27:26 EDT 2008


Log message for revision 88503:
  move some 'security' tests from grok to grokcore.view

Changed:
  U   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/meta.py
  U   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/grok.py
  A   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/
  A   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/__init__.py
  A   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/missing_permission.py
  A   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/missing_permission_name.py
  A   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/multiple_require.py
  A   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/not_a_permissionclass.py
  A   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/view_decorator.py
  U   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/test_all.py
  U   grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/util.py
  U   grok/branches/grokcore.xxx/src/grok/meta.py
  D   grok/branches/grokcore.xxx/src/grok/tests/security/missing_permission.py
  D   grok/branches/grokcore.xxx/src/grok/tests/security/missing_permission_name.py
  D   grok/branches/grokcore.xxx/src/grok/tests/security/multiple_require.py
  D   grok/branches/grokcore.xxx/src/grok/tests/security/not_a_permissionclass.py
  D   grok/branches/grokcore.xxx/src/grok/tests/security/view_decorator.py

-=-
Modified: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/meta.py
===================================================================
--- grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/meta.py	2008-07-18 13:22:14 UTC (rev 88502)
+++ grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/meta.py	2008-07-18 13:27:25 UTC (rev 88503)
@@ -2,6 +2,7 @@
 
 from zope import component, interface
 from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+from zope.security.interfaces import IPermission
 
 import martian
 from martian import util
@@ -13,6 +14,7 @@
 from grokcore.view import formlib
 from grokcore.view import templatereg
 from grokcore.view.util import default_view_name
+from grokcore.view.util import default_fallback_to_name
 
 
 class ViewGrokkerBase(martian.ClassGrokker):
@@ -88,6 +90,32 @@
         raise NotImplementedError
 
 
+class PermissionGrokker(martian.ClassGrokker):
+    martian.component(grokcore.view.Permission)
+    martian.priority(1500)
+    martian.directive(grokcore.component.name)
+    martian.directive(grokcore.component.title,
+        get_default=default_fallback_to_name)
+    martian.directive(grokcore.component.description)
+
+    def execute(self, factory, config, name, title, description, **kw):
+        if not name:
+            raise GrokError(
+                "A permission 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 make sure
+        # it is either unicode already or ASCII.
+        permission = factory(unicode(name), unicode(title),
+                             unicode(description))
+
+        config.action(
+            discriminator=('utility', IPermission, name),
+            callable=component.provideUtility,
+            args=(permission, IPermission, name),
+            order=-1) # need to do this early in the process
+        return True
+
+
 class TemplateGrokker(martian.GlobalGrokker):
     # this needs to happen before any other grokkers execute that use
     # the template registry

Modified: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/grok.py
===================================================================
--- grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/grok.py	2008-07-18 13:22:14 UTC (rev 88502)
+++ grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/grok.py	2008-07-18 13:27:25 UTC (rev 88503)
@@ -1,3 +1,3 @@
 from grokcore.view.tests.components import Model, View
 from grokcore.view import testing
-from grokcore.component import name
+from grokcore.component import name, context

Added: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/__init__.py
===================================================================

Copied: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/missing_permission.py (from rev 88477, grok/branches/grokcore.xxx/src/grok/tests/security/missing_permission.py)
===================================================================
--- grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/missing_permission.py	                        (rev 0)
+++ grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/missing_permission.py	2008-07-18 13:27:25 UTC (rev 88503)
@@ -0,0 +1,23 @@
+"""
+A permission has to be defined first (using grok.Permission for example)
+before it can be used in grok.require().
+
+    >>> grok.testing.grok(__name__)
+    Traceback (most recent call last):
+    ...
+    ConfigurationExecutionError: martian.error.GrokError: Undefined permission 'doesnt.exist' in <class 'grokcore.view.tests.security.missing_permission.MissingPermission'>. Use grok.Permission first.
+    ...
+
+"""
+import zope.interface
+
+from grokcore.view.tests import grok
+import grokcore.view
+
+
+class MissingPermission(grok.View):
+    grok.context(zope.interface.Interface)
+    grokcore.view.require('doesnt.exist')
+
+    def render(self):
+        pass


Property changes on: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/missing_permission.py
___________________________________________________________________
Name: svn:mergeinfo
   + 
Name: svn:eol-style
   + native

Copied: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/missing_permission_name.py (from rev 88477, grok/branches/grokcore.xxx/src/grok/tests/security/missing_permission_name.py)
===================================================================
--- grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/missing_permission_name.py	                        (rev 0)
+++ grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/missing_permission_name.py	2008-07-18 13:27:25 UTC (rev 88503)
@@ -0,0 +1,14 @@
+"""
+A role has to have a name to be defined.
+
+  >>> grok.testing.grok(__name__)
+  Traceback (most recent call last):
+  ...
+  GrokError: A permission needs to have a dotted name for its id.
+  Use grok.name to specify one.
+"""
+from grokcore.view.tests import grok
+import grokcore.view
+
+class MissingName(grokcore.view.Permission):
+    pass


Property changes on: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/missing_permission_name.py
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/multiple_require.py (from rev 88477, grok/branches/grokcore.xxx/src/grok/tests/security/multiple_require.py)
===================================================================
--- grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/multiple_require.py	                        (rev 0)
+++ grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/multiple_require.py	2008-07-18 13:27:25 UTC (rev 88503)
@@ -0,0 +1,30 @@
+"""
+Multiple calls of grok.require in one class are not allowed.
+
+  >>> grok.testing.grok(__name__)
+  Traceback (most recent call last):
+    ...
+  GrokError: grok.require was called multiple times in <class 'grokcore.view.tests.security.multiple_require.MultipleView'>. It may only be set once for a class.
+
+"""
+import zope.interface
+
+from grokcore.view.tests import grok
+import grokcore.view
+
+
+class One(grokcore.view.Permission):
+    grok.name('permission.1')
+
+
+class Two(grokcore.view.Permission):
+    grok.name('permission.2')
+
+
+class MultipleView(grok.View):
+    grok.context(zope.interface.Interface)
+    grokcore.view.require(One)
+    grokcore.view.require(Two)
+
+    def render(self):
+        pass


Property changes on: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/multiple_require.py
___________________________________________________________________
Name: svn:mergeinfo
   + 
Name: svn:eol-style
   + native

Copied: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/not_a_permissionclass.py (from rev 88477, grok/branches/grokcore.xxx/src/grok/tests/security/not_a_permissionclass.py)
===================================================================
--- grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/not_a_permissionclass.py	                        (rev 0)
+++ grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/not_a_permissionclass.py	2008-07-18 13:27:25 UTC (rev 88503)
@@ -0,0 +1,22 @@
+"""
+When refering to a class in the grok.require() directive, this class needs
+to implement the zope.security.interfaces.IPermission interface::
+
+  >>> from zope.interface import Interface
+  >>> class NotAProperPermission(object):
+  ...   pass
+  >>>
+  >>> class NoPermission(grok.View):
+  ...     grok.context(Interface)
+  ...     grokcore.view.require(NotAProperPermission)
+  ...
+  ...     def render(self):
+  ...         pass
+  Traceback (most recent call last):
+  ...
+  GrokImportError: You can only pass unicode, ASCII, or a subclass of
+  grok.Permission to the 'require' directive.
+
+"""
+from grokcore.view.tests import grok
+import grokcore.view


Property changes on: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/not_a_permissionclass.py
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/view_decorator.py (from rev 88477, grok/branches/grokcore.xxx/src/grok/tests/security/view_decorator.py)
===================================================================
--- grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/view_decorator.py	                        (rev 0)
+++ grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/view_decorator.py	2008-07-18 13:27:25 UTC (rev 88503)
@@ -0,0 +1,25 @@
+"""
+Using the @grok.require decorator in a view class is not allowed.
+
+  >>> grok.testing.grok(__name__)
+  Traceback (most recent call last):
+  GrokError: The @grok.require decorator is used for method 'render' in view <class 'grokcore.view.tests.security.view_decorator.BogusView'>. It may only be used for XML-RPC methods.
+
+
+"""
+import zope.interface
+
+from grokcore.view.tests import grok
+import grokcore.view
+
+
+class Bogus(grokcore.view.Permission):
+    grok.name('bogus.perm')
+
+
+class BogusView(grok.View):
+    grok.context(zope.interface.Interface)
+
+    @grokcore.view.require(Bogus)
+    def render(self):
+        pass


Property changes on: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/security/view_decorator.py
___________________________________________________________________
Name: svn:mergeinfo
   + 
Name: svn:eol-style
   + native

Modified: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/test_all.py
===================================================================
--- grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/test_all.py	2008-07-18 13:22:14 UTC (rev 88502)
+++ grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/tests/test_all.py	2008-07-18 13:27:25 UTC (rev 88503)
@@ -51,7 +51,7 @@
 
 def test_suite():
     suite = unittest.TestSuite()
-    for name in ['template', 'static', 'view']:
+    for name in ['template', 'static', 'view', 'security']:
         suite.addTest(suiteFromPackage(name))
     return suite
 

Modified: grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/util.py
===================================================================
--- grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/util.py	2008-07-18 13:22:14 UTC (rev 88502)
+++ grok/branches/grokcore.xxx/devel/grokcore.view/src/grokcore/view/util.py	2008-07-18 13:27:25 UTC (rev 88503)
@@ -22,3 +22,7 @@
 
 def default_view_name(factory, module=None, **data):
     return factory.__name__.lower()
+
+
+def default_fallback_to_name(factory, module, name, **data):
+    return name

Modified: grok/branches/grokcore.xxx/src/grok/meta.py
===================================================================
--- grok/branches/grokcore.xxx/src/grok/meta.py	2008-07-18 13:22:14 UTC (rev 88502)
+++ grok/branches/grokcore.xxx/src/grok/meta.py	2008-07-18 13:27:25 UTC (rev 88503)
@@ -23,7 +23,6 @@
 
 from zope.publisher.interfaces.xmlrpc import IXMLRPCRequest
 from zope.viewlet.interfaces import IViewletManager, IViewlet
-from zope.security.interfaces import IPermission
 from zope.securitypolicy.interfaces import IRole
 from zope.securitypolicy.rolepermission import rolePermissionManager
 
@@ -45,10 +44,6 @@
 from martian.error import GrokError
 from martian import util
 
-import grokcore.view
-from grokcore.view.meta import ViewGrokkerBase
-from grokcore.view.util import default_view_name
-
 import grok
 from grok import components
 from grok.util import make_checker
@@ -57,9 +52,12 @@
 
 from grokcore.component.scan import determine_module_component
 
+import grokcore.view
+from grokcore.view.meta import ViewGrokkerBase
+from grokcore.view.meta import PermissionGrokker
+from grokcore.view.util import default_view_name
+from grokcore.view.util import default_fallback_to_name
 
-def default_fallback_to_name(factory, module, name, **data):
-    return name
 
 def default_annotation_provides(factory, module, **data):
     base_interfaces = interface.implementedBy(grok.Annotation)
@@ -283,32 +281,6 @@
                                  name=name)
 
 
-class PermissionGrokker(martian.ClassGrokker):
-    martian.component(grok.Permission)
-    martian.priority(1500)
-    martian.directive(grok.name)
-    martian.directive(grok.title, get_default=default_fallback_to_name)
-    martian.directive(grok.description)
-
-    def execute(self, factory, config, name, title, description, **kw):
-        if not name:
-            raise GrokError(
-                "A permission 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 make sure
-        # it is either unicode already or ASCII.
-        permission = factory(unicode(name), unicode(title),
-                             unicode(description))
-
-        config.action(
-            discriminator=('utility', IPermission, name),
-            callable=component.provideUtility,
-            args=(permission, IPermission, name),
-            order=-1 # need to do this early in the process
-            )
-        return True
-
-
 class RoleGrokker(martian.ClassGrokker):
     martian.component(grok.Role)
     martian.priority(martian.priority.bind().get(PermissionGrokker()) - 1)

Deleted: grok/branches/grokcore.xxx/src/grok/tests/security/missing_permission.py
===================================================================
--- grok/branches/grokcore.xxx/src/grok/tests/security/missing_permission.py	2008-07-18 13:22:14 UTC (rev 88502)
+++ grok/branches/grokcore.xxx/src/grok/tests/security/missing_permission.py	2008-07-18 13:27:25 UTC (rev 88503)
@@ -1,22 +0,0 @@
-"""
-A permission has to be defined first (using grok.Permission for example)
-before it can be used in grok.require().
-
-    >>> grok.testing.grok(__name__)
-    Traceback (most recent call last):
-    ...
-    ConfigurationExecutionError: martian.error.GrokError: Undefined permission 'doesnt.exist' in <class 'grok.tests.security.missing_permission.MissingPermission'>. Use grok.Permission first.
-    ...
-
-"""
-
-import grok
-import zope.interface
-
-class MissingPermission(grok.View):
-    grok.context(zope.interface.Interface)
-    grok.require('doesnt.exist')
-
-    def render(self):
-        pass
-

Deleted: grok/branches/grokcore.xxx/src/grok/tests/security/missing_permission_name.py
===================================================================
--- grok/branches/grokcore.xxx/src/grok/tests/security/missing_permission_name.py	2008-07-18 13:22:14 UTC (rev 88502)
+++ grok/branches/grokcore.xxx/src/grok/tests/security/missing_permission_name.py	2008-07-18 13:27:25 UTC (rev 88503)
@@ -1,15 +0,0 @@
-"""
-A role has to have a name to be defined.
-
-  >>> grok.testing.grok(__name__)
-  Traceback (most recent call last):
-  ...
-  GrokError: A permission needs to have a dotted name for its id.
-  Use grok.name to specify one.
-"""
-
-import grok
-import zope.interface
-
-class MissingName(grok.Permission):
-    pass

Deleted: grok/branches/grokcore.xxx/src/grok/tests/security/multiple_require.py
===================================================================
--- grok/branches/grokcore.xxx/src/grok/tests/security/multiple_require.py	2008-07-18 13:22:14 UTC (rev 88502)
+++ grok/branches/grokcore.xxx/src/grok/tests/security/multiple_require.py	2008-07-18 13:27:25 UTC (rev 88503)
@@ -1,25 +0,0 @@
-"""
-Multiple calls of grok.require in one class are not allowed.
-
-  >>> grok.testing.grok(__name__)
-  Traceback (most recent call last):
-    ...
-  GrokError: grok.require was called multiple times in <class 'grok.tests.security.multiple_require.MultipleView'>. It may only be set once for a class.
-
-"""
-import grok
-import zope.interface
-
-class One(grok.Permission):
-    grok.name('permission.1')
-
-class Two(grok.Permission):
-    grok.name('permission.2')
-
-class MultipleView(grok.View):
-    grok.context(zope.interface.Interface)
-    grok.require(One)
-    grok.require(Two)
-
-    def render(self):
-        pass

Deleted: grok/branches/grokcore.xxx/src/grok/tests/security/not_a_permissionclass.py
===================================================================
--- grok/branches/grokcore.xxx/src/grok/tests/security/not_a_permissionclass.py	2008-07-18 13:22:14 UTC (rev 88502)
+++ grok/branches/grokcore.xxx/src/grok/tests/security/not_a_permissionclass.py	2008-07-18 13:27:25 UTC (rev 88503)
@@ -1,23 +0,0 @@
-"""
-When refering to a class in the grok.require() directive, this class needs
-to implement the zope.security.interfaces.IPermission interface::
-
-  >>> from zope.interface import Interface
-  >>> class NotAProperPermission(object):
-  ...   pass
-  >>>
-  >>> class NoPermission(grok.View):
-  ...     grok.context(zope.interface.Interface)
-  ...     grok.require(NotAProperPermission)
-  ...
-  ...     def render(self):
-  ...         pass
-  Traceback (most recent call last):
-  ...
-  GrokImportError: You can only pass unicode, ASCII, or a subclass of
-  grok.Permission to the 'require' directive.
-
-"""
-
-import grok
-import zope.interface

Deleted: grok/branches/grokcore.xxx/src/grok/tests/security/view_decorator.py
===================================================================
--- grok/branches/grokcore.xxx/src/grok/tests/security/view_decorator.py	2008-07-18 13:22:14 UTC (rev 88502)
+++ grok/branches/grokcore.xxx/src/grok/tests/security/view_decorator.py	2008-07-18 13:27:25 UTC (rev 88503)
@@ -1,22 +0,0 @@
-"""
-Using the @grok.require decorator in a view class is not allowed.
-
-  >>> grok.testing.grok(__name__)
-  Traceback (most recent call last):
-  GrokError: The @grok.require decorator is used for method 'render' in view <class 'grok.tests.security.view_decorator.BogusView'>. It may only be used for XML-RPC methods.
-
-
-"""
-
-import grok
-import zope.interface
-
-class Bogus(grok.Permission):
-    grok.name('bogus.perm')
-
-class BogusView(grok.View):
-    grok.context(zope.interface.Interface)
-
-    @grok.require(Bogus)
-    def render(self):
-        pass



More information about the Checkins mailing list