Describe the bug
3.10 introduced PEP-604 which allows writing unions as X | Y over Union[X, Y]. However, internally the type of such annotation is not typing.Union, it's types.UnionType. attrs-strict doesn't recognise it, leading to validation errors.
To Reproduce
from attrs import define, field
from attrs_strict import type_validator
@define
class X:
a: int | None = field(validator=type_validator())
X(a=10)
Expected behavior
The above example should work.
Actual behavior
attrs_strict._error.AttributeTypeError: a must be int | None (got 10 that is a <class 'int'>)
Environment (please complete the following information):
- Operating System and Version: macOS 11.5.2
- Python version: 3.10.6
Additional context
>>> X.__annotations__
{'a': int | None}
>>> X.__annotations__['a']
int | None
>>> type(X.__annotations__['a'])
<class 'types.UnionType'>
>>> X.__annotations__['a'].__args__
(<class 'int'>, <class 'NoneType'>)
Here's a similar issue in pydantic related to union types as a reference: pydantic/pydantic#3300
Describe the bug
3.10 introduced PEP-604 which allows writing unions as
X | YoverUnion[X, Y]. However, internally the type of such annotation is nottyping.Union, it'stypes.UnionType.attrs-strictdoesn't recognise it, leading to validation errors.To Reproduce
Expected behavior
The above example should work.
Actual behavior
attrs_strict._error.AttributeTypeError: a must be int | None (got 10 that is a <class 'int'>)Environment (please complete the following information):
Additional context
Here's a similar issue in pydantic related to union types as a reference: pydantic/pydantic#3300