summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJason Madden <jamadden@gmail.com>2020-01-27 09:31:30 -0600
committerJason Madden <jamadden@gmail.com>2020-01-27 09:31:30 -0600
commitf41ebfdb0b432fd99e1c44c0a1d7fd54a637bdf8 (patch)
treeb15c734c418a50d33d0957964dd962c61fe33db9 /src
parentfec4a51b1ce8526de23c2558bfd26e253c4b6250 (diff)
downloadzope-interface-issue157.tar.gz
Remove support for hashing uninitialized interfaces.issue157
Fixes #157
Diffstat (limited to 'src')
-rw-r--r--src/zope/interface/interface.py9
-rw-r--r--src/zope/interface/tests/test_interface.py12
2 files changed, 4 insertions, 17 deletions
diff --git a/src/zope/interface/interface.py b/src/zope/interface/interface.py
index 106a60d..7fa56aa 100644
--- a/src/zope/interface/interface.py
+++ b/src/zope/interface/interface.py
@@ -17,7 +17,6 @@
import sys
from types import MethodType
from types import FunctionType
-import warnings
import weakref
from zope.interface._compat import _use_c_impl
@@ -579,7 +578,7 @@ class InterfaceClass(Element, InterfaceBase, Specification):
if other is None:
return -1
- n1 = (getattr(self, '__name__', ''), getattr(self, '__module__', ''))
+ n1 = (self.__name__, self.__module__)
n2 = (getattr(other, '__name__', ''), getattr(other, '__module__', ''))
# This spelling works under Python3, which doesn't have cmp().
@@ -589,11 +588,7 @@ class InterfaceClass(Element, InterfaceBase, Specification):
try:
return self._v_cached_hash
except AttributeError:
- try:
- self._v_cached_hash = hash((self.__name__, self.__module__))
- except AttributeError: # pragma: no cover
- warnings.warn('Hashing uninitialized InterfaceClass instance')
- return 1
+ self._v_cached_hash = hash((self.__name__, self.__module__))
return self._v_cached_hash
def __eq__(self, other):
diff --git a/src/zope/interface/tests/test_interface.py b/src/zope/interface/tests/test_interface.py
index f5a57b4..3bf26dc 100644
--- a/src/zope/interface/tests/test_interface.py
+++ b/src/zope/interface/tests/test_interface.py
@@ -834,20 +834,12 @@ class InterfaceClassTests(unittest.TestCase):
'zope.interface.tests.test_interface'))))
def test___hash___missing_required_attrs(self):
- import warnings
- from warnings import catch_warnings
-
class Derived(self._getTargetClass()):
def __init__(self):
pass # Don't call base class.
derived = Derived()
- with catch_warnings(record=True) as warned:
- warnings.simplefilter('always') # see LP #825249
- self.assertEqual(hash(derived), 1)
- self.assertEqual(len(warned), 1)
- self.assertTrue(warned[0].category is UserWarning)
- self.assertEqual(str(warned[0].message),
- 'Hashing uninitialized InterfaceClass instance')
+ with self.assertRaises(AttributeError):
+ hash(derived)
def test_comparison_with_None(self):
iface = self._makeOne()