[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