[Checkins] SVN: zope.interface/trunk/ Clear the cache used by ``Specificaton.get`` inside ``Specification.changed``.

Tres Seaver tseaver at palladion.com
Tue Apr 13 16:54:56 EDT 2010


Log message for revision 110828:
  Clear the cache used by ``Specificaton.get`` inside ``Specification.changed``.
  
  Fixes LP #185974: 
  
  Thanks to Jacob Holm for the patch.
  

Changed:
  U   zope.interface/trunk/CHANGES.txt
  U   zope.interface/trunk/src/zope/interface/interface.py
  U   zope.interface/trunk/src/zope/interface/tests/test_interface.py

-=-
Modified: zope.interface/trunk/CHANGES.txt
===================================================================
--- zope.interface/trunk/CHANGES.txt	2010-04-13 20:33:31 UTC (rev 110827)
+++ zope.interface/trunk/CHANGES.txt	2010-04-13 20:54:56 UTC (rev 110828)
@@ -5,6 +5,9 @@
 3.6.0 (unreleased)
 ==================
 
+- LP #185974:  Clear the cache used by ``Specificaton.get`` inside
+  ``Specification.changed``.  Thanks to Jacob Holm for the patch.
+
 - Added support for Python 3.1. Contributors:
     Lennart Regebro
     Martin v Löwis

Modified: zope.interface/trunk/src/zope/interface/interface.py
===================================================================
--- zope.interface/trunk/src/zope/interface/interface.py	2010-04-13 20:33:31 UTC (rev 110827)
+++ zope.interface/trunk/src/zope/interface/interface.py	2010-04-13 20:54:56 UTC (rev 110828)
@@ -297,6 +297,10 @@
     def changed(self, originally_changed):
         """We, or something we depend on, have changed
         """
+        try:
+            del self._v_attrs
+        except AttributeError:
+            pass
 
         implied = self._implied
         implied.clear()

Modified: zope.interface/trunk/src/zope/interface/tests/test_interface.py
===================================================================
--- zope.interface/trunk/src/zope/interface/tests/test_interface.py	2010-04-13 20:33:31 UTC (rev 110827)
+++ zope.interface/trunk/src/zope/interface/tests/test_interface.py	2010-04-13 20:54:56 UTC (rev 110828)
@@ -388,6 +388,32 @@
 
         """
 
+
+def test_description_cache_management():
+    """ See https://bugs.launchpad.net/zope.interface/+bug/185974
+
+There was a bug where the cache used by Specification.get() was not
+cleared when the bases were changed.
+
+    >>> from zope.interface import Interface
+    >>> from zope.interface import Attribute
+    >>> class I1(Interface):
+    ...     a = Attribute('a')
+
+    >>> class I2(I1):
+    ...     pass
+
+    >>> class I3(I2):
+    ...     pass
+
+    >>> I3.get('a') is I1.get('a')
+    True
+    >>> I2.__bases__ = (Interface,)
+    >>> I3.get('a') is None
+    True
+    """
+
+
 def test_suite():
     suite = unittest.makeSuite(InterfaceTests)
     suite.addTest(doctest.DocTestSuite("zope.interface.interface"))



More information about the checkins mailing list