Fix optional validator to accept tuples of len > 1#1496
Fix optional 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
|
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.