[Checkins] SVN: grokcore.view/trunk/ Backported the changes from branch 1.13 to 2.0 related to the resource directory registration.

Souheil CHELFOUH souheil at chelfouh.com
Wed Jan 20 09:02:38 EST 2010


Log message for revision 108321:
  Backported the changes from branch 1.13 to 2.0 related to the resource directory registration.
  

Changed:
  U   grokcore.view/trunk/CHANGES.txt
  U   grokcore.view/trunk/setup.py
  U   grokcore.view/trunk/src/grokcore/view/components.py
  U   grokcore.view/trunk/src/grokcore/view/ftesting.zcml
  U   grokcore.view/trunk/src/grokcore/view/ftests/url/url.py
  U   grokcore.view/trunk/src/grokcore/view/ftests/url/url_function.py
  U   grokcore.view/trunk/src/grokcore/view/tests/view/inline.py

-=-
Modified: grokcore.view/trunk/CHANGES.txt
===================================================================
--- grokcore.view/trunk/CHANGES.txt	2010-01-20 14:00:44 UTC (rev 108320)
+++ grokcore.view/trunk/CHANGES.txt	2010-01-20 14:02:38 UTC (rev 108321)
@@ -4,6 +4,9 @@
 2.0 (unreleased)
 ----------------
 
+- Back-ported the changes of the 1.13 branch related to the directory
+  resource registration, using the latest ztk packages.
+
 - Factor out generally useful methods and properties for view-ish
   components into components.ViewSupport mixin.
 

Modified: grokcore.view/trunk/setup.py
===================================================================
--- grokcore.view/trunk/setup.py	2010-01-20 14:00:44 UTC (rev 108320)
+++ grokcore.view/trunk/setup.py	2010-01-20 14:02:38 UTC (rev 108321)
@@ -15,27 +15,26 @@
     'grokcore.component >= 2.0',
     'grokcore.security >= 1.3',
     'martian >= 0.12',
-    'zope.app.pagetemplate',
-    'zope.app.publisher >= 3.5',
+    'zope.browserresource >= 3.9.0',
     'zope.component',
     'zope.interface',
     'zope.pagetemplate',
+    'zope.ptresource >= 3.9.0',
     'zope.publisher',
