[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