attrs: mypy/typing false positives
Using attrs 6e7b9f2 and mypy 0.720:
from typing import List, Dict, Any, Union, Optional
import attr
@attr.s
class Foo:
# OK
str_list: List[str] = attr.ib(
validator=attr.validators.deep_iterable(
attr.validators.instance_of(str), attr.validators.instance_of(list)
)
)
# Incompatible types in assignment (expression has type "Optional[List[_T]]", variable has type "Optional[List[str]]")
maybe_str_list: Optional[List[str]] = attr.ib(
validator=attr.validators.optional(
attr.validators.deep_iterable(
attr.validators.instance_of(str), attr.validators.instance_of(list)
)
)
)
# OK
str_dict: Dict[str, Any] = attr.ib(
validator=attr.validators.deep_mapping(
attr.validators.instance_of(str),
attr.validators.instance_of(object),
attr.validators.instance_of(dict),
)
)
# OK
maybe_str_dict: Optional[Dict[str, Any]] = attr.ib(
validator=attr.validators.optional(
attr.validators.deep_mapping(
attr.validators.instance_of(str),
attr.validators.instance_of(object),
attr.validators.instance_of(dict),
)
)
)
# Argument 1 to "instance_of" has incompatible type "Tuple[Type[str], Type[int]]"; expected "Union[Tuple[Type[<nothing>], ...], Type[<nothing>]]"
str_int: Union[str, int] = attr.ib(
validator=attr.validators.instance_of((str, int))
)
# (the error is shown twice for some reason)
# Argument 1 to "instance_of" has incompatible type "Tuple[Type[str], Type[int]]"; expected "Union[Tuple[Type[<nothing>], ...], Type[<nothing>]]"
# Argument 1 to "instance_of" has incompatible type "Tuple[Type[str], Type[int]]"; expected "Union[Tuple[Type[None], ...], Type[None]]"
maybe_str_int: Optional[Union[str, int]] = attr.ib(
validator=attr.validators.optional(attr.validators.instance_of((str, int)))
)
deep_iterable
seems to have an issue when combined with optional
, instance_of
doesn’t like tuples of types.
About this issue
- Original URL
- State: closed
- Created 5 years ago
- Comments: 16 (13 by maintainers)
Commits related to this issue
- Add overloads to instance_of definition. Improves #576 — committed to euresti/attrs by euresti 5 years ago
- Fix some typing issues (#581) * Typecheck stubs in CI and fix type errors. Fixes #578 * Add overloads to instance_of definition. Improves #576 — committed to python-attrs/attrs by euresti 5 years ago
finally got around to update my library and can confirm these typing issues went away. thank you all for your hard work.
As soon as #580 is merged. Dunno when someone finds time for review.
¯\_(ツ)_/¯
ran into this, and attrs master fixes the instance_of being given a tuple.
Paging @mmaslowskicc @euresti @ethanhs 🤞