Data validation and settings management using python 3.6 type hinting
Project description
Data validation and settings management using Python type hinting.
Fast and extensible, pydantic plays nicely with your linters/IDE/brain. Define how data should be in pure, canonical Python 3.6+; validate it with pydantic.
Help
See documentation for more details.
Installation
Install using pip install -U pydantic or conda install pydantic -c conda-forge. For more installation options to make pydantic even faster, see Install section in the documentation.
A Simple Example
from datetime import datetime
from typing import List
from pydantic import BaseModel
class User(BaseModel):
id: int
name = 'John Doe'
signup_ts: datetime = None
friends: List[int] = []
external_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']}
user = User(**external_data)
print(user)
# > User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3]
print(user.id)
# > 123
Contributing
For guidance on setting up a development environment and how to make a contribution to pydantic, see the Contributing to Pydantic.
History
v0.29 (2019-06-19)
support dataclasses.InitVar, #592 by @pfrederiks
Updated documentation to elucidate the usage of Union when defining multiple types under an attribute’s annotation and showcase how the type-order can affect marshalling of provided values, #594 by @somada141
v0.28 (2019-06-06)
fix support for JSON Schema generation when using models with circular references in Python 3.7, #572 by @tiangolo
support __post_init_post_parse__ on dataclasses, #567 by @sevaho
allow dumping dataclasses to JSON, #575 by @samuelcolvin and @DanielOberg
ORM mode, #562 by @samuelcolvin
fix pydantic.compiled on ipython, #573 by @dmontagu and @samuelcolvin
v0.27 (2019-05-30)
breaking change _pydantic_post_init to execute dataclass’ original __post_init__ before validation, #560 by @HeavenVolkoff
fix handling of generic types without specified parameters, #550 by @dmontagu
breaking change (maybe): this is the first release compiled with cython, see the docs and please submit an issue if you run into problems
v0.27.0a1 (2019-05-26)
compiling with cython, manylinux binaries, some other performance improvements, #548 by @samuelcolvin
v0.26 (2019-05-22)
fix to schema generation for IPvAnyAddress, IPvAnyInterface, IPvAnyNetwork #498 by @pilosus
Breaking Change: fix .dict(skip_keys=True) skipping values set via alias (this involves changing validate_model() to always returns Tuple[Dict[str, Any], Set[str], Optional[ValidationError]]), #517 by @sommd
fix to schema generation for IPv4Address, IPv6Address, IPv4Interface, IPv6Interface, IPv4Network, IPv6Network #532 by @euri10
add Color type, #504 by @pilosus and @samuelcolvin
v0.25 (2019-05-05)
Improve documentation on self-referencing models and annotations, #487 by @theenglishway
fix .dict() with extra keys, #490 by @JaewonKim
v0.24 (2019-04-23)
fix handling ForwardRef in sub-types, like Union, #464 by @tiangolo
Support custom validators for dataclasses, #454 by @primal100
fix parse_obj to cope with dict-like objects, #472 by @samuelcolvin
fix to schema generation in nested dataclass-based models, #474 by @NoAnyLove
fix json for Path, FilePath, and DirectoryPath objects, #473 by @mikegoodspeed
v0.23 (2019-04-04)
improve documentation for contributing section, #441 by @pilosus
improve README.rst to include essential information about the package, #446 by @pilosus
fix black deprecation warnings after update, #451 by @pilosus
fix ForwardRef collection bug, #450 by @tigerwings
fix JSON serialization for ipaddress types, #333 by @pilosus
v0.22 (2019-03-29)
v0.21.0 (2019-03-15)
fix typo in NoneIsNotAllowedError message, #414 by @YaraslauZhylko
add IPvAnyAddress, IPv4Address and IPv6Address types, #333 by @pilosus
v0.20.1 (2019-02-26)
fix type hints of parse_obj and similar methods, #405 by @erosennin
fix submodel validation, #403 by @samuelcolvin
correct type hints for ValidationError.json, #406 by @layday
v0.20.0 (2019-02-18)
fix tests for python 3.8, #396 by @samuelcolvin
Adds fields to the dir method for autocompletion in interactive sessions, #398 by @dgasmith
support ForwardRef (and therefore from __future__ import annotations) with dataclasses, #397 by @samuelcolvin
v0.20.0a1 (2019-02-13)
breaking change (maybe): more sophisticated argument parsing for validators, any subset of values, config and field is now permitted, eg. (cls, value, field), however the variadic key word argument (”**kwargs”) must be called kwargs, #388 by @samuelcolvin
breaking change: Adds skip_defaults argument to BaseModel.dict() to allow skipping of fields that were not explicitly set, signature of Model.construct() changed, #389 by @dgasmith
Fix extra behaviour for multiple inheritance/mix-ins, #394 by @YaraslauZhylko
v0.19.0 (2019-02-04)
Support Callable type hint, fix #279 by @proofit404
Fix schema for fields with validator decorator, fix #375 by @tiangolo
Add multiple_of constraint to ConstrainedDecimal, ConstrainedFloat, ConstrainedInt and their related types condecimal, confloat, and conint #371, thanks @StephenBrown2
Deprecated ignore_extra and allow_extra Config fields in favor of extra, #352 by @liiight
Add type annotations to all functions, test fully with mypy, #373 by @samuelcolvin
fix for ‘missing’ error with validate_all or validate_always, #381 by @samuelcolvin
Change the second/millisecond watershed for date/datetime parsing to 2e10, #385 by @samuelcolvin
v0.18.2 (2019-01-22)
Fix to schema generation with Optional fields, fix #361 by @samuelcolvin
v0.18.1 (2019-01-17)
adding MANIFEST.in to include license in package .tar.gz, #358 by @samuelcolvin
v0.18.0 (2019-01-13)
breaking change: don’t call validators on keys of dictionaries, #254 by @samuelcolvin
Fix validators with always=True when the default is None or the type is optional, also prevent whole validators being called for sub-fields, fix #132 by @samuelcolvin
improve documentation for settings priority and allow it to be easily changed, #343 by @samuelcolvin
fix ignore_extra=False and allow_population_by_alias=True, fix #257 by @samuelcolvin
breaking change: Set BaseConfig attributes min_anystr_length and max_anystr_length to None by default, fix #349 in #350 by @tiangolo
add support for postponed annotations, #348 by @samuelcolvin
v0.17.0 (2018-12-27)
prevent validators being called repeatedly after inheritance, #327 by @samuelcolvin
prevent duplicate validator check in ipython, fix #312 by @samuelcolvin
add “Using Pydantic” section to docs, #323 by @tiangolo & #326 by @samuelcolvin
fix schema generation for fields annotated as : dict, : list, : tuple and : set, #330 & #335 by @nkonin
add support for constrained strings as dict keys in schema, #332 by @tiangolo
support for passing Config class in dataclasses decorator, #276 by @jarekkar (breaking change: this supersedes the validate_assignment argument with config)
support for nested dataclasses, #334 by @samuelcolvin
better errors when getting an ImportError with PyObject, #309 by @samuelcolvin
rename get_validators to __get_validators__, deprecation warning on use of old name, #338 by @samuelcolvin
support ClassVar by excluding such attributes from fields, #184 by @samuelcolvin
v0.16.1 (2018-12-10)
fix create_model to correctly use the passed __config__, #320 by @hugoduncan
v0.16.0 (2018-12-03)
breaking change: refactor schema generation to be compatible with JSON Schema and OpenAPI specs, #308 by @tiangolo
add schema to schema module to generate top-level schemas from base models, #308 by @tiangolo
add additional fields to Schema class to declare validation for str and numeric values, #311 by @tiangolo
rename _schema to schema on fields, #318 by @samuelcolvin
add case_insensitive option to BaseSettings Config, #277 by @jasonkuhrt
v0.15.0 (2018-11-18)
move codebase to use black, #287 by @samuelcolvin
fix alias use in settings, #286 by @jasonkuhrt and @samuelcolvin
fix datetime parsing in parse_date, #298 by @samuelcolvin
allow dataclass inheritance, fix #293 by @samuelcolvin
fix PyObject = None, fix #305 by @samuelcolvin
allow Pattern type, fix #303 by @samuelcolvin
v0.14.0 (2018-10-02)
dataclasses decorator, #269 by @Gaunt and @samuelcolvin
v0.13.1 (2018-09-21)
fix issue where int_validator doesn’t cast a bool to an int #264 by @nphyatt
add deep copy support for BaseModel.copy() #249, @gangefors
v0.13.0 (2018-08-25)
raise an exception if a field’s name shadows an existing BaseModel attribute #242
add UrlStr and urlstr types #236
timedelta json encoding ISO8601 and total seconds, custom json encoders #247, by @cfkanesan and @samuelcolvin
allow timedelta objects as values for properties of type timedelta (matches datetime etc. behavior) #247
v0.12.1 (2018-07-31)
fix schema generation for fields defined using typing.Any #237
v0.12.0 (2018-07-31)
v0.11.2 (2018-07-05)
v0.11.1 (2018-07-02)
Allow arbitrary types in model #209, thanks @oldPadavan
v0.11.0 (2018-06-28)
v0.10.0 (2018-06-11)
add Config.allow_population_by_alias #160, thanks @bendemaree
breaking change: removed Config.min_number_size and Config.max_number_size #183, thanks @Gr1N
breaking change: correct behaviour of lt and gt arguments to conint etc. #188 for the old behaviour use le and ge #194, thanks @jaheba
added error context and ability to redefine error message templates using Config.error_msg_templates #183, thanks @Gr1N
fix typo in validator exception #150
copy defaults to model values, so different models don’t share objects #154
v0.9.1 (2018-05-10)
v0.9.0 (2018-04-28)
tweak email-validator import error message #145
fix parse error of parse_date() and parse_datetime() when input is 0 #144, thanks @YannLuo
add Config.anystr_strip_whitespace and strip_whitespace kwarg to constr, by default values is False #163, thanks @Gr1N
add ConstrainedFloat, confloat, PositiveFloat and NegativeFloat types #166, thanks @Gr1N
v0.8.0 (2018-03-25)
fix type annotation for inherit_config #139
breaking change: check for invalid field names in validators #140
validate attributes of parent models #141
breaking change: email validation now uses email-validator #142
v0.7.1 (2018-02-07)
fix bug with create_model modifying the base class
v0.7.0 (2018-02-06)
added compatibility with abstract base classes (ABCs) #123
breaking change: rename .config to .__config__ on a model
breaking change: remove deprecated .values() on a model, use .dict() instead
remove use of OrderedDict and use simple dict #126
add Config.use_enum_values #127
add wildcard validators of the form @validate('*') #128
v0.6.4 (2018-02-01)
allow python date and times objects #122
v0.6.3 (2017-11-26)
fix direct install without README.rst present
v0.6.2 (2017-11-13)
errors for invalid validator use
safer check for complex models in Settings
v0.6.1 (2017-11-08)
v0.6.0 (2017-11-07)
v0.5.0 (2017-10-23)
v0.4.0 (2017-07-08)
v0.3.0 (2017-06-21)
immutable models via config.allow_mutation = False, associated cleanup and performance improvement #44
immutable helper methods construct() and copy() #53
allow pickling of models #53
setattr is removed as __setattr__ is now intelligent #44
raise_exception removed, Models now always raise exceptions #44
instance method validators removed
django-restful-framework benchmarks added #47
fix inheritance bug #49
make str type stricter so list, dict etc are not coerced to strings. #52
add StrictStr which only always strings as input #52
v0.2.1 (2017-06-07)
pypi and travis together messed up the deploy of v0.2 this should fix it
v0.2.0 (2017-06-07)
breaking change: values() on a model is now a method not a property, takes include and exclude arguments
allow annotation only fields to support mypy
add pretty to_string(pretty=True) method for models
v0.1.0 (2017-06-03)
add docs
add history
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
File details
Details for the file pydantic-0.29.tar.gz
.
File metadata
- Download URL: pydantic-0.29.tar.gz
- Upload date:
- Size: 64.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6901572483a00d53aaba9121c6261017334511c44864b00b36714b32cc7af712 |
|
MD5 | 7c5cd69b782c3f8cb845b7866f187c17 |
|
BLAKE2b-256 | 6a3c2ac70b002fc3be4fa6809250157dd258db580bce2ef96a9aac10b853a057 |
File details
Details for the file pydantic-0.29-py36.py37.py38-none-any.whl
.
File metadata
- Download URL: pydantic-0.29-py36.py37.py38-none-any.whl
- Upload date:
- Size: 59.7 kB
- Tags: Python 3.6, Python 3.7, Python 3.8
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 70a5cbab8b52ac3e5f9660a8ad028581095e48abc4a0fc67d1b2bf69e8a51d03 |
|
MD5 | fe0bc615f00054379540b2dc69714111 |
|
BLAKE2b-256 | 95d42a4b88d9ea11283ca9d7853eebe80ec07e2201a55f36e1435ec2f9db2f22 |
File details
Details for the file pydantic-0.29-cp37-cp37m-manylinux1_x86_64.whl
.
File metadata
- Download URL: pydantic-0.29-cp37-cp37m-manylinux1_x86_64.whl
- Upload date:
- Size: 4.8 MB
- Tags: CPython 3.7m
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e4968f16f448d7c3026b0197bd29e78b5f39a7d27dbe22d5b3f07fb8602a2dc1 |
|
MD5 | fbf1e6944fbc250cf4a42680bb6c25f0 |
|
BLAKE2b-256 | 9b6d17382726b327beb1a83efb55d02998d0376f9554127350be74351e72d36b |
File details
Details for the file pydantic-0.29-cp37-cp37m-manylinux1_i686.whl
.
File metadata
- Download URL: pydantic-0.29-cp37-cp37m-manylinux1_i686.whl
- Upload date:
- Size: 4.4 MB
- Tags: CPython 3.7m
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 549c5d05138b7e0f33bd24d4313783c90342d0595d824e02ceb562a992c78239 |
|
MD5 | 3e24b7a5abaf887668c8729b761eb204 |
|
BLAKE2b-256 | aa6bb7df9f778190b4117b8338f0265901e2fa9bbb4431acc5b8ffed9e714653 |
File details
Details for the file pydantic-0.29-cp36-cp36m-manylinux1_x86_64.whl
.
File metadata
- Download URL: pydantic-0.29-cp36-cp36m-manylinux1_x86_64.whl
- Upload date:
- Size: 4.8 MB
- Tags: CPython 3.6m
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 098ffe36047a35f78dbc0d8f7c2d40da053e35158b6f4326c50d669c56e48ea7 |
|
MD5 | c88042f61094bb63c60006173c1c8700 |
|
BLAKE2b-256 | 7894651b85ed41e10a750b0ded46e3afa81540626baa01eb5685440598026cfc |
File details
Details for the file pydantic-0.29-cp36-cp36m-manylinux1_i686.whl
.
File metadata
- Download URL: pydantic-0.29-cp36-cp36m-manylinux1_i686.whl
- Upload date:
- Size: 4.4 MB
- Tags: CPython 3.6m
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9d34421072a7df679638e5896a4a15f48ffbbfb8a57eb5fac6c45806269d0dc0 |
|
MD5 | 5a9306fb81ed7593ab4773f5764e2dce |
|
BLAKE2b-256 | 9b0e7282a6673884abcd6f263b0bacc85304eb89453c56c86cf45c33155bb1c2 |