[Checkins] SVN: lovely.memcached/trunk/src/lovely/memcached/ convenient function to invalidate caches depending on an instance.

Jürgen Kartnaller juergen at kartnaller.at
Wed May 9 09:01:32 EDT 2007


Log message for revision 75650:
  convenient function to invalidate caches depending on an instance.
  

Changed:
  U   lovely.memcached/trunk/src/lovely/memcached/README.txt
  U   lovely.memcached/trunk/src/lovely/memcached/__init__.py
  U   lovely.memcached/trunk/src/lovely/memcached/event.py
  U   lovely.memcached/trunk/src/lovely/memcached/tests.py

-=-
Modified: lovely.memcached/trunk/src/lovely/memcached/README.txt
===================================================================
--- lovely.memcached/trunk/src/lovely/memcached/README.txt	2007-05-09 11:39:33 UTC (rev 75649)
+++ lovely.memcached/trunk/src/lovely/memcached/README.txt	2007-05-09 13:01:32 UTC (rev 75650)
@@ -260,6 +260,7 @@
 Events can be used to create invalidations. The event handler invalidates in
 registered memcached utilities.
 
+  >>> from zope import event
   >>> from zope import component
   >>> from lovely.memcached.interfaces import IMemcachedClient
   >>> cacheUtil1 = MemcachedClient()
@@ -270,11 +271,11 @@
   >>> cacheUtil1.query('key1')
   'Value1'
 
+  >>> from lovely.memcached.event import invalidateCache
+  >>> component.provideHandler(invalidateCache)
+
   >>> from lovely.memcached.event import InvalidateCacheEvent
-  >>> ev = InvalidateCacheEvent(dependencies=['dep1'])
-
-  >>> from lovely.memcached.event import invalidateCache
-  >>> invalidateCache(ev)
+  >>> event.notify(InvalidateCacheEvent(dependencies=['dep1']))
   >>> cacheUtil1.query('key1') is None
   True
 
@@ -285,7 +286,7 @@
   >>> component.provideUtility(cacheUtil2, IMemcachedClient, name='cacheUtil2')
   >>> key = cacheUtil1.set('Value1', 'key1', dependencies=['dep1'])
   >>> key = cacheUtil2.set('Value2', 'key2', dependencies=['dep1'])
-  >>> invalidateCache(InvalidateCacheEvent(dependencies=['dep1']))
+  >>> event.notify(InvalidateCacheEvent(dependencies=['dep1']))
   >>> cacheUtil1.query('key1') is None
   True
   >>> cacheUtil2.query('key2') is None
@@ -295,10 +296,27 @@
 
   >>> key = cacheUtil1.set('Value1', 'key1', dependencies=['dep1'])
   >>> key = cacheUtil2.set('Value2', 'key2', dependencies=['dep1'])
-  >>> invalidateCache(InvalidateCacheEvent(cacheName='cacheUtil1',
-  ...                                      dependencies=['dep1']))
+  >>> event.notify(InvalidateCacheEvent(cacheName='cacheUtil1',
+  ...                                   dependencies=['dep1']))
   >>> cacheUtil1.query('key1') is None
   True
   >>> cacheUtil2.query('key2') is None
   False
 
+There is also a convenient function to invalidate caches depending on an
+instance.
+
+  >>> from zope.app.intid.interfaces import IIntIds
+  >>> intids = component.getUtility(IIntIds)
+  >>> from lovely.memcached.event import invalidateObjectCache
+  >>> class Content(object):
+  ...     pass
+  >>> obj = Content()
+  >>> id = intids.register(obj)
+  >>> key = cacheUtil2.set('Value3', 'key3', dependencies=[id])
+  >>> cacheUtil2.query('key3')
+  'Value3'
+  >>> invalidateObjectCache(obj)
+  >>> cacheUtil2.query('key3') is None
+  True
+

Modified: lovely.memcached/trunk/src/lovely/memcached/__init__.py
===================================================================
--- lovely.memcached/trunk/src/lovely/memcached/__init__.py	2007-05-09 11:39:33 UTC (rev 75649)
+++ lovely.memcached/trunk/src/lovely/memcached/__init__.py	2007-05-09 13:01:32 UTC (rev 75650)
@@ -0,0 +1 @@
+# package

Modified: lovely.memcached/trunk/src/lovely/memcached/event.py
===================================================================
--- lovely.memcached/trunk/src/lovely/memcached/event.py	2007-05-09 11:39:33 UTC (rev 75649)
+++ lovely.memcached/trunk/src/lovely/memcached/event.py	2007-05-09 13:01:32 UTC (rev 75650)
@@ -18,10 +18,19 @@
 
 from zope import interface
 from zope import component
+from zope import event
 
+from zope.app.intid.interfaces import IIntIds
+
 from interfaces import IInvalidateCacheEvent, IMemcachedClient
 
 
+def invalidateObjectCache(obj):
+    """Invalidate caches based on the intid of an object"""
+    intids = component.getUtility(IIntIds)
+    event.notify(InvalidateCacheEvent(dependencies = [intids.getId(obj)]))
+
+
 class InvalidateCacheEvent(object):
     interface.implements(IInvalidateCacheEvent)
 

Modified: lovely.memcached/trunk/src/lovely/memcached/tests.py
===================================================================
--- lovely.memcached/trunk/src/lovely/memcached/tests.py	2007-05-09 11:39:33 UTC (rev 75649)
+++ lovely.memcached/trunk/src/lovely/memcached/tests.py	2007-05-09 13:01:32 UTC (rev 75650)
@@ -17,9 +17,27 @@
 __docformat__ = "reStructuredText"
 
 import unittest
+from zope import component
 from zope.testing import doctest
 from zope.testing.doctestunit import DocTestSuite, DocFileSuite
 
+from zope.app.keyreference import testing
+from zope.app.intid.interfaces import IIntIds
+from zope.app.intid import IntIds
+
+from zope.app.testing import setup
+
+
+def setUp(test):
+    test.globs['root'] = setup.placefulSetUp(site=True)
+    component.provideUtility(IntIds(), IIntIds)
+    component.provideAdapter(testing.SimpleKeyReference)
+
+
+def tearDown(test):
+    setup.placefulTearDown()
+
+
 def test_suite():
     level1Suites = (
         DocFileSuite(
@@ -34,6 +52,7 @@
     level2Suites = (
         DocFileSuite(
             'README.txt',
+            setUp=setUp, tearDown=tearDown,
             optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
         ),
         )



More information about the Checkins mailing list