[Zope-dev] SVN: zope.interface/trunk/ Fix a regression introduced in 3.6.4, that made one zope.app.interface test fail
Tres Seaver
tseaver at palladion.com
Fri Aug 5 17:01:40 EDT 2011
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 08/04/2011 10:18 AM, Gediminas Paulauskas wrote:
> Log message for revision 122462: Fix a regression introduced in
> 3.6.4, that made one zope.app.interface test fail
>
>
> Changed: U zope.interface/trunk/CHANGES.txt U
> zope.interface/trunk/src/zope/interface/interface.py
>
> -=- Modified: zope.interface/trunk/CHANGES.txt
> ===================================================================
> --- zope.interface/trunk/CHANGES.txt 2011-08-04 13:44:20 UTC (rev
> 122461) +++ zope.interface/trunk/CHANGES.txt 2011-08-04 14:18:37 UTC
> (rev 122462) @@ -11,10 +11,12 @@
>
> - Fix testing deprecation warnings issued when tested under Py3K.
>
> +- Fix ``InterfaceClass.__hash__`` to match comparison function. +
> 3.6.4 (2011-07-04) ------------------
>
> -- LP 804951: InterfaceClass instances were unhashable under Python
> 3.x. +- LP #804951: InterfaceClass instances were unhashable under
> Python 3.x.
>
> 3.6.3 (2011-05-26) ------------------
>
> Modified: zope.interface/trunk/src/zope/interface/interface.py
> ===================================================================
> --- zope.interface/trunk/src/zope/interface/interface.py 2011-08-04
> 13:44:20 UTC (rev 122461) +++
> zope.interface/trunk/src/zope/interface/interface.py 2011-08-04
> 14:18:37 UTC (rev 122462) @@ -682,7 +682,8 @@ return (n1 > n2) - (n1
> < n2)
>
> def __hash__(self): - return hash((self.__name__,
> self.__module__)) + return hash((getattr(self, '__name__',
> ''), + getattr(self, '__module__', '')))
I don't think this is a regression -- how do you legitimately create an
interface without both those attributes? The point of the comparison
function is to work even when handed a non-Interface object as one of
the two terms being compared, which doesn't apply to the case of a hash.
If there is code in zope.app.interface which is constructing a class
derived from Interface but which doesn't call Interface.__init__ before
hashing the instance, that code is *broken*, and should be fixed.
Tres.
- --
===================================================================
Tres Seaver +1 540-429-0999 tseaver at palladion.com
Palladion Software "Excellence by Design" http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAk48WjQACgkQ+gerLs4ltQ7ceACcCIkqWBXaISkGj44RIFTPqdyx
d5kAn1H9biD8xF5T2Jf6kN/FQNBLRkbb
=aTGc
-----END PGP SIGNATURE-----
More information about the Zope-Dev
mailing list