Skip to main content

BuildStatus Coverage pypi CondaForge downloads versions license

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.32.2 (2019-08-17)

  • fix __post_init__ usage with dataclass inheritance, fix #739 by @samuelcolvin

  • fix required fields validation on GenericModels classes, #742 by @amitbl

  • fix defining custom Schema on GenericModel fields, #754 by @amitbl

v0.32.1 (2019-08-08)

v0.32 (2019-08-06)

  • add model name to ValidationError error message, #676 by @dmontagu

  • breaking change: remove __getattr__ and rename __values__ to __dict__ on BaseModel, deprecation warning on use __values__ attr, attributes access speed increased up to 14 times, #712 by @MrMrRobat

  • support ForwardRef (without self-referencing annotations) in Python 3.6, #706 by @koxudaxi

  • implement schema_extra in Config sub-class, #663 by @tiangolo

v0.31.1 (2019-07-31)

  • fix json generation for EnumError, #697 by @dmontagu

  • update numerous dependencies

v0.31 (2019-07-24)

v0.30.1 (2019-07-15)

  • fix so nested classes which inherit and change __init__ are correctly processed while still allowing self as a parameter, #644 by @lnaden and @dgasmith

v0.30 (2019-07-07)

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

  • add conlist type, #583 by @hmvp

  • add support for generics, #595 by @dmontagu

v0.28 (2019-06-06)

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)

  • fix JSON Schema for list, tuple, and set, #540 by @tiangolo

  • 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

  • fix variable length tuples support, #495 by @pilosus

  • fix return type hint for create_model, #526 by @dmontagu

  • 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)

v0.24 (2019-04-23)

v0.23 (2019-04-04)

v0.22 (2019-03-29)

v0.21.0 (2019-03-15)

v0.20.1 (2019-02-26)

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

  • add py.typed marker file for PEP-561 support, #391 by @je-l

  • 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)

v0.18.1 (2019-01-17)

  • add ConstrainedBytes and conbytes types, #315 @Gr1N

  • 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)

  • fix schema for timedelta as number, #325 by @tiangolo

  • 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)

v0.14.0 (2018-10-02)

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)

  • add by_alias argument in .dict() and .json() model methods #205

  • add Json type support #214

  • support tuples #227

  • major improvements and changes to schema #213

v0.11.2 (2018-07-05)

  • add NewType support #115

  • fix list, set & tuple validation #225

  • separate out validate_model method, allow errors to be returned along with valid values #221

v0.11.1 (2018-07-02)

v0.11.0 (2018-06-28)

  • make list, tuple and set types stricter #86

  • breaking change: remove msgpack parsing #201

  • add FilePath and DirectoryPath types #10

  • model schema generation #190

  • JSON serialisation of models and schemas #133

v0.10.0 (2018-06-11)

  • add Config.allow_population_by_alias #160, thanks @bendemaree

  • breaking change: new errors format #179, thanks @Gr1N

  • 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)

  • allow custom get_field_config on config classes #159

  • add UUID1, UUID3, UUID4 and UUID5 types #167, thanks @Gr1N

  • modify some inconsistent docstrings and annotations #173, thanks @YannLuo

  • fix type annotations for exotic types #171, thanks @Gr1N

  • re-use type validators in exotic types #171

  • scheduled monthly requirements updates #168

  • add Decimal, ConstrainedDecimal and condecimal types #170, thanks @Gr1N

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

  • add create_model method #113 #125

  • 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)

  • prevent duplicate validators, #101

  • add always kwarg to validators, #102

v0.6.0 (2017-11-07)

  • assignment validation #94, thanks petroswork!

  • JSON in environment variables for complex types, #96

  • add validator decorators for complex validation, #97

  • depreciate values(...) and replace with .dict(...), #99

v0.5.0 (2017-10-23)

  • add UUID validation #89

  • remove index and track from error object (json) if they’re null #90

  • improve the error text when a list is provided rather than a dict #90

  • add benchmarks table to docs #91

