diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2022-04-29 21:01:40 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-29 21:01:40 (GMT) |
commit | 81120b6754c67a8f1f00cbc3af6963c0e1945911 (patch) | |
tree | bc93c2acfa17ba7829421404c20f34d5767cd9a0 /Lib | |
parent | f6656163de483003697d510031827b7512056d55 (diff) | |
download | cpython-81120b6754c67a8f1f00cbc3af6963c0e1945911.zip cpython-81120b6754c67a8f1f00cbc3af6963c0e1945911.tar.gz cpython-81120b6754c67a8f1f00cbc3af6963c0e1945911.tar.bz2 |
bpo-44791: Accept ellipsis as the last argument of typing.Concatenate (#30969)
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_typing.py | 12 | ||||
-rw-r--r-- | Lib/typing.py | 7 |
2 files changed, 6 insertions, 13 deletions
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index dab549b..929f0df 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -1755,8 +1755,7 @@ class BaseCallableTests: self.assertEqual(C[[], int], Callable[[int], int]) self.assertEqual(C[Concatenate[str, P2], int], Callable[Concatenate[int, str, P2], int]) - with self.assertRaises(TypeError): - C[..., int] + self.assertEqual(C[..., int], Callable[Concatenate[int, ...], int]) C = Callable[Concatenate[int, P], int] self.assertEqual(repr(C), @@ -1767,8 +1766,7 @@ class BaseCallableTests: self.assertEqual(C[[]], Callable[[int], int]) self.assertEqual(C[Concatenate[str, P2]], Callable[Concatenate[int, str, P2], int]) - with self.assertRaises(TypeError): - C[...] + self.assertEqual(C[...], Callable[Concatenate[int, ...], int]) def test_errors(self): Callable = self.Callable @@ -6739,8 +6737,7 @@ class ConcatenateTests(BaseTestCase): self.assertEqual(C[int, []], (int,)) self.assertEqual(C[int, Concatenate[str, P2]], Concatenate[int, str, P2]) - with self.assertRaises(TypeError): - C[int, ...] + self.assertEqual(C[int, ...], Concatenate[int, ...]) C = Concatenate[int, P] self.assertEqual(C[P2], Concatenate[int, P2]) @@ -6748,8 +6745,7 @@ class ConcatenateTests(BaseTestCase): self.assertEqual(C[str, float], (int, str, float)) self.assertEqual(C[[]], (int,)) self.assertEqual(C[Concatenate[str, P2]], Concatenate[int, str, P2]) - with self.assertRaises(TypeError): - C[...] + self.assertEqual(C[...], Concatenate[int, ...]) class TypeGuardTests(BaseTestCase): def test_basics(self): diff --git a/Lib/typing.py b/Lib/typing.py index f4d4fa4..b250f29 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -714,9 +714,9 @@ def Concatenate(self, parameters): raise TypeError("Cannot take a Concatenate of no types.") if not isinstance(parameters, tuple): parameters = (parameters,) - if not isinstance(parameters[-1], ParamSpec): + if not (parameters[-1] is ... or isinstance(parameters[-1], ParamSpec)): raise TypeError("The last parameter to Concatenate should be a " - "ParamSpec variable.") + "ParamSpec variable or ellipsis.") msg = "Concatenate[arg, ...]: each arg must be a type." parameters = (*(_type_check(p, msg) for p in parameters[:-1]), parameters[-1]) return _ConcatenateGenericAlias(self, parameters, @@ -1641,9 +1641,6 @@ class _ConcatenateGenericAlias(_GenericAlias, _root=True): return (*params[:-1], *params[-1]) if isinstance(params[-1], _ConcatenateGenericAlias): params = (*params[:-1], *params[-1].__args__) - elif not isinstance(params[-1], ParamSpec): - raise TypeError("The last parameter to Concatenate should be a " - "ParamSpec variable.") return super().copy_with(params) |