summaryrefslogtreecommitdiff
path: root/src/zope/interface/ro.py
diff options
context:
space:
mode:
authorJason Madden <jamadden@gmail.com>2020-03-20 09:59:17 -0500
committerJason Madden <jamadden@gmail.com>2020-03-20 10:16:44 -0500
commita11e1ea7cecb9a5cbd483f135e2657bce6d7b92a (patch)
tree819356fe76dc426067bc9b425d1b6ccee791b0a6 /src/zope/interface/ro.py
parent3a50f2e88781e90f4d8133fdb2a3b522fc047ade (diff)
downloadzope-interface-a11e1ea7cecb9a5cbd483f135e2657bce6d7b92a.tar.gz
Make the RO for InterfaceClass consistent and fix handling of the STRICT_IRO env variable.issue192-issue194
Fixes #192 and fixes #194. Also fix the IRO for OrderedDict on CPython 2
Diffstat (limited to 'src/zope/interface/ro.py')
-rw-r--r--src/zope/interface/ro.py13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/zope/interface/ro.py b/src/zope/interface/ro.py
index 7cb4f55..20338ed 100644
--- a/src/zope/interface/ro.py
+++ b/src/zope/interface/ro.py
@@ -163,6 +163,14 @@ class InconsistentResolutionOrderError(TypeError):
)
+class _NamedBool(int): # cannot actually inherit bool
+
+ def __new__(cls, val, name):
+ inst = super(cls, _NamedBool).__new__(cls, val)
+ inst.__name__ = name
+ return inst
+
+
class _ClassBoolFromEnv(object):
"""
Non-data descriptor that reads a transformed environment variable
@@ -184,6 +192,7 @@ class _ClassBoolFromEnv(object):
env_name = 'ZOPE_INTERFACE_' + my_name
val = os.environ.get(env_name, '') == '1'
+ val = _NamedBool(val, my_name)
setattr(klass, my_name, val)
setattr(klass, 'ORIG_' + my_name, self)
return val
@@ -208,7 +217,7 @@ class C3(object):
@staticmethod
def resolver(C, strict, base_mros):
- strict = strict if strict is not None else C3.STRICT_RO
+ strict = strict if strict is not None else C3.STRICT_IRO
factory = C3
if strict:
factory = _StrictC3
@@ -263,7 +272,7 @@ class C3(object):
return list(self.__legacy_ro)
TRACK_BAD_IRO = _ClassBoolFromEnv()
- STRICT_RO = _ClassBoolFromEnv()
+ STRICT_IRO = _ClassBoolFromEnv()
WARN_BAD_IRO = _ClassBoolFromEnv()
LOG_CHANGED_IRO = _ClassBoolFromEnv()
USE_LEGACY_IRO = _ClassBoolFromEnv()