+    'zope.schema',
     'zope.security',
     'zope.traversing',
     ]
 
 tests_require = [
     'zope.app.authentication',
-    'zope.app.basicskin',
-    'zope.app.container',
-    'zope.app.rotterdam',
-    'zope.app.testing',
     'zope.app.zcmlfiles',
-    'zope.configuration',
+    'zope.container',
     'zope.securitypolicy',
+    'zope.site',
     'zope.testbrowser',
     'zope.testing',
+    'zope.login',
     ]
 
 setup(

Modified: grokcore.view/trunk/src/grokcore/view/components.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/components.py	2010-01-20 14:00:44 UTC (rev 108320)
+++ grokcore.view/trunk/src/grokcore/view/components.py	2010-01-20 14:02:38 UTC (rev 108321)
@@ -16,16 +16,19 @@
 import sys
 import os
 import warnings
+import fnmatch
 
 from zope import component
 from zope import interface
+from zope.browserresource import directory
+from zope.browserresource.file import FileResourceFactory
+from zope.browserresource.interfaces import IResourceFactoryFactory
+from zope.pagetemplate import pagetemplate, pagetemplatefile
+from zope.pagetemplate.engine import TrustedAppPT
+from zope.ptresource.ptresource import PageTemplateResourceFactory 
 from zope.publisher.browser import BrowserPage
+from zope.publisher.interfaces import NotFound
 from zope.publisher.publish import mapply
-from zope.pagetemplate import pagetemplate, pagetemplatefile
-from zope.app.pagetemplate.engine import TrustedAppPT
-from zope.app.publisher.browser import directoryresource
-from zope.app.publisher.browser.pagetemplateresource import \
-    PageTemplateResourceFactory
 
 import martian.util
 from grokcore.view import interfaces, util
@@ -241,6 +244,7 @@
         namespace.update(template.pt_getContext())
         return template.pt_render(namespace)
 
+
 class PageTemplateFile(PageTemplate):
     # For BBB
     def __init__(self, filename, _prefix=None):
@@ -251,22 +255,46 @@
         self.setFromFilename(filename, _prefix)
 
 
-class DirectoryResource(directoryresource.DirectoryResource):
-    # We subclass this, because we want to override factories for
-    # .pt and .html file types, not creating pagetemplate resources.
-    resource_factories = {}
-    for type, factory in (directoryresource.DirectoryResource.
-                          resource_factories.items()):
-        if factory is PageTemplateResourceFactory:
-            continue
-        resource_factories[type] = factory
+_marker = object()
 
-    # Hook for our own DirectoryResourceFactory. Can only be set *after*
-    # having defined the DirectoryResourceFactory class.
-    directory_factory = None
+class DirectoryResource(directory.DirectoryResource):
+    forbidden_names = ('.svn', )
+    
+    def get(self, name, default=_marker):
 
+        for pat in self.forbidden_names:
+            if fnmatch.fnmatch(name, pat):
+                if default is _marker:
+                    raise NotFound(None, name)
+                else:
+                    return default
+        
+        path = self.context.path
+        filename = os.path.join(path, name)
+        isfile = os.path.isfile(filename)
+        isdir = os.path.isdir(filename)
 
-class DirectoryResourceFactory(directoryresource.DirectoryResourceFactory):
+        if not (isfile or isdir):
+            if default is _marker:
+                raise NotFound(None, name)
+            return default
+
+        if isfile:
+            ext = os.path.splitext(os.path.normcase(name))[1][1:]
+            factory = component.queryUtility(IResourceFactoryFactory, ext,
+                                             self.default_factory)
+            if factory is PageTemplateResourceFactory:
+                factory = self.default_factory
+        else:
+            factory = self.directory_factory
+
+        rname = self.__name__ + '/' + name
+        resource = factory(filename, self.context.checker, rname)(self.request)
+        resource.__parent__ = self
+        return resource
+
+
+class DirectoryResourceFactory(directory.DirectoryResourceFactory):
     # We need this to allow hooking up our own DirectoryResource class.
     factoryClass = DirectoryResource
 

Modified: grokcore.view/trunk/src/grokcore/view/ftesting.zcml
===================================================================
--- grokcore.view/trunk/src/grokcore/view/ftesting.zcml	2010-01-20 14:00:44 UTC (rev 108320)
+++ grokcore.view/trunk/src/grokcore/view/ftesting.zcml	2010-01-20 14:02:38 UTC (rev 108321)
@@ -13,6 +13,7 @@
   <include package="zope.app.zcmlfiles" />
   <include package="zope.app.authentication" />
   <include package="grokcore.view" />
+  <include package="zope.login" />
   <grok:grok package="grokcore.view.ftests" />
 
   <securityPolicy

Modified: grokcore.view/trunk/src/grokcore/view/ftests/url/url.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/ftests/url/url.py	2010-01-20 14:00:44 UTC (rev 108320)
+++ grokcore.view/trunk/src/grokcore/view/ftests/url/url.py	2010-01-20 14:02:38 UTC (rev 108321)
@@ -2,7 +2,7 @@
 """
 Views have a method that can be used to construct URLs:
 
-  >>> from zope.app.folder import Folder
+  >>> from zope.site.folder import Folder
   >>> herd = Folder()
   >>> getRootFolder()['herd'] = herd
   >>> manfred = Mammoth()
@@ -173,7 +173,7 @@
 
 """
 import grokcore.view as grok
-from zope.app.container.contained import Contained
+from zope.container.contained import Contained
 
 class Mammoth(Contained):
     pass

Modified: grokcore.view/trunk/src/grokcore/view/ftests/url/url_function.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/ftests/url/url_function.py	2010-01-20 14:00:44 UTC (rev 108320)
+++ grokcore.view/trunk/src/grokcore/view/ftests/url/url_function.py	2010-01-20 14:02:38 UTC (rev 108321)
@@ -5,7 +5,7 @@
 
   >>> from grokcore.view import url
 
-  >>> from zope.app.folder import Folder
+  >>> from zope.site.folder import Folder
   >>> herd = Folder()
   >>> getRootFolder()['herd'] = herd
   >>> manfred = Mammoth()
@@ -99,7 +99,7 @@
 """
 import grokcore.view as grok
 from grokcore.view import url
-from zope.app.container.contained import Contained
+from zope.container.contained import Contained
 
 class Mammoth(Contained):
     pass

Modified: grokcore.view/trunk/src/grokcore/view/tests/view/inline.py
===================================================================
--- grokcore.view/trunk/src/grokcore/view/tests/view/inline.py	2010-01-20 14:00:44 UTC (rev 108320)
+++ grokcore.view/trunk/src/grokcore/view/tests/view/inline.py	2010-01-20 14:02:38 UTC (rev 108321)
@@ -17,7 +17,7 @@
     <li><zope.publisher.browser.TestRequest instance URL=http://127.0.0.1></li>
     <li><grokcore.view.tests.view.inline.CavePainting object at 0x...></li>
     <li><grokcore.view.tests.view.inline.Mammoth object at 0x...></li>
-    <li><zope.app.pagetemplate.engine.TraversableModuleImporter object at 0x...></li>
+    <li><zope.pagetemplate.engine.TraversableModuleImporter object at 0x...></li>
   </ul>
   </body>
   </html>



More information about the checkins mailing list