[Checkins] SVN: hurry.zoperesource/branches/janjaapdriessen-wsgi/src/hurry/zoperesource/zopesupport.py Register a custom DirectoryResource and DirectoryResourceFactory in order to mark resources with a marker interface and render URLs that know about hurry.resource.publisher.

Jan-Jaap Driessen jdriessen at thehealthagency.com
Mon Nov 15 11:43:09 EST 2010


Log message for revision 118410:
  Register a custom DirectoryResource and DirectoryResourceFactory in order to mark resources with a marker interface and render URLs that know about hurry.resource.publisher.

Changed:
  U   hurry.zoperesource/branches/janjaapdriessen-wsgi/src/hurry/zoperesource/zopesupport.py

-=-
Modified: hurry.zoperesource/branches/janjaapdriessen-wsgi/src/hurry/zoperesource/zopesupport.py
===================================================================
--- hurry.zoperesource/branches/janjaapdriessen-wsgi/src/hurry/zoperesource/zopesupport.py	2010-11-15 16:38:10 UTC (rev 118409)
+++ hurry.zoperesource/branches/janjaapdriessen-wsgi/src/hurry/zoperesource/zopesupport.py	2010-11-15 16:43:08 UTC (rev 118410)
@@ -1,13 +1,21 @@
 # zope integration for hurry.resource
+from zope.interface import alsoProvides
+from zope.component import adapts
 import zope.security.management
-from zope.publisher.interfaces import IRequest
-from zope.traversing.browser.absoluteurl import absoluteURL
 from grokcore.component import subscribe
-from zope.publisher.interfaces import IEndRequestEvent
 
+from zope.publisher.interfaces import IEndRequestEvent, IRequest
+from zope.publisher.interfaces.browser import IBrowserRequest
+from zope.traversing.browser.absoluteurl import absoluteURL
+import zope.browserresource.resource
+from zope.browserresource.directory import DirectoryResourceFactory
+from zope.browserresource.directory import DirectoryResource
+
 from hurry.resource import NeededInclusions
 from hurry.resource.wsgi import NEEDED, PUBLISHER_PREFIX
 
+from hurry.zoperesource.interfaces import IHurryResource
+
 class NoRequestError(Exception):
     pass
 
@@ -58,3 +66,32 @@
             needed.base_url = absolute_url + publisher_prefix
         else:
             needed.base_url = absolute_url + '/@@/'
+
+# Adapter for constructing URLs from page templates using
+# `context/++resource++foo` that may point to the hurry.resource publisher.
+class AbsoluteURL(zope.browserresource.resource.AbsoluteURL):
+
+    adapts(IHurryResource, IBrowserRequest)
+
+    def __str__(self):
+        request = self.request
+        url = absoluteURL(None, request)
+        publisher_prefix = request._orig_env.get(PUBLISHER_PREFIX)
+        name = self.context.__name__
+        if publisher_prefix is None:
+            return self._createUrl(url, name)
+        return url + publisher_prefix + '/' + name
+
+
+class HurryDirectoryResource(DirectoryResource):
+
+    def get(self, *args, **kwargs):
+        result = super(HurryDirectoryResource, self).get(*args, **kwargs)
+        alsoProvides(result, IHurryResource)
+        return result
+
+class HurryDirectoryResourceFactory(DirectoryResourceFactory):
+
+    factoryClass = HurryDirectoryResource
+
+HurryDirectoryResource.directory_factory = HurryDirectoryResourceFactory



More information about the checkins mailing list