summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkj <28750310+Fidget-Spinner@users.noreply.github.com>2020-11-01 18:13:38 (GMT)
committerGitHub <noreply@github.com>2020-11-01 18:13:38 (GMT)
commit1f7dfb277e5b88cddc13e5024766be787a3e9127 (patch)
tree042580f940e32cb44182c0aafd31710610efa455
parent148c76b27ce3823ff7e3ccb1d3a6b4598ce9b35b (diff)
downloadcpython-1f7dfb277e5b88cddc13e5024766be787a3e9127.zip
cpython-1f7dfb277e5b88cddc13e5024766be787a3e9127.tar.gz
cpython-1f7dfb277e5b88cddc13e5024766be787a3e9127.tar.bz2
bpo-42233: Correctly repr GenericAlias when used with typing module (GH-23081)
Noticed by @serhiy-storchaka in the bpo. `typing`'s types were not showing the parameterized generic. Eg. previously: ```python >>> typing.Union[dict[str, float], list[int]] 'typing.Union[dict, list]' ``` Now: ```python >>> typing.Union[dict[str, float], list[int]] 'typing.Union[dict[str, float], list[int]]' ``` Automerge-Triggered-By: GH:gvanrossum
-rw-r--r--Lib/test/test_typing.py7
-rw-r--r--Lib/typing.py2
-rw-r--r--Misc/NEWS.d/next/Library/2020-11-02-01-31-15.bpo-42233.YxRj-h.rst3
3 files changed, 12 insertions, 0 deletions
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index 57dd73c..2ab8be4 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -300,6 +300,8 @@ class UnionTests(BaseTestCase):
self.assertEqual(repr(u), repr(int))
u = Union[List[int], int]
self.assertEqual(repr(u), 'typing.Union[typing.List[int], int]')
+ u = Union[list[int], dict[str, float]]
+ self.assertEqual(repr(u), 'typing.Union[list[int], dict[str, float]]')
def test_cannot_subclass(self):
with self.assertRaises(TypeError):
@@ -407,6 +409,7 @@ class TupleTests(BaseTestCase):
self.assertEqual(repr(Tuple[()]), 'typing.Tuple[()]')
self.assertEqual(repr(Tuple[int, float]), 'typing.Tuple[int, float]')
self.assertEqual(repr(Tuple[int, ...]), 'typing.Tuple[int, ...]')
+ self.assertEqual(repr(Tuple[list[int]]), 'typing.Tuple[list[int]]')
def test_errors(self):
with self.assertRaises(TypeError):
@@ -479,6 +482,8 @@ class CallableTests(BaseTestCase):
self.assertEqual(repr(ct2), 'typing.Callable[[str, float], int]')
ctv = Callable[..., str]
self.assertEqual(repr(ctv), 'typing.Callable[..., str]')
+ ct3 = Callable[[str, float], list[int]]
+ self.assertEqual(repr(ct3), 'typing.Callable[[str, float], list[int]]')
def test_callable_with_ellipsis(self):
@@ -2269,6 +2274,8 @@ class FinalTests(BaseTestCase):
self.assertEqual(repr(cv), 'typing.Final[int]')
cv = Final[Employee]
self.assertEqual(repr(cv), 'typing.Final[%s.Employee]' % __name__)
+ cv = Final[tuple[int]]
+ self.assertEqual(repr(cv), 'typing.Final[tuple[int]]')
def test_cannot_subclass(self):
with self.assertRaises(TypeError):
diff --git a/Lib/typing.py b/Lib/typing.py
index 0f457ab..3fa97a4 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -162,6 +162,8 @@ def _type_repr(obj):
typically enough to uniquely identify a type. For everything
else, we fall back on repr(obj).
"""
+ if isinstance(obj, types.GenericAlias):
+ return repr(obj)
if isinstance(obj, type):
if obj.__module__ == 'builtins':
return obj.__qualname__
diff --git a/Misc/NEWS.d/next/Library/2020-11-02-01-31-15.bpo-42233.YxRj-h.rst b/Misc/NEWS.d/next/Library/2020-11-02-01-31-15.bpo-42233.YxRj-h.rst
new file mode 100644
index 0000000..aad4249
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-11-02-01-31-15.bpo-42233.YxRj-h.rst
@@ -0,0 +1,3 @@
+The :func:`repr` of :mod:`typing` types containing
+:ref:`Generic Alias Types <types-genericalias>` previously did not show the
+parameterized types in the ``GenericAlias``. They have now been changed to do so.