[Checkins] SVN: five.hashedresource/trunk/src/five/hashedresource/ look up resources using restrictedTraverse to get the context right

Thomas Lotze tl at gocept.com
Mon Jul 27 04:28:32 EDT 2009


Log message for revision 102329:
  look up resources using restrictedTraverse to get the context right

Changed:
  U   five.hashedresource/trunk/src/five/hashedresource/testing.py
  U   five.hashedresource/trunk/src/five/hashedresource/tests/test_url.py
  U   five.hashedresource/trunk/src/five/hashedresource/url.py

-=-
Modified: five.hashedresource/trunk/src/five/hashedresource/testing.py
===================================================================
--- five.hashedresource/trunk/src/five/hashedresource/testing.py	2009-07-27 08:27:55 UTC (rev 102328)
+++ five.hashedresource/trunk/src/five/hashedresource/testing.py	2009-07-27 08:28:32 UTC (rev 102329)
@@ -67,14 +67,15 @@
         open(os.path.join(self.tmpdir, 'example.txt'), 'w').write('')
         self.dirname = os.path.basename(self.tmpdir)
 
+        self.app = self._app()
         self.request = Testing.ZopeTestCase.utils.makerequest(
-            self._app()).REQUEST
+            self.app).REQUEST
         zope.interface.directlyProvides(
             self.request, z3c.hashedresource.interfaces.IHashedResourceSkin)
-        self.request.getVirtualHostRoot = lambda: None
-        self.directory = zope.component.getAdapter(
-            self.request, name='myresource')
 
+        self.directory = self.app.aq_inner.restrictedTraverse(
+            '++resource++myresource')
+
     def tearDown(self):
         shutil.rmtree(self.tmpdir)
 

Modified: five.hashedresource/trunk/src/five/hashedresource/tests/test_url.py
===================================================================
--- five.hashedresource/trunk/src/five/hashedresource/tests/test_url.py	2009-07-27 08:27:55 UTC (rev 102328)
+++ five.hashedresource/trunk/src/five/hashedresource/tests/test_url.py	2009-07-27 08:28:32 UTC (rev 102329)
@@ -33,7 +33,7 @@
             self.dirname, directory_url)
 
     def test_file_url_should_contain_hash(self):
-        file = zope.component.getAdapter(self.request, name='test.txt')
+        file = self.app.aq_inner.restrictedTraverse('++resource++test.txt')
         file_url = str(zope.component.getMultiAdapter((file, self.request),
                 zope.traversing.browser.interfaces.IAbsoluteURL))
         self.assertMatches(
@@ -42,12 +42,11 @@
 
     def test_different_files_hashes_should_differ(self):
         open(os.path.join(testing.fixture, 'example.txt'), 'w').write('foo')
-        file1 = zope.component.getAdapter(self.request, name='example.txt')
-        file1_url = str(zope.component.getMultiAdapter((file1, self.request),
+        file = self.app.aq_inner.restrictedTraverse('++resource++example.txt')
+        file1_url = str(zope.component.getMultiAdapter((file, self.request),
                 zope.traversing.browser.interfaces.IAbsoluteURL))
         open(os.path.join(testing.fixture, 'example.txt'), 'w').write('bar')
-        file2 = zope.component.getAdapter(self.request, name='example.txt')
-        file2_url = str(zope.component.getMultiAdapter((file2, self.request),
+        file2_url = str(zope.component.getMultiAdapter((file, self.request),
                 zope.traversing.browser.interfaces.IAbsoluteURL))
         self.assertNotEqual(self._hash(file1_url), self._hash(file2_url))
 

Modified: five.hashedresource/trunk/src/five/hashedresource/url.py
===================================================================
--- five.hashedresource/trunk/src/five/hashedresource/url.py	2009-07-27 08:27:55 UTC (rev 102328)
+++ five.hashedresource/trunk/src/five/hashedresource/url.py	2009-07-27 08:28:32 UTC (rev 102329)
@@ -12,12 +12,13 @@
 #
 ##############################################################################
 
-from zope.component import adapts
 from zope.component.interfaces import IResource
 from zope.interface import implementsOnly
 from zope.traversing.browser.interfaces import IAbsoluteURL
+import Products.Five.browser.resource
+import urllib
 import z3c.hashedresource
-import zope.traversing.browser.absoluteurl
+import zope.component
 
 
 class HashingURL(zope.traversing.browser.absoluteurl.AbsoluteURL):
@@ -27,21 +28,30 @@
     """
 
     implementsOnly(IAbsoluteURL)
-    adapts(IResource, z3c.hashedresource.interfaces.IHashedResourceSkin)
+    zope.component.adapts(IResource,
+                          z3c.hashedresource.interfaces.IHashedResourceSkin)
 
     def __init__(self, context, request):
         self.context = context
         self.request = request
 
-        self.name = self.context.__name__
-        if self.name.startswith('++resource++'):
-            self.name = self.name[12:]
+        container = self.context.__parent__
+        container_url = str(zope.component.getMultiAdapter(
+                (container, self.request), IAbsoluteURL))
+        container_url = urllib.unquote(container_url)
 
-    def _site_url(self):
-        return self.context.absolute_url().split('/++resource++')[0]
+        name = self.context.__name__
+        if name.startswith('++resource++'):
+            name = name[12:]
+        if not isinstance(container,
+                          Products.Five.browser.resource.DirectoryResource):
+            name = '++resource++' + name
 
+        self.url = "%s/%s" % (container_url, name)
+
     def __str__(self):
         hash = str(z3c.hashedresource.interfaces.IResourceContentsHash(
                 self.context))
-        return "%s/++noop++%s/++resource++%s" % (
-            self._site_url(), hash, self.name)
+
+        first, last = self.url.split('/++resource++')
+        return "%s/++noop++%s/++resource++%s" % (first, hash, last)



More information about the Checkins mailing list