]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-138859: Account for `ParamSpec` defaults that are not lists … (#138868)
authorbzoracler <50305397+bzoracler@users.noreply.github.com>
Thu, 16 Oct 2025 12:30:36 +0000 (01:30 +1300)
committerGitHub <noreply@github.com>
Thu, 16 Oct 2025 12:30:36 +0000 (05:30 -0700)
Lib/test/test_typing.py
Lib/typing.py
Misc/NEWS.d/next/Library/2025-09-13-12-19-17.gh-issue-138859.PxjIoN.rst [new file with mode: 0644]

index bc7f14f90a7cf9c3b254ff504430de941a7b2529..db0501d70e3442a00f675a8d9fef7b4f20e24434 100644 (file)
@@ -762,6 +762,16 @@ class TypeParameterDefaultsTests(BaseTestCase):
         self.assertEqual(A[float, [range]].__args__, (float, (range,), float))
         self.assertEqual(A[float, [range], int].__args__, (float, (range,), int))
 
+    def test_paramspec_and_typevar_specialization_2(self):
+        T = TypeVar("T")
+        P = ParamSpec('P', default=...)
+        U = TypeVar("U", default=float)
+        self.assertEqual(P.__default__, ...)
+        class A(Generic[T, P, U]): ...
+        self.assertEqual(A[float].__args__, (float, ..., float))
+        self.assertEqual(A[float, [range]].__args__, (float, (range,), float))
+        self.assertEqual(A[float, [range], int].__args__, (float, (range,), int))
+
     def test_typevartuple_none(self):
         U = TypeVarTuple('U')
         U_None = TypeVarTuple('U_None', default=None)
index 03d5357d4cf51a60a6d4c074d32228b4b0d65540..25234d2d707dd2dfaaa1d325a17d1fe65faded85 100644 (file)
@@ -1113,7 +1113,7 @@ def _paramspec_prepare_subst(self, alias, args):
     params = alias.__parameters__
     i = params.index(self)
     if i == len(args) and self.has_default():
-        args = [*args, self.__default__]
+        args = (*args, self.__default__)
     if i >= len(args):
         raise TypeError(f"Too few arguments for {alias}")
     # Special case where Z[[int, str, bool]] == Z[int, str, bool] in PEP 612.
diff --git a/Misc/NEWS.d/next/Library/2025-09-13-12-19-17.gh-issue-138859.PxjIoN.rst b/Misc/NEWS.d/next/Library/2025-09-13-12-19-17.gh-issue-138859.PxjIoN.rst
new file mode 100644 (file)
index 0000000..a5d4dd0
--- /dev/null
@@ -0,0 +1 @@
+Fix generic type parameterization raising a :exc:`TypeError` when omitting a :class:`ParamSpec` that has a default which is not a list of types.