It works by letting you write tests that assert that something should be true for every case, not just the ones you happen to think of.»
Third, Pydantic, «Data validation and settings management using python type annotations. pydantic enforces type hints at runtime, and provides user friendly errors when data is invalid. Define how data should be in pure, canonical python; validate it with pydantic.» This includes support for "custom" (user-defined) types. Pydantic uses type hinting from Versions 3.6 and later of Python.
A plug-in for Pydantic supports Hypothesis. Used together, Pydantic 1.8 and Hypothesis v5.29.0 allow Hypothesis to automatically load support for custom types like PaymentCardNumber (a credit-card number) and PositiveFloat. Current releases are Pydantic 1.8.1 and Hypothesis 6.10.0.
Documentation for Hypothesis on Read the Docs
Hypothesis on PyPi
Installing Hypothesis from source
Documentation for Pydantic on Help Manual
Documentation for Pydantic's Hypothesis plug-in
Pydantic on PyPi
Pydantic on GitHub
The Overview page for Pydantic offers the following Rationale, which makes me think that it might be of interest to Leo's users and Leo's developers:
«So pydantic uses some cool new language features, but why should I actually go and use it?
plays nicely with your IDE/linter/brain There's no new schema definition micro-language to learn. If you know how to use python type hints, you know how to use pydantic. Data structures are just instances of classes you define with type annotations, so auto-completion, linting, mypy, IDEs (especially PyCharm), and your intuition should all work properly with your validated data.
dual use pydantic's BaseSettings class allows pydantic to be used in both a "validate this request data" context and in a "load my system settings" context. The main differences are that system settings can be read from environment variables, and more complex objects like DSNs and python objects are often required.
fast In benchmarks pydantic is faster than all other tested libraries.
validate complex structures use of recursive pydantic models, typing's standard types (e.g. List, Tuple, Dictetc.) and validators allow complex data schemas to be clearly and easily defined, validated, and parsed.
extensible pydantic allows custom data types to be defined or you can extend validation with methods on a model decorated with the validator decorator.
dataclasses integration As well as BaseModel, pydantic provides a dataclass decorator which creates (almost) vanilla python dataclasses with input data parsing and validation.»
These links might be of interest to Edward and others developing Python code, including Leo.
First, a praise of property-based testing, with examples that differentiate it from example-based testing.