[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