Skip to content

v0.1.0: Exhibit A ⚖️

Choose a tag to compare

@github-actions github-actions released this 27 Jun 20:24
· 40 commits to main since this release
Immutable release. Only release title and notes can be modified.
ef29864

⚖️ Exhibit A

Probatio is a modern, maintained, MIT-licensed reimplementation of voluptuous (https://github.com/alecthomas/voluptuous), written clean-room: the same public API, no copied code, so it can be kept alive and moved forward. Change the import, keep your schemas.

This is the first public release, and the point of a validation library is whether you would hand it untrusted input, so here is the evidence rather than the adjectives. voluptuous's own 0.16.0 test suite runs against Probatio at 140 passing and 27 deliberate, documented deviations. Home Assistant's config_validation passes 142 of 142 with voluptuous swapped out. Line and branch coverage sit at 100%, type-checked under both mypy and ty, and every untrusted-input surface is fuzzed: a built-in validator only ever raises Invalid, never a raw exception, and that is enforced, not hoped for. It also runs about 2.2 to 2.6 times faster than voluptuous on typical schemas.

It does not stop at parity. Probatio clears voluptuous's own backlog and keeps going: cross-field rules (RequiredWith, RequiredIf, and friends), dataclass and TypedDict schemas, network and format validators, JSON/YAML/TOML loading and dumping, JSON Schema and OpenAPI in both directions, and errors that carry a path and suggest the key you meant.

from probatio import Schema, Required, Optional

schema = Schema({Required("name"): str, Optional("port", default=8080): int})
schema({"name": "app"})
# {'name': 'app', 'port': 8080}

A drop-in swap is usually one import line:

# from voluptuous import Schema, Required, All, Coerce
from probatio import Schema, Required, All, Coerce

This is a 0.x release: the goal is a faithful drop-in, validated against voluptuous's behavior, and some internals may still move before 1.0 as it gathers production feedback.

pip install probatio

📚 Docs: https://probatio.frenck.dev

Put your data to the proof. ⚖️

../Frenck

                       

Blogging my personal ramblings at frenck.dev