[Checkins] SVN: grokcore.view/branches/trolld2m-ztk-compat/ Fixed the code of the directoryresource using the ztk1.0 zope.browserresource

Souheil CHELFOUH souheil at chelfouh.com
Mon Nov 9 14:02:39 EST 2009


Log message for revision 105541:
  Fixed the code of the directoryresource using the ztk1.0 zope.browserresource
  

Changed:
  U   grokcore.view/branches/trolld2m-ztk-compat/buildout.cfg
  U   grokcore.view/branches/trolld2m-ztk-compat/src/grokcore/view/components.py
  U   grokcore.view/branches/trolld2m-ztk-compat/src/grokcore/view/meta/directoryresource.py
  U   grokcore.view/branches/trolld2m-ztk-compat/src/grokcore/view/tests/view/inline.py

-=-
Modified: grokcore.view/branches/trolld2m-ztk-compat/buildout.cfg
===================================================================
--- grokcore.view/branches/trolld2m-ztk-compat/buildout.cfg	2009-11-09 17:58:41 UTC (rev 105540)
+++ grokcore.view/branches/trolld2m-ztk-compat/buildout.cfg	2009-11-09 19:02:39 UTC (rev 105541)
@@ -1,14 +1,25 @@
 [buildout]
 develop = .
-extends = http://grok.zope.org/releaseinfo/grok-1.0b1.cfg
+extends = http://svn.zope.org/*checkout*/zopetoolkit/trunk/ztk.cfg?rev=105404
+
 parts =
     interpreter
     test
 versions = versions
 extensions = buildout.dumppickedversions
+allow-picked-versions = true
+extensions = buildout.dumppickedversions
 
-
 [versions]
+grokcore.annotation = 1.1
+grokcore.component = 1.7
+grokcore.formlib = 1.4
+grokcore.security = 1.2
+grokcore.site = 1.1
+grokcore.startup = 0.4
+grokcore.viewlet = 1.3
+grokui.admin = 0.3.2
+martian = 0.11.1
 grokcore.view = 
 martian = 0.12
 grokcore.component = 2.0

Modified: grokcore.view/branches/trolld2m-ztk-compat/src/grokcore/view/components.py
===================================================================
--- grokcore.view/branches/trolld2m-ztk-compat/src/grokcore/view/components.py	2009-11-09 17:58:41 UTC (rev 105540)
+++ grokcore.view/branches/trolld2m-ztk-compat/src/grokcore/view/components.py	2009-11-09 19:02:39 UTC (rev 105541)
@@ -16,21 +16,26 @@
 import sys
 import os
 import warnings
+import fnmatch
 
 from zope import component
 from zope import interface
 from zope.publisher.browser import BrowserPage
 from zope.publisher.publish import mapply
+from zope.publisher.interfaces import NotFound
+from zope.browserresource.file import FileResourceFactory
 from zope.pagetemplate import pagetemplate, pagetemplatefile
+from zope.browserresource.interfaces import IResourceFactoryFactory
 from zope.app.pagetemplate.engine import TrustedAppPT
-from zope.app.publisher.browser import directoryresource
-from zope.app.publisher.browser.pagetemplateresource import \
-    PageTemplateResourceFactory
+from zope.browserresource import directory
+from zope.ptresource.ptresource import PageTemplateResourceFactory 
 
 import martian.util
 from grokcore.view import interfaces, util
 
 
+_marker = object()
+
 class View(BrowserPage):
     interface.implements(interfaces.IGrokView)
 
@@ -248,22 +253,44 @@
         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
+class DirectoryResource(directory.DirectoryResource):
+    forbidden_names = ('.svn', )
+    
+    def get(self, name, default=_marker):
 
-    # Hook for our own DirectoryResourceFactory. Can only be set *after*
-    # having defined the DirectoryResourceFactory class.
-    directory_factory = None
+        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)
 
+        if not (isfile or isdir):
+            if default is _marker:
+                raise NotFound(None, name)
+            return default
 
-class DirectoryResourceFactory(directoryresource.DirectoryResourceFactory):
+        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/branches/trolld2m-ztk-compat/src/grokcore/view/meta/directoryresource.py
===================================================================
--- grokcore.view/branches/trolld2m-ztk-compat/src/grokcore/view/meta/directoryresource.py	2009-11-09 17:58:41 UTC (rev 105540)
+++ grokcore.view/branches/trolld2m-ztk-compat/src/grokcore/view/meta/directoryresource.py	2009-11-09 19:02:39 UTC (rev 105541)
@@ -46,6 +46,7 @@
                     "'%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)
@@ -61,6 +62,7 @@
         )
     return True
 
+
 class DirectoryResourceGrokker(martian.ClassGrokker):
     martian.component(components.DirectoryResource)
 
@@ -80,6 +82,7 @@
         name = name or factory.module_info.dotted_name
         return _register(config, resource_path, name, layer)
 
+
 class StaticResourcesGrokker(martian.GlobalGrokker):
 
     def grok(self, name, module, module_info, config, **kw):

Modified: grokcore.view/branches/trolld2m-ztk-compat/src/grokcore/view/tests/view/inline.py
===================================================================
--- grokcore.view/branches/trolld2m-ztk-compat/src/grokcore/view/tests/view/inline.py	2009-11-09 17:58:41 UTC (rev 105540)
+++ grokcore.view/branches/trolld2m-ztk-compat/src/grokcore/view/tests/view/inline.py	2009-11-09 19:02:39 UTC (rev 105541)
@@ -15,9 +15,9 @@
   <h1>Mammoth Cave Painting</h1>
   <ul>
     <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><grokcore.view.tests.view.inline.CavePainting object at ...></li>
+    <li><grokcore.view.tests.view.inline.Mammoth object at ...></li>
+    <li><zope.pagetemplate.engine.TraversableModuleImporter object at ...></li>
   </ul>
   </body>
   </html>



More information about the checkins mailing list