[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