[Checkins] SVN: five.hashedresource/trunk/s Add zope2 compatible adapters for HashingURL and resourceDirectory.
Sebastian Wehrmann
sw at gocept.com
Mon Jul 13 09:58:12 EDT 2009
Log message for revision 101849:
Add zope2 compatible adapters for HashingURL and resourceDirectory.
Add zcml directives to register it in zope2.
Changed:
U five.hashedresource/trunk/setup.py
A five.hashedresource/trunk/src/five/hashedresource/configure.zcml
A five.hashedresource/trunk/src/five/hashedresource/meta.zcml
A five.hashedresource/trunk/src/five/hashedresource/metaconfigure.py
A five.hashedresource/trunk/src/five/hashedresource/url.py
-=-
Modified: five.hashedresource/trunk/setup.py
===================================================================
--- five.hashedresource/trunk/setup.py 2009-07-13 13:45:10 UTC (rev 101848)
+++ five.hashedresource/trunk/setup.py 2009-07-13 13:58:11 UTC (rev 101849)
@@ -25,19 +25,11 @@
namespace_packages=['five'],
install_requires=[
'setuptools',
- 'z3c.noop',
- 'zope.app.publisher',
+ 'z3c.hashedresource>=1.0',
'zope.component',
- 'zope.interface',
'zope.publisher',
+ 'zope.traversing',
],
- extras_require=dict(test=[
- 'zope.app.testing',
- 'zope.app.zcmlfiles',
- 'zope.security',
- 'zope.site',
- 'zope.testbrowser',
- ]),
include_package_data = True,
zip_safe = False,
)
Added: five.hashedresource/trunk/src/five/hashedresource/configure.zcml
===================================================================
--- five.hashedresource/trunk/src/five/hashedresource/configure.zcml (rev 0)
+++ five.hashedresource/trunk/src/five/hashedresource/configure.zcml 2009-07-13 13:58:11 UTC (rev 101849)
@@ -0,0 +1,11 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:browser="http://namespaces.zope.org/browser">
+
+ <include package="z3c.hashedresource" />
+
+ <include file="meta.zcml" />
+
+
+</configure>
+
Property changes on: five.hashedresource/trunk/src/five/hashedresource/configure.zcml
___________________________________________________________________
Added: svn:keywords
+ Id Rev Date
Added: svn:eol-style
+ native
Added: five.hashedresource/trunk/src/five/hashedresource/meta.zcml
===================================================================
--- five.hashedresource/trunk/src/five/hashedresource/meta.zcml (rev 0)
+++ five.hashedresource/trunk/src/five/hashedresource/meta.zcml 2009-07-13 13:58:11 UTC (rev 101849)
@@ -0,0 +1,16 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:meta="http://namespaces.zope.org/meta">
+
+ <meta:directives
+ namespace="http://namespaces.zope.org/five">
+
+ <meta:directive
+ name="hashedResourceDirectory"
+ schema="zope.app.publisher.browser.metadirectives.IResourceDirectoryDirective"
+ handler=".metaconfigure.hashedResourceDirectory"
+ />
+
+ </meta:directives>
+
+</configure>
Property changes on: five.hashedresource/trunk/src/five/hashedresource/meta.zcml
___________________________________________________________________
Added: svn:keywords
+ Id Rev Date
Added: svn:eol-style
+ native
Added: five.hashedresource/trunk/src/five/hashedresource/metaconfigure.py
===================================================================
--- five.hashedresource/trunk/src/five/hashedresource/metaconfigure.py (rev 0)
+++ five.hashedresource/trunk/src/five/hashedresource/metaconfigure.py 2009-07-13 13:58:11 UTC (rev 101849)
@@ -0,0 +1,46 @@
+import Products.Five.browser.metaconfigure
+import zope.publisher.interfaces.browser
+import five.hashedresource.url
+import z3c.hashedresource.hash
+import zope.component.zcml
+import zope.traversing.browser.interfaces
+from zope.publisher.interfaces.browser import IBrowserRequest
+
+
+
+def hashedResourceDirectory(
+ _context, name, directory,
+ layer=zope.publisher.interfaces.browser.IDefaultBrowserLayer,
+ permission='zope.Public'):
+ already_registered = len(_context.actions)
+ Products.Five.browser.metaconfigure.resourceDirectory(
+ _context, name, directory, layer, permission)
+ new_classes =[r[0][1] for r in _context.actions[already_registered:]
+ if isinstance(r[0], tuple) and r[0][0] == 'five:initialize:class']
+ for new_class in new_classes:
+ _context.action(
+ discriminator = ('adapter',
+ (new_class, IBrowserRequest),
+ zope.traversing.browser.interfaces.IAbsoluteURL,
+ ''),
+ callable = zope.component.zcml.handler,
+ args = ('registerAdapter',
+ five.hashedresource.url.HashingURL,
+ (new_class, IBrowserRequest),
+ zope.traversing.browser.interfaces.IAbsoluteURL,
+ '',
+ _context.info),
+ )
+ _context.action(
+ discriminator = ('adapter',
+ new_class,
+ z3c.hashedresource.interfaces.IResourceContentsHash,
+ ''),
+ callable = zope.component.zcml.handler,
+ args = ('registerAdapter',
+ z3c.hashedresource.hash.ContentsHash,
+ (new_class,),
+ z3c.hashedresource.interfaces.IResourceContentsHash,
+ '',
+ _context.info),
+ )
Property changes on: five.hashedresource/trunk/src/five/hashedresource/metaconfigure.py
___________________________________________________________________
Added: svn:keywords
+ Id Rev Date
Added: svn:eol-style
+ native
Added: five.hashedresource/trunk/src/five/hashedresource/url.py
===================================================================
--- five.hashedresource/trunk/src/five/hashedresource/url.py (rev 0)
+++ five.hashedresource/trunk/src/five/hashedresource/url.py 2009-07-13 13:58:11 UTC (rev 101849)
@@ -0,0 +1,49 @@
+#############################################################################
+#
+# Copyright (c) 2006-2007 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+
+from z3c.hashedresource import interfaces
+from zope.component import adapts
+from zope.interface import implements, implementsOnly, directlyProvides
+from zope.traversing.browser.interfaces import IAbsoluteURL
+import zope.app.publisher.browser.resource
+import zope.publisher.interfaces.browser
+import zope.traversing.browser.absoluteurl
+from zope.component.interfaces import IResource
+
+
+class HashingURL(zope.traversing.browser.absoluteurl.AbsoluteURL):
+ """Inserts a hash of the contents into the resource's URL,
+ so the URL changes whenever the contents change, thereby forcing
+ a browser to update its cache.
+ """
+
+ implementsOnly(IAbsoluteURL)
+ adapts(IResource, interfaces.IHashedResourceSkin)
+
+ def __init__(self, context, request):
+ self.context = context
+ self.request = request
+
+ # XXX duplicated from zope.app.publisher.browser.resource.AbsoluteURL
+ self.name = self.context.__name__
+ if self.name.startswith('++resource++'):
+ self.name = self.name[12:]
+
+ def _site_url(self):
+ return self.context.absolute_url().split('/++resource++')[0]
+
+ def __str__(self):
+ hash = str(interfaces.IResourceContentsHash(self.context))
+ return "%s/++noop++%s/++resource++%s" % (
+ self._site_url(), hash, self.name)
Property changes on: five.hashedresource/trunk/src/five/hashedresource/url.py
___________________________________________________________________
Added: svn:keywords
+ Id Rev Date
Added: svn:eol-style
+ native
More information about the Checkins
mailing list