Pydantic and Mypy
This project uses Mypy for typechecking, and Pydantic for runtime validation.
While Pydantic uses type annotations to determine runtime validation behavior, it also
effectively overrides your annotation with Any
(try reveal_type(MyModel)
!). This is
because Pydantic needs to be able to convert compatible values. Pydantic’s mypy
plugin, which we use,
offers an init_typed
setting, which we do not use, to “correctly” annotate the
__init__
method of models, with the downside that Mypy throws errors when you take
advantage of Pydantic’s type conversion behavior.
For this reason, it is expected that QGreenland config files would pass type checking when instantiating Pydantic models with incorrect field types. These would instead fail runtime validation.