[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