Skip to content

Conversation

@bzoracler
Copy link
Contributor

@bzoracler bzoracler commented Sep 13, 2025

@python-cla-bot
Copy link

python-cla-bot bot commented Sep 13, 2025

All commit authors signed the Contributor License Agreement.

CLA signed

@bedevere-app
Copy link

bedevere-app bot commented Sep 13, 2025

Most changes to Python require a NEWS entry. Add one using the blurb_it web app or the blurb command-line tool.

If this change has little impact on Python users, wait for a maintainer to apply the skip news label instead.

Lib/typing.py Outdated
elif isinstance(args[i], list):
args = (*args[:i], tuple(args[i]), *args[i+1:])
else:
args = (*args[:i], args[i], *args[i + 1:])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this can be simplified to args = tuple(args)

@@ -0,0 +1 @@
Fix failure during parameterization of generics when a non-type-list `ParamSpec` default is followed by another type variable default, and the `ParamSpec` is not provided as a type argument.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We use rst, not md in NEWS, so please use double backticks.

Lib/typing.py Outdated
# Convert lists to tuples to help other libraries cache the results.
elif isinstance(args[i], list):
args = (*args[:i], tuple(args[i]), *args[i+1:])
else:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we create a tuple directly on line 1103 above instead?

@@ -0,0 +1 @@
Fix failure during parameterization of generics when a non-type-list ``ParamSpec`` default is followed by another type variable default, and the ``ParamSpec`` is not provided as a type argument.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I don't understand what "non-type-list" is. I propose this wording:

Suggested change
Fix failure during parameterization of generics when a non-type-list ``ParamSpec`` default is followed by another type variable default, and the ``ParamSpec`` is not provided as a type argument.
Fixes a :exc:`TypeError` when substituting a :class:`ParamSpec` with a default
that is followed by another :class:`TypeVar` with a default.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, the original description was unclear. Unless there are other objections, I'll reduce it to

Fix generic type parameterization raising a :exc:TypeError when omitting a :class:ParamSpec that has a non-type-list default.


"Non-type-list default" refers to the bug occurring if the ParamSpec default isn't a list of types, such as ... or P (another ParamSpec in scope). The bug would not be encountered if the default was a list of types (like [int, str]).

I think the closest wording for this construct in the documentation is actually "list of types" (see e.g. ParamSpec Defaults), but I don't think "list of types" is necessarily better than "type list".

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's say something like "default that is not a list of types". "type list" is definitely less clear to me than "list of types".

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rewording suggestions done in 9669479

@sergey-miryanov
Copy link
Contributor

@bzoracler Something left to do here? Is it ready for review?

@bzoracler
Copy link
Contributor Author

@sergey-miryanov I think I've addressed everything.

@JelleZijlstra Are there any other concerns?

@JelleZijlstra JelleZijlstra added needs backport to 3.13 bugs and security fixes needs backport to 3.14 bugs and security fixes labels Oct 16, 2025
@JelleZijlstra JelleZijlstra merged commit 379fd02 into python:main Oct 16, 2025
53 checks passed
@miss-islington-app
Copy link

Thanks @bzoracler for the PR, and @JelleZijlstra for merging it 🌮🎉.. I'm working now to backport this PR to: 3.13, 3.14.
🐍🍒⛏🤖

miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Oct 16, 2025
miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Oct 16, 2025
@bedevere-app
Copy link

bedevere-app bot commented Oct 16, 2025

GH-140207 is a backport of this pull request to the 3.14 branch.

@bedevere-app bedevere-app bot removed the needs backport to 3.14 bugs and security fixes label Oct 16, 2025
@bedevere-app
Copy link

bedevere-app bot commented Oct 16, 2025

GH-140208 is a backport of this pull request to the 3.13 branch.

@bedevere-app bedevere-app bot removed the needs backport to 3.13 bugs and security fixes label Oct 16, 2025
@JelleZijlstra
Copy link
Member

@bzoracler it looks like you'll have to re-sign the CLA under a different email address for the backports (#140208 and #140207) to go through. As I understand it this can happen if you have different email addresses associated with your GitHub account and your commits.

@bzoracler bzoracler deleted the issue-138859 branch October 16, 2025 18:40
@bzoracler
Copy link
Contributor Author

@JelleZijlstra oh, it looks like rebasing straight from the GitHub UI made the commits under a different email address (@users.noreply.github.com) because of GitHub email privacy settings. I've signed the CLA with that one as well.

Thanks all!

JelleZijlstra pushed a commit that referenced this pull request Oct 16, 2025
… … (GH-138868) (#140208)

gh-138859: Account for `ParamSpec` defaults that are not lists … (GH-138868)
(cherry picked from commit 379fd02)

Co-authored-by: bzoracler <[email protected]>
JelleZijlstra pushed a commit that referenced this pull request Oct 16, 2025
… … (GH-138868) (#140207)

gh-138859: Account for `ParamSpec` defaults that are not lists … (GH-138868)
(cherry picked from commit 379fd02)

Co-authored-by: bzoracler <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants