This release makes the library PEP 561 compatible by adding a py.typed
file. It also fixes some mypy issues that were previously ignored.
While there is still some work necessary to make the library fully compatible with mypy (see #116), this release enables mypy to detect the type annotations in the library without the need for stub files.
Important note / breaking changes
This update was originally released as patch version 0.10.1, but was then yanked and later re-released as a new minor version instead.
The update does not introduce any breaking changes in the code. However, it may result in mypy errors in your project which have previously not been discovered by mypy, thus leading to failing CI pipelines. Keep this in mind when updating the library.
Some of the issues found by mypy currently need to be ignored using # type: ignore
comments, until the library is fully compatible with mypy (#116). Examples:
Return type "X" of "validate" incompatible with return type "Y" in supertype "SomeBaseValidator" [override]
:
This can happen when you subclass a validator and change the return type of thevalidate
method, which technically violates the Liskov substitution principle. However, in the case of validators, that's intentional.Item "UnsetValueType" of "X | UnsetValueType" has no attribute "Y"
:
This can happen despite of conditions likeif some_field is not UnsetValue:
, because mypy doesn't know thatUnsetValue
is a sentinel object, thus not being able to narrow down the type. A possible workaround that doesn't require# type: ignore
would be to define a Type Guard](https://mypy.readthedocs.io/en/stable/type_narrowing.html#user-defined-type-guards) and use that instead of the bare condition.
We will hopefully find better solutions for these problems in the future.
Added
- Add
py.typed
file to make the package PEP 561 compatible. #125
Fixed
- Explicitly re-export imports in
__init__.py
by defining__all__
to fix mypy issues. #125