[Checkins] SVN: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/ Make the DirectoryResouce component available. Test for
Jan-Wijbrand Kolman
janwijbrand at gmail.com
Thu Oct 9 15:54:39 EDT 2008
Log message for revision 91942:
Make the DirectoryResouce component available. Test for
directoryresource's directory not being a python package and for not
having a python module by the same name as the directoryresource's
directory name. Analogous to the default "static" resource directory.
Changed:
U grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/__init__.py
U grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/components.py
U grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/directive.py
A grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/meta/directoryresource.py
D grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/meta/static.py
A grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/
A grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/__init__.py
A grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy.py
A grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/
A grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/__init__.py
A grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/foo/
A grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/foo/empty.pt
A grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/foo.py
A grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/resource.py
A grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage.py
A grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage_fixture/
A grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage_fixture/__init__.py
A grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage_fixture/foo/
A grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage_fixture/foo/__init__.py
A grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage_fixture/resource.py
U grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/test_all.py
-=-
Modified: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/__init__.py
===================================================================
--- grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/__init__.py 2008-10-09 19:39:44 UTC (rev 91941)
+++ grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/__init__.py 2008-10-09 19:54:38 UTC (rev 91942)
@@ -21,7 +21,8 @@
from grokcore.view.components import View
from grokcore.view.components import PageTemplate, PageTemplateFile
-from grokcore.view.directive import layer, template, templatedir, skin
+from grokcore.view.components import DirectoryResource
+from grokcore.view.directive import layer, template, templatedir, skin, path
from grokcore.view.util import url
# Import this module so that it's available as soon as you import the
Modified: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/components.py
===================================================================
--- grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/components.py 2008-10-09 19:39:44 UTC (rev 91941)
+++ grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/components.py 2008-10-09 19:54:38 UTC (rev 91942)
@@ -239,7 +239,6 @@
continue
resource_factories[type] = factory
-
class DirectoryResourceFactory(directoryresource.DirectoryResourceFactory):
# We need this to allow hooking up our own GrokDirectoryResource
# and to set the checker to None (until we have our own checker)
Modified: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/directive.py
===================================================================
--- grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/directive.py 2008-10-09 19:39:44 UTC (rev 91941)
+++ grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/directive.py 2008-10-09 19:54:38 UTC (rev 91942)
@@ -67,3 +67,8 @@
scope = martian.CLASS
store = TaggedValueStoreOnce()
validate = martian.validateText
+
+class path(martian.Directive):
+ scope = martian.CLASS
+ store = martian.ONCE
+ validate = martian.validateText
Copied: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/meta/directoryresource.py (from rev 91936, grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/meta/static.py)
===================================================================
--- grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/meta/directoryresource.py (rev 0)
+++ grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/meta/directoryresource.py 2008-10-09 19:54:38 UTC (rev 91942)
@@ -0,0 +1,93 @@
+#############################################################################
+#
+# Copyright (c) 2006-2007 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Grokkers for the static resource directory."""
+
+import os
+
+from zope import interface, component
+from zope.security.checker import NamesChecker
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+
+import martian
+from martian.error import GrokError
+
+import grokcore.view
+from grokcore.view import components
+
+allowed_resource_names = (
+ 'GET', 'HEAD', 'publishTraverse', 'browserDefault', 'request', '__call__')
+
+allowed_resourcedir_names = allowed_resource_names + ('__getitem__', 'get')
+
+def _get_resource_path(module_info, path):
+ resource_path = module_info.getResourcePath(path)
+ if os.path.isdir(resource_path):
+ static_module = module_info.getSubModuleInfo(path)
+ if static_module is not None:
+ if static_module.isPackage():
+ raise GrokError(
+ "The '%s' resource directory must not "
+ "be a python package." % path, module_info.getModule())
+ else:
+ raise GrokError(
+ "A package can not contain both a '%s' "
+ "resource directory and a module named "
+ "'%s.py'" % (path, path), module_info.getModule())
+ return resource_path
+
+def _register(config, resource_path, name, layer):
+ # public checker by default
+ checker = NamesChecker(allowed_resourcedir_names)
+ resource_factory = components.DirectoryResourceFactory(
+ resource_path, checker, name)
+
+ adapts = (layer,)
+ provides = interface.Interface
+ config.action(
+ discriminator=('adapter', adapts, provides, name),
+ callable=component.provideAdapter,
+ args=(resource_factory, adapts, provides, name),
+ )
+ return True
+
+class DirectoryResourceGrokker(martian.ClassGrokker):
+ martian.component(components.DirectoryResource)
+
+ martian.directive(grokcore.view.name, default=None)
+ martian.directive(grokcore.view.path)
+ martian.directive(grokcore.view.layer, default=IDefaultBrowserLayer)
+
+ def grok(self, name, factory, module_info, **kw):
+ # Need to store the module info object on the directory resource
+ # class so that it can look up the actual directory.
+ factory.module_info = module_info
+ return super(DirectoryResourceGrokker, self).grok(
+ name, factory, module_info, **kw)
+
+ def execute(self, factory, config, name, path, layer, **kw):
+ resource_path = _get_resource_path(factory.module_info, path)
+ name = name or module_info.dotted_name
+ return _register(config, resource_path, name, layer)
+
+class StaticResourcesGrokker(martian.GlobalGrokker):
+
+ def grok(self, name, module, module_info, config, **kw):
+ # we're only interested in static resources if this module
+ # happens to be a package
+ if not module_info.isPackage():
+ return False
+ resource_path = _get_resource_path(module_info, 'static')
+ name = module_info.dotted_name
+ layer = IDefaultBrowserLayer
+ return _register(config, resource_path, name, layer)
Property changes on: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/meta/directoryresource.py
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:mergeinfo
+
Deleted: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/meta/static.py
===================================================================
--- grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/meta/static.py 2008-10-09 19:39:44 UTC (rev 91941)
+++ grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/meta/static.py 2008-10-09 19:54:38 UTC (rev 91942)
@@ -1,69 +0,0 @@
-#############################################################################
-#
-# Copyright (c) 2006-2007 Zope Corporation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-##############################################################################
-"""Grokkers for the static resource directory."""
-
-import os
-
-from zope import interface, component
-from zope.security.checker import NamesChecker
-from zope.publisher.interfaces.browser import IDefaultBrowserLayer
-
-import martian
-from martian.error import GrokError
-
-from grokcore.view import components
-
-allowed_resource_names = ('GET', 'HEAD', 'publishTraverse', 'browserDefault',
- 'request', '__call__')
-allowed_resourcedir_names = allowed_resource_names + ('__getitem__', 'get')
-
-class StaticResourcesGrokker(martian.GlobalGrokker):
-
- def grok(self, name, module, module_info, config, **kw):
- # we're only interested in static resources if this module
- # happens to be a package
- if not module_info.isPackage():
- return False
-
- resource_path = module_info.getResourcePath('static')
- if os.path.isdir(resource_path):
- static_module = module_info.getSubModuleInfo('static')
- if static_module is not None:
- if static_module.isPackage():
- raise GrokError(
- "The 'static' resource directory must not "
- "be a python package.",
- module_info.getModule())
- else:
- raise GrokError(
- "A package can not contain both a 'static' "
- "resource directory and a module named "
- "'static.py'", module_info.getModule())
-
- # public checker by default
- checker = NamesChecker(allowed_resourcedir_names)
-
- resource_factory = components.DirectoryResourceFactory(
- resource_path, checker, module_info.dotted_name)
- adapts = (IDefaultBrowserLayer,)
- provides = interface.Interface
- name = module_info.dotted_name
- config.action(
- discriminator=('adapter', adapts, provides, name),
- callable=component.provideAdapter,
- args=(resource_factory, adapts, provides, name),
- )
- return True
-
-
Added: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/__init__.py
===================================================================
--- grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/__init__.py (rev 0)
+++ grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/__init__.py 2008-10-09 19:54:38 UTC (rev 91942)
@@ -0,0 +1 @@
+# this is a package
Added: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy.py
===================================================================
--- grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy.py (rev 0)
+++ grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy.py 2008-10-09 19:54:38 UTC (rev 91942)
@@ -0,0 +1,12 @@
+"""
+When a directory resource is declared, it is not allowed to have a python
+module by the same name::
+
+ >>> import grokcore.view as grok
+ >>> grok.testing.grok(
+ ... 'grokcore.view.tests.directoryresource.directoryhaspy_fixture')
+ Traceback (most recent call last):
+ ...
+ GrokError: A package can not contain both a 'foo' resource directory
+ and a module named 'foo.py'
+"""
Added: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/__init__.py
===================================================================
--- grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/__init__.py (rev 0)
+++ grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/__init__.py 2008-10-09 19:54:38 UTC (rev 91942)
@@ -0,0 +1 @@
+# this is a package
Added: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/foo/empty.pt
===================================================================
--- grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/foo/empty.pt (rev 0)
+++ grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/foo/empty.pt 2008-10-09 19:54:38 UTC (rev 91942)
@@ -0,0 +1,3 @@
+This empty page template file is just here to make sure that the
+static dir has some contents. This is needed to make that directory
+end up in the tar ball and egg.
Added: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/foo.py
===================================================================
--- grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/foo.py (rev 0)
+++ grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/foo.py 2008-10-09 19:54:38 UTC (rev 91942)
@@ -0,0 +1 @@
+# A python module with the same name as a directory resource is not allowed.
Added: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/resource.py
===================================================================
--- grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/resource.py (rev 0)
+++ grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryhaspy_fixture/resource.py 2008-10-09 19:54:38 UTC (rev 91942)
@@ -0,0 +1,4 @@
+import grokcore.view
+
+class DirectoryResourceFoo(grokcore.view.DirectoryResource):
+ grokcore.view.path('foo')
Added: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage.py
===================================================================
--- grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage.py (rev 0)
+++ grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage.py 2008-10-09 19:54:38 UTC (rev 91942)
@@ -0,0 +1,11 @@
+"""
+When a directory resource is declared, it is not allowed for it to be a
+python package::
+
+ >>> import grokcore.view as grok
+ >>> grok.testing.grok(
+ ... 'grokcore.view.tests.directoryresource.directoryispackage_fixture')
+ Traceback (most recent call last):
+ ...
+ GrokError: The 'foo' resource directory must not be a python package.
+"""
Added: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage_fixture/__init__.py
===================================================================
--- grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage_fixture/__init__.py (rev 0)
+++ grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage_fixture/__init__.py 2008-10-09 19:54:38 UTC (rev 91942)
@@ -0,0 +1 @@
+# this is a package
Added: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage_fixture/foo/__init__.py
===================================================================
--- grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage_fixture/foo/__init__.py (rev 0)
+++ grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage_fixture/foo/__init__.py 2008-10-09 19:54:38 UTC (rev 91942)
@@ -0,0 +1 @@
+# this is a package
Added: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage_fixture/resource.py
===================================================================
--- grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage_fixture/resource.py (rev 0)
+++ grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/directoryresource/directoryispackage_fixture/resource.py 2008-10-09 19:54:38 UTC (rev 91942)
@@ -0,0 +1,4 @@
+import grokcore.view
+
+class DirectoryResourceFoo(grokcore.view.DirectoryResource):
+ grokcore.view.path('foo')
Modified: grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/test_all.py
===================================================================
--- grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/test_all.py 2008-10-09 19:39:44 UTC (rev 91941)
+++ grokcore.view/branches/jw-generic_directory_resource/src/grokcore/view/tests/test_all.py 2008-10-09 19:54:38 UTC (rev 91942)
@@ -42,6 +42,6 @@
def test_suite():
suite = unittest.TestSuite()
- for name in ['view', 'static', 'skin', 'template']:
+ for name in ['view', 'static', 'skin', 'template', 'directoryresource']:
suite.addTest(suiteFromPackage(name))
return suite
More information about the Checkins
mailing list