diff options
| author | Divij Rajkumar <drajkuma1@gmail.com> | 2019-09-12 11:13:51 +0100 |
|---|---|---|
| committer | Ivan Levkivskyi <levkivskyi@gmail.com> | 2019-09-12 11:13:51 +0100 |
| commit | 692a0dc91597b7fb350383b633dc4d044cbd360e (patch) | |
| tree | 1efa3a3554b6c35e5c1d647776c08922a34fef92 /Lib/typing.py | |
| parent | ea683deccc505a78bbbb1eb8c6a88b0835ad5151 (diff) | |
| download | cpython-git-692a0dc91597b7fb350383b633dc4d044cbd360e.tar.gz | |
bpo-38008: Move builtin protocol whitelist to mapping instead of list (GH-15647)
Fixes https://bugs.python.org/issue38008
Diffstat (limited to 'Lib/typing.py')
| -rw-r--r-- | Lib/typing.py | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/Lib/typing.py b/Lib/typing.py index 5f1a0ad3d6..7b07112c3a 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -989,10 +989,13 @@ def _allow_reckless_class_cheks(): return True -_PROTO_WHITELIST = ['Callable', 'Awaitable', - 'Iterable', 'Iterator', 'AsyncIterable', 'AsyncIterator', - 'Hashable', 'Sized', 'Container', 'Collection', 'Reversible', - 'ContextManager', 'AsyncContextManager'] +_PROTO_WHITELIST = { + 'collections.abc': [ + 'Callable', 'Awaitable', 'Iterable', 'Iterator', 'AsyncIterable', + 'Hashable', 'Sized', 'Container', 'Collection', 'Reversible', + ], + 'contextlib': ['AbstractContextManager', 'AbstractAsyncContextManager'], +} class _ProtocolMeta(ABCMeta): @@ -1105,7 +1108,8 @@ class Protocol(Generic, metaclass=_ProtocolMeta): # ... otherwise check consistency of bases, and prohibit instantiation. for base in cls.__bases__: if not (base in (object, Generic) or - base.__module__ == 'collections.abc' and base.__name__ in _PROTO_WHITELIST or + base.__module__ in _PROTO_WHITELIST and + base.__name__ in _PROTO_WHITELIST[base.__module__] or issubclass(base, Generic) and base._is_protocol): raise TypeError('Protocols can only inherit from other' ' protocols, got %r' % base) |
