[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