v0.4.0 (2017-07-08)

  • show length in string validation error

  • fix aliases in config during inheritance #55

  • simplify error display

  • use unicode ellipsis in truncate

  • add parse_obj, parse_raw and parse_file helper functions #58

  • switch annotation only fields to come first in fields list not last

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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pydantic-0.32.2.tar.gz (69.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pydantic-0.32.2-py36.py37.py38-none-any.whl (63.6 kB view details)

Uploaded Python 3.6Python 3.7Python 3.8

pydantic-0.32.2-cp37-cp37m-manylinux1_x86_64.whl (5.0 MB view details)

Uploaded CPython 3.7m

pydantic-0.32.2-cp37-cp37m-manylinux1_i686.whl (4.6 MB view details)

Uploaded CPython 3.7m

pydantic-0.32.2-cp36-cp36m-manylinux1_x86_64.whl (5.1 MB view details)

Uploaded CPython 3.6m

pydantic-0.32.2-cp36-cp36m-manylinux1_i686.whl (4.6 MB view details)

Uploaded CPython 3.6m

File details

Details for the file pydantic-0.32.2.tar.gz.

File metadata

  • Download URL: pydantic-0.32.2.tar.gz
  • Upload date:
  • Size: 69.8 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.1.0 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.7.1

File hashes

Hashes for pydantic-0.32.2.tar.gz
Algorithm Hash digest
SHA256 6a9335c968e13295430a208487e74d69fef40168b72dea8d975765d14e2da660
MD5 09d886d6c03149a8a49244da9741bedf
BLAKE2b-256 56dd295bd423d42e01604b9656a0dfcd3dc6d49731595fe9bcdaf6e2df797ef4

See more details on using hashes here.

File details

Details for the file pydantic-0.32.2-py36.py37.py38-none-any.whl.

File metadata

  • Download URL: pydantic-0.32.2-py36.py37.py38-none-any.whl
  • Upload date:
  • Size: 63.6 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.1.0 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.7.1

File hashes

Hashes for pydantic-0.32.2-py36.py37.py38-none-any.whl
Algorithm Hash digest
SHA256 e1a63b4e6bf8820833cb6fa239ffbe8eec57ccdd7d66359eff20e68a83c1deeb
MD5 04392b5d40fb283025afa67e682ff42c
BLAKE2b-256 02cf80e08943ac1af41e373f478418a76cac232d3b36ea827c2f89dbbef9a698

See more details on using hashes here.

File details

Details for the file pydantic-0.32.2-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pydantic-0.32.2-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 5.0 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.1.0 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.7.1

File hashes

Hashes for pydantic-0.32.2-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 6f5eb88fe4c21380aa064b7d249763fc6306f0b001d7e7d52d80866d1afc9ed3
MD5 dc580e7f1038e1a693661b6008de6312
BLAKE2b-256 8a9f011c6ed601aa08e2fe2c6ddbd125eec28e06274106c47fda7865e0b04a23

See more details on using hashes here.

File details

Details for the file pydantic-0.32.2-cp37-cp37m-manylinux1_i686.whl.

File metadata

  • Download URL: pydantic-0.32.2-cp37-cp37m-manylinux1_i686.whl
  • Upload date:
  • Size: 4.6 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.1.0 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.7.1

File hashes

Hashes for pydantic-0.32.2-cp37-cp37m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 bc6c6a78647d7a65a493e1107572d993f26a652c49183201e3c7d23924bf7311
MD5 a24fd222911da92cee833c420984e1b6
BLAKE2b-256 a7b836c6edf32e00c09ee478f5367ce6d46da9e80754ee1ee49ef146a90d50ad

See more details on using hashes here.

File details

Details for the file pydantic-0.32.2-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: pydantic-0.32.2-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 5.1 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.1.0 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.7.1

File hashes

Hashes for pydantic-0.32.2-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 ede2d65ae33788d4e26e12b330b4a32c53cb14131c65bca3a59f037c73f6ee7a
MD5 00a6320385cd5b5793154d260cf7ac7f
BLAKE2b-256 86782edcc6e65ec020403ac6ba6deb54c1cf227c49232ce9d98a1ae7ebdfa3a1

See more details on using hashes here.

File details

Details for the file pydantic-0.32.2-cp36-cp36m-manylinux1_i686.whl.

File metadata

  • Download URL: pydantic-0.32.2-cp36-cp36m-manylinux1_i686.whl
  • Upload date:
  • Size: 4.6 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.1.0 requests-toolbelt/0.9.1 tqdm/4.33.0 CPython/3.7.1

File hashes

Hashes for pydantic-0.32.2-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 18598557f0d9ab46173045910ed50458c4fb4d16153c23346b504d7a5b679f77
MD5 ab511866222e00299619657c6df94659
BLAKE2b-256 53a35ad366399e9fe08eac015bba4a891dd3a11e823fcfbc071695b37135d916

See more details on using hashes here.

Release history Release notifications | RSS feed

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page