mirror of
https://github.com/python/cpython
synced 2024-09-16 00:48:28 +00:00
bpo-44524: Add missed __name__ and __qualname__ to typing module objects (#27237)
Co-authored-by: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com>
This commit is contained in:
parent
89f4c34797
commit
bce1418541
|
@ -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__."""
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Add missing ``__name__`` and ``__qualname__`` attributes to ``typing`` module
|
||||
classes. Patch provided by Yurii Karabas.
|
Loading…
Reference in a new issue