-
-
Notifications
You must be signed in to change notification settings - Fork 410
Fix optional validator to accept tuples of len > 1
#1496
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Fix optional validator to accept tuples of len > 1
#1496
Conversation
|
The "ty" type checker seems to be doing a poor job of inferring the type of the https://github.com/python-attrs/attrs/actions/runs/20684969634/job/59384179969?pr=1496 What would you suggest, @Tinche? |
|
If the type hints are correct, there should be no workarounds to appease ty, but a Would it be possible to create a minimal reproducer for https://play.ty.dev/ so we could report it to them? |
IMPORTANT
The pre-commit hooks are reverting my work-around for the "ty" issue, even with an attempted work around for the pre-commit issue. Rather than adding yet another work-around, I'm going to see what the maintainers suggest.
Summary
Replaces #1495 (I renamed my branch, which closed the draft PR.)
The
optionalvalidator (attrs.validators.optional) should accept anytupleof validators, just as it accepts anylistof validators. It looks like the peculiar type annotation syntax for variable-lengthtuples (tuple[<type>, ...]) was overlooked, and the exactly-one-element form (tuple[<type>]) was inadvertently used instead.The proposed change corrects the annotation.
Pull Request Check List
mainbranch – use a separate branch!Our CI fails if coverage is not 100%.
.pyi).typing-examples/baseline.pyor, if necessary,typing-examples/mypy.py.attr/__init__.pyi, they've also been re-imported inattrs/__init__.pyi.docs/api.rstby hand.@attr.s()and@attrs.define()have to be added by hand too.versionadded,versionchanged, ordeprecateddirectives.The next version is the second number in the current release + 1.
The first number represents the current year.
So if the current version on PyPI is 22.2.0, the next version is gonna be 22.3.0.
If the next version is the first in the new year, it'll be 23.1.0.
attrs.define()andattr.s(), you have to add version directives to both..rstand.mdfiles is written using semantic newlines.changelog.d.