diff options
author | Yurii Karabas <1998uriyyo@gmail.com> | 2021-07-19 17:22:12 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-19 17:22:12 (GMT) |
commit | bce1418541a64a793960182772f985f64afbfa1a (patch) | |
tree | cfde24e8cb3ad119a55282e54f4b052f8be468d9 | |
parent | 89f4c34797de2f0e5045da2b97c1c8cbbb42fbb2 (diff) | |
download | cpython-bce1418541a64a793960182772f985f64afbfa1a.zip cpython-bce1418541a64a793960182772f985f64afbfa1a.tar.gz cpython-bce1418541a64a793960182772f985f64afbfa1a.tar.bz2 |
bpo-44524: Add missed __name__ and __qualname__ to typing module objects (#27237)
Co-authored-by: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com>
-rw-r--r-- | Lib/test/test_typing.py | 61 | ||||
-rw-r--r-- | Lib/typing.py | 9 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2021-07-19-14-04-42.bpo-44524.Nbf2JC.rst | 2 |
3 files changed, 72 insertions, 0 deletions
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index da6775e..b696447 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -4498,6 +4498,67 @@ class TypeGuardTests(BaseTestCase): 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 59f3ca3..4a6efee 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -358,6 +358,12 @@ class _SpecialForm(_Final, _root=True): 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 @@ class _BaseGenericAlias(_Final, _root=True): 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 0000000..0acdc7d --- /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. |