[Checkins] SVN: zope.cachedescriptors/trunk/src/zope/cachedescriptors/method. added invalidation method to method.cachedAt

Christian Zagrodnick cz at gocept.com
Fri May 18 11:22:39 EDT 2007


Log message for revision 75830:
  added invalidation method to method.cachedAt

Changed:
  U   zope.cachedescriptors/trunk/src/zope/cachedescriptors/method.py
  U   zope.cachedescriptors/trunk/src/zope/cachedescriptors/method.txt

-=-
Modified: zope.cachedescriptors/trunk/src/zope/cachedescriptors/method.py
===================================================================
--- zope.cachedescriptors/trunk/src/zope/cachedescriptors/method.py	2007-05-18 14:34:04 UTC (rev 75829)
+++ zope.cachedescriptors/trunk/src/zope/cachedescriptors/method.py	2007-05-18 15:22:39 UTC (rev 75830)
@@ -26,18 +26,25 @@
     def __call__(self, func):
 
         def decorated(instance, *args, **kwargs):
-            kw = kwargs.items()
-            kw.sort()
-            key = (args, tuple(kw))
             cache = self.cache(instance)
+            key = self._get_cache_key(*args, **kwargs)
             try:
                 v = cache[key]
             except KeyError:
                 v = cache[key] = func(instance, *args, **kwargs)
             return v
 
+        decorated.invalidate = self.invalidate
         return decorated
 
+    def invalidate(self, instance, *args, **kwargs):
+        cache = self.cache(instance)
+        key = self._get_cache_key(*args, **kwargs)
+        try:
+            del cache[key]
+        except KeyError:
+            pass
+
     def cache(self, instance):
         try:
             cache = getattr(instance, self.attribute_name)
@@ -45,3 +52,10 @@
             cache = BTrees.OOBTree.OOBTree()
             setattr(instance, self.attribute_name, cache)
         return cache
+
+    @staticmethod
+    def _get_cache_key(*args, **kwargs):
+        kw = kwargs.items()
+        kw.sort()
+        key = (args, tuple(kw))
+        return key

Modified: zope.cachedescriptors/trunk/src/zope/cachedescriptors/method.txt
===================================================================
--- zope.cachedescriptors/trunk/src/zope/cachedescriptors/method.txt	2007-05-18 14:34:04 UTC (rev 75829)
+++ zope.cachedescriptors/trunk/src/zope/cachedescriptors/method.txt	2007-05-18 15:22:39 UTC (rev 75830)
@@ -50,3 +50,16 @@
 
     >>> list(sorted(point._cache.items()))
     [(((2, 2), ()), 1.0), (((5, 2), ()), 4.0)]
+
+
+It is possible to exlicitly invalidate the data::
+
+    >>> point.distance.invalidate(point, 5, 2)
+    >>> point.distance(5, 2)
+    computing distance
+    4.0
+
+Invalidating keys which are not in the cache, does not result in an error::
+
+
+    >>> point.distance.invalidate(point, 47, 11)



More information about the Checkins mailing list