[Python-checkins] bpo-44524: Add missed __name__ and __qualname__ to typing module objects (#27237)

ambv webhook-mailer at python.org
Mon Jul 19 13:22:32 EDT 2021


https://github.com/python/cpython/commit/bce1418541a64a793960182772f985f64afbfa1a
commit: bce1418541a64a793960182772f985f64afbfa1a
branch: main
author: Yurii Karabas <1998uriyyo at gmail.com>
committer: ambv <lukasz at langa.pl>
date: 2021-07-19T19:22:12+02:00
summary:

bpo-44524: Add missed __name__ and __qualname__ to typing module objects (#27237)

Co-authored-by: Ken Jin <28750310+Fidget-Spinner at users.noreply.github.com>

files:
A Misc/NEWS.d/next/Library/2021-07-19-14-04-42.bpo-44524.Nbf2JC.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 da6775eb48634..b696447d0982b 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -4498,6 +4498,67 @@ def test_no_isinstance(self):
             issubclass(int, TypeGuard)
 
 
+class SpecialAttrsTests(BaseTestCase):
+    def test_special_attrs(self):
+        cls_to_check = (
+            # ABC classes
+            typing.AbstractSet,
+            typing.AsyncContextManager,
+            typing.AsyncGenerator,
+            typing.AsyncIterable,
+            typing.AsyncIterator,
+            typing.Awaitable,
+            typing.ByteString,
+            typing.Callable,
+            typing.ChainMap,
+            typing.Collection,
+            typing.Container,
+            typing.ContextManager,
+            typing.Coroutine,
+            typing.Counter,
+            typing.DefaultDict,
+            typing.Deque,
+            typing.Dict,
+            typing.FrozenSet,
+            typing.Generator,
+            typing.Hashable,
+            typing.ItemsView,
+            typing.Iterable,
+            typing.Iterator,
+            typing.KeysView,
+            typing.List,
+            typing.Mapping,
+            typing.MappingView,
+            typing.MutableMapping,
+            typing.MutableSequence,
+            typing.MutableSet,
+            typing.OrderedDict,
+            typing.Reversible,
+            typing.Sequence,
+            typing.Set,
+            typing.Sized,
+            typing.Tuple,
+            typing.Type,
+            typing.ValuesView,
+            # Special Forms
+            typing.Any,
+            typing.NoReturn,
+            typing.ClassVar,
+            typing.Final,
+            typing.Union,
+            typing.Optional,
+            typing.Literal,
+            typing.TypeAlias,
+            typing.Concatenate,
+            typing.TypeGuard,
+        )
+
+        for cls in cls_to_check:
+            with self.subTest(cls=cls):
+                self.assertEqual(cls.__name__, cls._name)
+                self.assertEqual(cls.__qualname__, cls._name)
+                self.assertEqual(cls.__module__, 'typing')
+
 class AllTests(BaseTestCase):
     """Tests for __all__."""
 
diff --git a/Lib/typing.py b/Lib/typing.py
index 59f3ca39c1edd..4a6efee802042 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -358,6 +358,12 @@ def __init__(self, getitem):
         self._name = getitem.__name__
         self.__doc__ = getitem.__doc__
 
+    def __getattr__(self, item):
+        if item in {'__name__', '__qualname__'}:
+            return self._name
+
+        raise AttributeError(item)
+
     def __mro_entries__(self, bases):
         raise TypeError(f"Cannot subclass {self!r}")
 
@@ -935,6 +941,9 @@ def __mro_entries__(self, bases):
         return tuple(res)
 
     def __getattr__(self, attr):
+        if attr in {'__name__', '__qualname__'}:
+            return self._name
+
         # We are careful for copy and pickle.
         # Also for simplicity we just don't relay all dunder names
         if '__origin__' in self.__dict__ and not _is_dunder(attr):
diff --git a/Misc/NEWS.d/next/Library/2021-07-19-14-04-42.bpo-44524.Nbf2JC.rst b/Misc/NEWS.d/next/Library/2021-07-19-14-04-42.bpo-44524.Nbf2JC.rst
new file mode 100644
index 0000000000000..0acdc7dff029f
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2021-07-19-14-04-42.bpo-44524.Nbf2JC.rst
@@ -0,0 +1,2 @@
+Add missing ``__name__`` and ``__qualname__`` attributes to ``typing`` module
+classes. Patch provided by Yurii Karabas.



More information about the Python-checkins mailing list