[Python-checkins] [3.7] bpo-36983: Fix typing.__all__ and add test for exported names (GH-13456) (GH-13662)
Miss Islington (bot)
webhook-mailer at python.org
Thu May 30 00:05:39 EDT 2019
https://github.com/python/cpython/commit/3a98bbf7275903a0f84d1374abd0b7f3a85950a4
commit: 3a98bbf7275903a0f84d1374abd0b7f3a85950a4
branch: 3.7
author: Anthony Sottile <asottile at umich.edu>
committer: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
date: 2019-05-29T21:05:33-07:00
summary:
[3.7] bpo-36983: Fix typing.__all__ and add test for exported names (GH-13456) (GH-13662)
https://bugs.python.org/issue36983
Fixes issue 36983
files:
A Misc/NEWS.d/next/Library/2019-05-20-20-41-30.bpo-36983.hz-fLr.rst
M Lib/test/test_typing.py
M Lib/typing.py
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index 0d66ebbd1845..ffd2007ee70d 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -2665,6 +2665,30 @@ def test_all(self):
self.assertIn('SupportsBytes', a)
self.assertIn('SupportsComplex', a)
+ def test_all_exported_names(self):
+ import typing
+
+ actual_all = set(typing.__all__)
+ computed_all = {
+ k for k, v in vars(typing).items()
+ # explicitly exported, not a thing with __module__
+ if k in actual_all or (
+ # avoid private names
+ not k.startswith('_') and
+ # avoid things in the io / re typing submodules
+ k not in typing.io.__all__ and
+ k not in typing.re.__all__ and
+ k not in {'io', 're'} and
+ # there's a few types and metaclasses that aren't exported
+ not k.endswith(('Meta', '_contra', '_co')) and
+ not k.upper() == k and
+ # but export all things that have __module__ == 'typing'
+ getattr(v, '__module__', None) == typing.__name__
+ )
+ }
+ self.assertSetEqual(computed_all, actual_all)
+
+
if __name__ == '__main__':
main()
diff --git a/Lib/typing.py b/Lib/typing.py
index 8cf0d00bceaf..9851cb4c7ebd 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -36,6 +36,7 @@
'Any',
'Callable',
'ClassVar',
+ 'ForwardRef',
'Generic',
'Optional',
'Tuple',
@@ -79,11 +80,13 @@
'SupportsRound',
# Concrete collection types.
+ 'ChainMap',
'Counter',
'Deque',
'Dict',
'DefaultDict',
'List',
+ 'OrderedDict',
'Set',
'FrozenSet',
'NamedTuple', # Not really a type.
diff --git a/Misc/NEWS.d/next/Library/2019-05-20-20-41-30.bpo-36983.hz-fLr.rst b/Misc/NEWS.d/next/Library/2019-05-20-20-41-30.bpo-36983.hz-fLr.rst
new file mode 100644
index 000000000000..bd2d91ad9234
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-05-20-20-41-30.bpo-36983.hz-fLr.rst
@@ -0,0 +1,2 @@
+Add missing names to ``typing.__all__``: ``ChainMap``, ``ForwardRef``,
+``OrderedDict`` - by Anthony Sottile.
More information about the Python-checkins
mailing list