[Checkins] SVN: lovely.responsecache/trunk/ version bump, see CHANGES.txt

Bernd Dorn bernd.dorn at lovelysystems.com
Sun Oct 14 08:56:50 EDT 2007


Log message for revision 80870:
  version bump, see CHANGES.txt

Changed:
  U   lovely.responsecache/trunk/CHANGES.txt
  U   lovely.responsecache/trunk/setup.py
  U   lovely.responsecache/trunk/src/lovely/responsecache/zcml.py
  U   lovely.responsecache/trunk/src/lovely/responsecache/zcml.txt

-=-
Modified: lovely.responsecache/trunk/CHANGES.txt
===================================================================
--- lovely.responsecache/trunk/CHANGES.txt	2007-10-14 10:19:28 UTC (rev 80869)
+++ lovely.responsecache/trunk/CHANGES.txt	2007-10-14 12:56:50 UTC (rev 80870)
@@ -2,6 +2,14 @@
 Changes for lovely.responsecache
 ================================
 
+2007/10/14 0.3.0a1
+==================
+
+- arbitrary arguments are now allowed in zcml directive
+
+- added dependencies attribute to zcml to define string types
+  dependencies
+
 2007/07/09 0.2.6a1
 ==================
 

Modified: lovely.responsecache/trunk/setup.py
===================================================================
--- lovely.responsecache/trunk/setup.py	2007-10-14 10:19:28 UTC (rev 80869)
+++ lovely.responsecache/trunk/setup.py	2007-10-14 12:56:50 UTC (rev 80870)
@@ -23,7 +23,7 @@
 
 setup(
     name = 'lovely.responsecache',
-    version = '0.2.6a1',
+    version = '0.3.0a1',
     author = "Lovely Systems",
     author_email = "office at lovelysystems.com",
     description = "Cache results of ContentProviders",

Modified: lovely.responsecache/trunk/src/lovely/responsecache/zcml.py
===================================================================
--- lovely.responsecache/trunk/src/lovely/responsecache/zcml.py	2007-10-14 10:19:28 UTC (rev 80869)
+++ lovely.responsecache/trunk/src/lovely/responsecache/zcml.py	2007-10-14 12:56:50 UTC (rev 80870)
@@ -25,7 +25,7 @@
 from zope.component import zcml
 from zope.component.zcml import handler
 from zope.proxy import removeAllProxies
-from zope.configuration.fields import GlobalObject
+from zope.configuration.fields import GlobalObject, Tokens
 from zope.publisher.interfaces.browser import IDefaultBrowserLayer
 
 from interfaces import IResponseCacheSettings
@@ -88,29 +88,48 @@
             default = False,
             )
 
+    dependencies = Tokens(
+        required=False,
+        title = _(u'Dependencies'),
+        description = _("""
+        Simple string dependencies seperated by whitespace
+        """),
+        value_type=schema.BytesLine())
 
+# Arbitrary keys and values are allowed to be passed to the viewlet.
+ICacheSettingsDirective.setTaggedValue('keyword_arguments', True)
+
 class FactoryCacheSettings(ResponseCacheSettings):
 
+    _deps = []
+
     def __init__(self, context, request):
         super(FactoryCacheSettings, self).__init__(context, request)
         self.dependOnContext = False
 
-    @property
-    def dependencies(self):
-        if self.dependOnContext:
-            view = removeAllProxies(self.context)
-            return [removeAllProxies(view.context)]
-        return []
+    @apply
+    def dependencies():
+        def get(self):
+            if self.dependOnContext:
+                view = removeAllProxies(self.context)
+                context = removeAllProxies(view.context)
+                return self._deps + [context]
+            return self._deps
+        def set(self, value):
+            self._deps = value
 
+        return property(get, set)
 
 class CacheSettingsFactory(object):
 
-    def __init__(self,
-            cacheName, key, lifetime, dependOnContext):
+    def __init__(self, cacheName, key, lifetime, dependOnContext,
+                 dependencies, kwords):
         self.cacheName = cacheName
         self.key = key
         self.lifetime = lifetime
         self.dependOnContext = dependOnContext
+        self.dependencies = dependencies
+        self.kwords = kwords
 
     def __call__(self, context, request):
         settings = FactoryCacheSettings(context, request)
@@ -120,7 +139,11 @@
             settings.key = self.key
         if self.lifetime is not None:
             settings.lifetime = self.lifetime
+        if self.dependencies is not None:
+            settings._deps = self.dependencies
         settings.dependOnContext = self.dependOnContext
