[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