Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork417
Comments
Fixoptional validator to accept tuples of len > 1#1496
Fixoptional validator to accept tuples of len > 1#1496finite-state-machine wants to merge 10 commits intopython-attrs:mainfrom
optional validator to accept tuples of len > 1#1496Conversation
finite-state-machine commentedJan 4, 2026 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
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? |
finite-state-machine commentedJan 4, 2026 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
hynek commentedJan 5, 2026
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 forhttps://play.ty.dev/ so we could report it to them? |
Uh oh!
There was an error while loading.Please reload this page.
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'vealso 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 usingsemantic newlines.changelog.d.