- Notifications
You must be signed in to change notification settings - Fork293
Core validation logic for pydantic written in rust
License
pydantic/pydantic-core
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This package provides the core functionality forpydantic validation and serialization.
Pydantic-core is currently around 17x faster than pydantic V1.Seetests/benchmarks/
for details.
NOTE: You should not need to use pydantic-core directly; instead, use pydantic, which in turn uses pydantic-core.
frompydantic_coreimportSchemaValidator,ValidationErrorv=SchemaValidator( {'type':'typed-dict','fields': {'name': {'type':'typed-dict-field','schema': {'type':'str', }, },'age': {'type':'typed-dict-field','schema': {'type':'int','ge':18, }, },'is_developer': {'type':'typed-dict-field','schema': {'type':'default','schema': {'type':'bool'},'default':True, }, }, }, })r1=v.validate_python({'name':'Samuel','age':35})assertr1== {'name':'Samuel','age':35,'is_developer':True}# pydantic-core can also validate JSON directlyr2=v.validate_json('{"name": "Samuel", "age": 35}')assertr1==r2try:v.validate_python({'name':'Samuel','age':11})exceptValidationErrorase:print(e)""" 1 validation error for model age Input should be greater than or equal to 18 [type=greater_than_equal, context={ge: 18}, input_value=11, input_type=int] """
You'll need rust stableinstalled, or rust nightly if you want to generate accurate coverage.
With rust and python 3.9+ installed, compiling pydantic-core should be possible with roughly the following:
# clone this repo or your forkgit clone git@github.com:pydantic/pydantic-core.gitcd pydantic-core# create a new virtual envpython3 -m venv envsource env/bin/activate# install dependencies and install pydantic-coremake install
That should be it, the example shown above should now run.
You might find it useful to look atpython/pydantic_core/_pydantic_core.pyi
andpython/pydantic_core/core_schema.py
for more information on the python API,beyond that,tests/
provide a large number of examples of usage.
If you want to contribute to pydantic-core, you'll want to use some other make commands:
make build-dev
to build the package during developmentmake build-prod
to perform an optimised build for benchmarkingmake test
to run the testsmake testcov
to run the tests and generate a coverage reportmake lint
to run the lintermake format
to format python and rust codemake
to runformat build-dev lint test
It's possible to profile the code using theflamegraph
utility fromflamegraph-rs
. (Tested on Linux.) You can install this withcargo install flamegraph
.
Runmake build-profiling
to install a release build with debugging symbols included (needed for profiling).
Once that is built, you can profile pytest benchmarks with (e.g.):
flamegraph -- pytest tests/benchmarks/test_micro_benchmarks.py -k test_list_of_ints_core_py --benchmark-enable
Theflamegraph
command will produce an interactive SVG atflamegraph.svg
.
- Bump package version locally. Do not just edit
Cargo.toml
on Github, you need bothCargo.toml
andCargo.lock
to be updated. - Make a PR for the version bump and merge it.
- Go tohttps://github.com/pydantic/pydantic-core/releases and click "Draft a new release"
- In the "Choose a tag" dropdown enter the new tag
v<the.new.version>
and select "Create new tag on publish" when the option appears. - Enter the release title in the form "v<the.new.version> "
- Click Generate release notes button
- Click Publish release
- Go tohttps://github.com/pydantic/pydantic-core/actions and ensure that all build for release are done successfully.
- Go tohttps://pypi.org/project/pydantic-core/ and ensure that the latest release is published.
- Done 🎉
About
Core validation logic for pydantic written in rust
Topics
Resources
License
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.