[Checkins] SVN: z3c.hashedresource/trunk/s * move our AbsoluteURL adapter to its own skin
Wolfgang Schnerring
wosc at wosc.de
Tue Jun 16 04:30:41 EDT 2009
Log message for revision 101040:
* move our AbsoluteURL adapter to its own skin
* split tests into devmode and non-devmode
* depend on recent enough version of zope.app.publisher, so resources use IAbsoluteURL to determine their URL
Changed:
U z3c.hashedresource/trunk/setup.py
U z3c.hashedresource/trunk/src/z3c/hashedresource/README.txt
U z3c.hashedresource/trunk/src/z3c/hashedresource/configure.zcml
A z3c.hashedresource/trunk/src/z3c/hashedresource/ftesting-devmode.zcml
U z3c.hashedresource/trunk/src/z3c/hashedresource/ftesting.zcml
U z3c.hashedresource/trunk/src/z3c/hashedresource/interfaces.py
U z3c.hashedresource/trunk/src/z3c/hashedresource/testing.py
U z3c.hashedresource/trunk/src/z3c/hashedresource/tests/test_hash.py
U z3c.hashedresource/trunk/src/z3c/hashedresource/url.py
-=-
Modified: z3c.hashedresource/trunk/setup.py
===================================================================
--- z3c.hashedresource/trunk/setup.py 2009-06-16 07:33:15 UTC (rev 101039)
+++ z3c.hashedresource/trunk/setup.py 2009-06-16 08:30:41 UTC (rev 101040)
@@ -26,14 +26,14 @@
install_requires=[
'setuptools',
'z3c.noop',
+ 'zope.app.publisher>=3.8.2',
'zope.component',
'zope.interface',
- 'zope.app.publisher',
+ 'zope.publisher',
],
extras_require=dict(test=[
'zope.app.testing',
'zope.app.zcmlfiles',
- 'zope.publisher',
'zope.security',
'zope.site',
'zope.testbrowser',
Modified: z3c.hashedresource/trunk/src/z3c/hashedresource/README.txt
===================================================================
--- z3c.hashedresource/trunk/src/z3c/hashedresource/README.txt 2009-06-16 07:33:15 UTC (rev 101039)
+++ z3c.hashedresource/trunk/src/z3c/hashedresource/README.txt 2009-06-16 08:30:41 UTC (rev 101040)
@@ -18,3 +18,6 @@
to restart the server after changing resource files (else browsers will still
see the old URL unchanged and use their outdated cached versions of the files).
+To use this package, include its configure.zcml and use
+`z3c.hashedresource.interfaces.IHashedResourceSkin` or a skin that inherits from
+it.
\ No newline at end of file
Modified: z3c.hashedresource/trunk/src/z3c/hashedresource/configure.zcml
===================================================================
--- z3c.hashedresource/trunk/src/z3c/hashedresource/configure.zcml 2009-06-16 07:33:15 UTC (rev 101039)
+++ z3c.hashedresource/trunk/src/z3c/hashedresource/configure.zcml 2009-06-16 08:30:41 UTC (rev 101040)
@@ -3,8 +3,14 @@
xmlns:zcml="http://namespaces.zope.org/zcml"
>
- <include package="z3c.noop"/>
+ <include package="z3c.noop" />
+ <utility
+ component=".interfaces.IHashedResourceSkin"
+ provides="zope.publisher.interfaces.browser.IBrowserSkinType"
+ name="z3c.hashedresource"
+ />
+
<adapter
factory=".url.HashingURL"
/>
Added: z3c.hashedresource/trunk/src/z3c/hashedresource/ftesting-devmode.zcml
===================================================================
--- z3c.hashedresource/trunk/src/z3c/hashedresource/ftesting-devmode.zcml (rev 0)
+++ z3c.hashedresource/trunk/src/z3c/hashedresource/ftesting-devmode.zcml 2009-06-16 08:30:41 UTC (rev 101040)
@@ -0,0 +1,8 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:meta="http://namespaces.zope.org/meta"
+ >
+
+ <meta:provides feature="devmode"/>
+ <include file="ftesting.zcml"/>
+</configure>
\ No newline at end of file
Modified: z3c.hashedresource/trunk/src/z3c/hashedresource/ftesting.zcml
===================================================================
--- z3c.hashedresource/trunk/src/z3c/hashedresource/ftesting.zcml 2009-06-16 07:33:15 UTC (rev 101039)
+++ z3c.hashedresource/trunk/src/z3c/hashedresource/ftesting.zcml 2009-06-16 08:30:41 UTC (rev 101040)
@@ -3,11 +3,12 @@
xmlns:browser="http://namespaces.zope.org/browser"
>
-
<include package="zope.app.zcmlfiles" />
<include package="zope.app.publisher" />
<include package="z3c.hashedresource" />
+ <browser:defaultSkin name="z3c.hashedresource" />
+
<!-- example resource for testing -->
<browser:resourceDirectory
directory="tests/fixture"
Modified: z3c.hashedresource/trunk/src/z3c/hashedresource/interfaces.py
===================================================================
--- z3c.hashedresource/trunk/src/z3c/hashedresource/interfaces.py 2009-06-16 07:33:15 UTC (rev 101039)
+++ z3c.hashedresource/trunk/src/z3c/hashedresource/interfaces.py 2009-06-16 08:30:41 UTC (rev 101040)
@@ -1,6 +1,6 @@
#############################################################################
#
-# Copyright (c) 2006-2007 Zope Corporation and Contributors.
+# Copyright (c) 2009 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
@@ -11,11 +11,24 @@
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
+"""
-from zope.interface import Interface
+$Id$
+"""
+from zope.interface import Interface, alsoProvides
+import zope.publisher.interfaces.browser
class IResourceContentsHash(Interface):
def __str__():
"""return a hash of the contents of the resource"""
+
+
+class IHashedResourceSkin(
+ zope.publisher.interfaces.browser.IDefaultBrowserLayer):
+ """marker interface to differentiate our AbsoluteURL registration
+ from the default one in zope.app.publisher."""
+
+alsoProvides(
+ IHashedResourceSkin, zope.publisher.interfaces.browser.IBrowserSkinType)
Modified: z3c.hashedresource/trunk/src/z3c/hashedresource/testing.py
===================================================================
--- z3c.hashedresource/trunk/src/z3c/hashedresource/testing.py 2009-06-16 07:33:15 UTC (rev 101039)
+++ z3c.hashedresource/trunk/src/z3c/hashedresource/testing.py 2009-06-16 08:30:41 UTC (rev 101040)
@@ -15,6 +15,7 @@
$Id: test_directoryresource.py 95447 2009-01-29 16:28:18Z wosc $
"""
+from z3c.hashedresource import interfaces
import os
import re
import tempfile
@@ -32,10 +33,15 @@
)
HashedResourcesLayer = zope.app.testing.functional.ZCMLLayer(
- os.path.join(os.path.split(__file__)[0], 'ftesting.zcml'),
+ os.path.join(os.path.dirname(__file__), 'ftesting-devmode.zcml'),
__name__, 'HashedResourcesLayer', allow_teardown=True)
+class TestRequest(zope.publisher.browser.TestRequest):
+
+ zope.interface.implements(interfaces.IHashedResourceSkin)
+
+
class FunctionalTestCase(zope.app.testing.functional.FunctionalTestCase):
layer = HashedResourcesLayer
@@ -52,7 +58,7 @@
open(os.path.join(self.tmpdir, 'example.txt'), 'w').write('')
self.dirname = os.path.basename(self.tmpdir)
- self.request = zope.publisher.browser.TestRequest()
+ self.request = TestRequest()
self.request._vh_root = self.site
self.directory = zope.app.publisher.browser.directoryresource.DirectoryResourceFactory(
self.tmpdir, checker, self.dirname)(self.request)
Modified: z3c.hashedresource/trunk/src/z3c/hashedresource/tests/test_hash.py
===================================================================
--- z3c.hashedresource/trunk/src/z3c/hashedresource/tests/test_hash.py 2009-06-16 07:33:15 UTC (rev 101039)
+++ z3c.hashedresource/trunk/src/z3c/hashedresource/tests/test_hash.py 2009-06-16 08:30:41 UTC (rev 101040)
@@ -16,12 +16,20 @@
$Id: test_directoryresource.py 95447 2009-01-29 16:28:18Z wosc $
"""
from z3c.hashedresource import hash, testing
+import os
import unittest
import zope.component
+ProductionModeLayer = zope.app.testing.functional.ZCMLLayer(
+ os.path.join(os.path.dirname(testing.__file__), 'ftesting.zcml'),
+ __name__, 'ProductionModeLayer', allow_teardown=True)
+
+
class CachingContentsHashTest(testing.FunctionalTestCase):
+ layer = ProductionModeLayer
+
def test_production_mode_hash_should_not_change(self):
zope.component.provideAdapter(
hash.CachingContentsHash,
Modified: z3c.hashedresource/trunk/src/z3c/hashedresource/url.py
===================================================================
--- z3c.hashedresource/trunk/src/z3c/hashedresource/url.py 2009-06-16 07:33:15 UTC (rev 101039)
+++ z3c.hashedresource/trunk/src/z3c/hashedresource/url.py 2009-06-16 08:30:41 UTC (rev 101040)
@@ -14,11 +14,12 @@
from z3c.hashedresource import interfaces
from zope.component import adapts
-from zope.interface import implements, implementsOnly
+from zope.interface import implements, implementsOnly, directlyProvides
+from zope.traversing.browser.interfaces import IAbsoluteURL
+import zope.app.publisher.browser.resource
import zope.app.publisher.interfaces
import zope.publisher.interfaces.browser
import zope.traversing.browser.absoluteurl
-import zope.traversing.browser.interfaces
class HashingURL(zope.traversing.browser.absoluteurl.AbsoluteURL):
@@ -27,9 +28,9 @@
a browser to update its cache.
"""
- implementsOnly(zope.traversing.browser.interfaces.IAbsoluteURL)
+ implementsOnly(IAbsoluteURL)
adapts(zope.app.publisher.interfaces.IResource,
- zope.publisher.interfaces.browser.IDefaultBrowserLayer)
+ interfaces.IHashedResourceSkin)
def __init__(self, context, request):
self.context = context
@@ -40,6 +41,11 @@
if self.name.startswith('++resource++'):
self.name = self.name[12:]
+ def _site_url(self):
+ url = zope.app.publisher.browser.resource.AbsoluteURL(
+ self.context, self.request)()
+ return url.split('/@@/')[0]
+
def __str__(self):
hash = str(interfaces.IResourceContentsHash(self.context))
return "%s/++noop++%s/@@/%s" % (self._site_url(), hash, self.name)
More information about the Checkins
mailing list