Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Core validation logic for pydantic written in rust

License

NotificationsYou must be signed in to change notification settings

pydantic/pydantic-core

Repository files navigation

CICoveragepypiversionslicense

This package provides the core functionality forpydantic validation and serialization.

Pydantic-core is currently around 17x faster than pydantic V1.Seetests/benchmarks/ for details.

Example of direct usage

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]    """

Getting Started

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 development
  • make build-prod to perform an optimised build for benchmarking
  • make test to run the tests
  • make testcov to run the tests and generate a coverage report
  • make lint to run the linter
  • make format to format python and rust code
  • make to runformat build-dev lint test

Profiling

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.

Releasing

  1. Bump package version locally. Do not just editCargo.toml on Github, you need bothCargo.toml andCargo.lock to be updated.
  2. Make a PR for the version bump and merge it.
  3. Go tohttps://github.com/pydantic/pydantic-core/releases and click "Draft a new release"
  4. In the "Choose a tag" dropdown enter the new tagv<the.new.version> and select "Create new tag on publish" when the option appears.
  5. Enter the release title in the form "v<the.new.version> "
  6. Click Generate release notes button
  7. Click Publish release
  8. Go tohttps://github.com/pydantic/pydantic-core/actions and ensure that all build for release are done successfully.
  9. Go tohttps://pypi.org/project/pydantic-core/ and ensure that the latest release is published.
  10. Done 🎉

[8]ページ先頭

©2009-2025 Movatter.jp