diff options
| author | Jason Madden <jamadden@gmail.com> | 2020-03-20 09:59:17 -0500 |
|---|---|---|
| committer | Jason Madden <jamadden@gmail.com> | 2020-03-20 10:16:44 -0500 |
| commit | a11e1ea7cecb9a5cbd483f135e2657bce6d7b92a (patch) | |
| tree | 819356fe76dc426067bc9b425d1b6ccee791b0a6 /src/zope/interface/ro.py | |
| parent | 3a50f2e88781e90f4d8133fdb2a3b522fc047ade (diff) | |
| download | zope-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.py | 13 |
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() |