+        for k, v in self.kwords.items():
+            setattr(settings, k, v)
         return settings
 
 
@@ -132,6 +155,8 @@
                            key=None,
                            lifetime=None,
                            dependOnContext=False,
+                           dependencies = None,
+                           **kwords
                           ):
     if class_:
         cdict = {}
@@ -143,12 +168,16 @@
             cdict['key'] = key
         if dependOnContext is not None:
             cdict['dependOnContext'] = dependOnContext
+        if dependencies is not None:
+            cdict['dependencies'] = dependencies
+        cdict.update(kwords)
         new_class = type(class_.__name__, (class_,), cdict)
     else:
         if lifetime is not None:
             lifetime=eval(lifetime)
         new_class = CacheSettingsFactory(
-                cacheName, key, lifetime, dependOnContext)
+                cacheName, key, lifetime, dependOnContext,
+                dependencies, kwords)
     _context.action(
         discriminator = (
             'cacheSettings',

Modified: lovely.responsecache/trunk/src/lovely/responsecache/zcml.txt
===================================================================
--- lovely.responsecache/trunk/src/lovely/responsecache/zcml.txt	2007-10-14 10:19:28 UTC (rev 80869)
+++ lovely.responsecache/trunk/src/lovely/responsecache/zcml.txt	2007-10-14 12:56:50 UTC (rev 80870)
@@ -116,6 +116,8 @@
   >>> settings.key
   'my key'
 
+String dependencies.
+
   >>> xmlconfig(StringIO(baseTemplate% (
   ...      """
   ...      <cacheSettings
@@ -123,6 +125,23 @@
   ...        cacheName="nginx"
   ...        key="my key"
   ...        lifetime="10*10"
+  ...        dependencies="First Second"
+  ...        />
+  ...      """
+  ...     )))
+  >>> settings = component.getMultiAdapter((myView, request), IResponseCacheSettings)
+  >>> settings.dependencies
+  ['First', 'Second']
+
+Depending on context.
+
+  >>> xmlconfig(StringIO(baseTemplate% (
+  ...      """
+  ...      <cacheSettings
+  ...        for="lovely.responsecache.tests.IMyView"
+  ...        cacheName="nginx"
+  ...        key="my key"
+  ...        lifetime="10*10"
   ...        dependOnContext="True"
   ...        />
   ...      """
@@ -137,3 +156,63 @@
   >>> settings.dependencies
   [<MyContent object at ...>]
 
+Depend on context and strings.
+
+  >>> xmlconfig(StringIO(baseTemplate% (
+  ...      """
+  ...      <cacheSettings
+  ...        for="lovely.responsecache.tests.IMyView"
+  ...        cacheName="nginx"
+  ...        key="my key"
+  ...        lifetime="10*10"
+  ...        dependOnContext="True"
+  ...        dependencies="a b"
+  ...        />
+  ...      """
+  ...     )))
+  >>> settings = component.getMultiAdapter((myView, request), IResponseCacheSettings)
+  >>> settings.dependencies
+  ['a', 'b', <MyContent object at ...>]
+
+
+
+
+We can set arbitrary properties in zcml.
+
+  >>> xmlconfig(StringIO(baseTemplate% (
+  ...      """
+  ...      <cacheSettings
+  ...        for="lovely.responsecache.tests.IMyView"
+  ...        cacheName="nginx"
+  ...        key="my key"
+  ...        lifetime="10*10"
+  ...        dependOnContext="True"
+  ...        someOtherVariable="A"
+  ...        />
+  ...      """
+  ...     )))
+
+   >>> settings = component.getMultiAdapter((myView, request),
+   ...                                   IResponseCacheSettings)
+   >>> settings.someOtherVariable
+   u'A'
+
+This also works with self implemented classes.
+
+  >>> xmlconfig(StringIO(baseTemplate% (
+  ...      """
+  ...      <cacheSettings
+  ...        for="lovely.responsecache.tests.IMyView"
+  ...        class="lovely.responsecache.tests.MyCacheSettings"
+  ...        cacheName="nginx"
+  ...        key="my key"
+  ...        lifetime="10"
+  ...        someOtherVariable="B"
+  ...        />
+  ...      """
+  ...     )))
+   >>> settings = component.getMultiAdapter((myView, request),
+   ...                                   IResponseCacheSettings)
+   >>> settings.someOtherVariable
+   u'B'
+



More information about the Checkins mailing list