diff options
author | kj <28750310+Fidget-Spinner@users.noreply.github.com> | 2020-11-01 18:13:38 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-01 18:13:38 (GMT) |
commit | 1f7dfb277e5b88cddc13e5024766be787a3e9127 (patch) | |
tree | 042580f940e32cb44182c0aafd31710610efa455 | |
parent | 148c76b27ce3823ff7e3ccb1d3a6b4598ce9b35b (diff) | |
download | cpython-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.py | 7 | ||||
-rw-r--r-- | Lib/typing.py | 2 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2020-11-02-01-31-15.bpo-42233.YxRj-h.rst | 3 |
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. |