[Zope-Checkins] SVN: Zope/branches/2.12/ - LP #143639: When the last cache manager in a container is

Jens Vagelpohl jens at dataflake.org
Wed Jun 16 13:32:10 EDT 2010


Log message for revision 113567:
  - LP #143639: When the last cache manager in a container is
    deleted, we need to remove all traces of it from the
    container.
  

Changed:
  U   Zope/branches/2.12/doc/CHANGES.rst
  U   Zope/branches/2.12/src/OFS/Cache.py
  A   Zope/branches/2.12/src/OFS/tests/testCache.py

-=-
Modified: Zope/branches/2.12/doc/CHANGES.rst
===================================================================
--- Zope/branches/2.12/doc/CHANGES.rst	2010-06-16 16:38:54 UTC (rev 113566)
+++ Zope/branches/2.12/doc/CHANGES.rst	2010-06-16 17:32:10 UTC (rev 113567)
@@ -11,6 +11,10 @@
 Bugs Fixed
 ++++++++++
 
+- LP #143639: When the last cache manager in a container is 
+  deleted, we need to remove all traces of it from the 
+  container.
+
 - LP #143619: Make sure to remove a RAMCache's contents when the 
   ZODB object is removed.
 

Modified: Zope/branches/2.12/src/OFS/Cache.py
===================================================================
--- Zope/branches/2.12/src/OFS/Cache.py	2010-06-16 16:38:54 UTC (rev 113566)
+++ Zope/branches/2.12/src/OFS/Cache.py	2010-06-16 17:32:10 UTC (rev 113567)
@@ -442,8 +442,11 @@
             ids = getVerifiedManagerIds(container)
             id = self.getId()
             if id in ids:
-                setattr(container, ZCM_MANAGERS, filter(
-                    lambda s, id=id: s != id, ids))
+                manager_ids = filter(lambda s, id=id: s != id, ids)
+                if manager_ids:
+                    setattr(container, ZCM_MANAGERS, manager_ids)
+                elif getattr(aq_base(self), ZCM_MANAGERS, None) is not None:
+                    delattr(self, ZCM_MANAGERS)
                 global manager_timestamp
                 manager_timestamp = time.time()
 

Added: Zope/branches/2.12/src/OFS/tests/testCache.py
===================================================================
--- Zope/branches/2.12/src/OFS/tests/testCache.py	                        (rev 0)
+++ Zope/branches/2.12/src/OFS/tests/testCache.py	2010-06-16 17:32:10 UTC (rev 113567)
@@ -0,0 +1,38 @@
+import unittest
+
+from OFS.Cache import CacheManager
+from OFS.Folder import Folder
+from OFS.SimpleItem import SimpleItem
+from Products.Five.eventconfigure import setDeprecatedManageAddDelete
+
+class DummyCacheManager(CacheManager, SimpleItem):
+    def __init__(self, id, *args, **kw):
+        self.id = id
+setDeprecatedManageAddDelete(DummyCacheManager)
+
+class CacheTests(unittest.TestCase):
+
+    def test_managersExist(self):
+        from OFS.Cache import managersExist
+        from OFS.DTMLMethod import DTMLMethod
+        root = Folder('root')
+        root._setObject('root_cache' , DummyCacheManager('root_cache'))
+        root._setObject('child', Folder('child'))
+        root.child._setObject('child_cache', DummyCacheManager('child_cache'))
+        root.child._setObject('child_content', DTMLMethod('child_content'))
+
+        # To begin with, cache managers will be found correctly
+        # using managersExist
+        self.failUnless(managersExist(root.child.child_content))
+
+        # Now we delete the cache in the child folder
+        root.child.manage_delObjects(['child_cache'])
+
+        # The parent_cache should still trigger managersExist
+        self.failUnless(managersExist(root.child.child_content))
+
+
+def test_suite():
+    suite = unittest.TestSuite()
+    suite.addTest(unittest.makeSuite(CacheTests))
+    return suite


Property changes on: Zope/branches/2.12/src/OFS/tests/testCache.py
___________________________________________________________________
Added: svn:keywords
   + Id
Added: svn:eol-style
   + native



More information about the Zope-Checkins mailing list