Data validation and settings management using python 3.6 type hinting
Project description
pydantic
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 the Install section in the documentation.
A Simple Example
from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel
class User(BaseModel):
id: int
name = 'John Doe'
signup_ts: Optional[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 Contributing to Pydantic.
Reporting a Security Vulnerability
See our security policy.
v1.8 (2021-02-26)
Thank you to pydantic's sponsors: @jorgecarleitao, @BCarley, @chdsbd, @tiangolo, @matin, @linusg, @kevinalh, @koxudaxi, @timdrijvers, @mkeen, @meadsteve, @ginomempin, @primer-io, @and-semakin, @tomthorogood, @AjitZK, @westonsteimel, @Mazyod, @christippett, @CarlosDomingues, @Kludex, @r-m-n for their kind support.
Highlights
- Hypothesis plugin for testing, #2097 by @Zac-HD
- support for
NamedTuple
andTypedDict
, #2216 by @PrettyWood - Support
Annotated
hints on model fields, #2147 by @JacobHayes frozen
parameter onConfig
to allow models to be hashed, #1880 by @rhuille
Changes
- Breaking Change, remove old deprecation aliases from v1, #2415 by @samuelcolvin:
- remove notes on migrating to v1 in docs
- remove
Schema
which was replaced byField
- remove
Config.case_insensitive
which was replaced byConfig.case_sensitive
(defaultFalse
) - remove
Config.allow_population_by_alias
which was replaced byConfig.allow_population_by_field_name
- remove
model.fields
which was replaced bymodel.__fields__
- remove
model.to_string()
which was replaced bystr(model)
- remove
model.__values__
which was replaced bymodel.__dict__
- Breaking Change: always validate only first sublevel items with
each_item
. There were indeed some edge cases with some compound types where the validated items were the last sublevel ones, #1933 by @PrettyWood - Update docs extensions to fix local syntax highlighting, #2400 by @daviskirk
- fix: allow
utils.lenient_issubclass
to handletyping.GenericAlias
objects likelist[str]
in python >= 3.9, #2399 by @daviskirk - Improve field declaration for pydantic
dataclass
by allowing the usage of pydanticField
or'metadata'
kwarg ofdataclasses.field
, #2384 by @PrettyWood - Making
typing-extensions
a required dependency, #2368 by @samuelcolvin - Make
resolve_annotations
more lenient, allowing for missing modules, #2363 by @samuelcolvin - Allow configuring models through class kwargs, #2356 by @MrMrRobat
- Prevent
Mapping
subclasses from always being coerced todict
, #2325 by @ofek - fix: allow
None
for typeOptional[conset / conlist]
, #2320 by @PrettyWood - Support empty tuple type, #2318 by @PrettyWood
- fix:
python_requires
metadata to require >=3.6.1, #2306 by @hukkinj1 - Properly encode
Decimal
with, or without any decimal places, #2293 by @hultner - fix: update
__fields_set__
inBaseModel.copy(update=…)
, #2290 by @PrettyWood - fix: keep order of fields with
BaseModel.construct()
, #2281 by @PrettyWood - Support generating schema for Generic fields, #2262 by @maximberg
- Fix
validate_decorator
so**kwargs
doesn't exclude values when the keyword has the same name as the*args
or**kwargs
names, #2251 by @cybojenix - Prevent overriding positional arguments with keyword arguments in
validate_arguments
, as per behaviour with native functions, #2249 by @cybojenix - add documentation for
con*
type functions, #2242 by @tayoogunbiyi - Support custom root type (aka
__root__
) when usingparse_obj()
with nested models, #2238 by @PrettyWood - Support custom root type (aka
__root__
) withfrom_orm()
, #2237 by @PrettyWood - ensure cythonized functions are left untouched when creating models, based on #1944 by @kollmats, #2228 by @samuelcolvin
- Resolve forward refs for stdlib dataclasses converted into pydantic ones, #2220 by @PrettyWood
- Add support for
NamedTuple
andTypedDict
types. Those two types are now handled and validated when used insideBaseModel
or pydanticdataclass
. Two utils are also addedcreate_model_from_namedtuple
andcreate_model_from_typeddict
, #2216 by @PrettyWood - Do not ignore annotated fields when type is
Union[Type[...], ...]
, #2213 by @PrettyWood - Raise a user-friendly
TypeError
when aroot_validator
does not return adict
(e.g.None
), #2209 by @masalim2 - Add a
FrozenSet[str]
type annotation to theallowed_schemes
argument on thestrict_url
field type, #2198 by @Midnighter - add
allow_mutation
constraint toField
, #2195 by @sblack-usu - Allow
Field
with adefault_factory
to be used as an argument to a function decorated withvalidate_arguments
, #2176 by @thomascobb - Allow non-existent secrets directory by only issuing a warning, #2175 by @davidolrik
- fix URL regex to parse fragment without query string, #2168 by @andrewmwhite
- fix: ensure to always return one of the values in
Literal
field type, #2166 by @PrettyWood - Support
typing.Annotated
hints on model fields. AField
may now be set in the type hint withAnnotated[..., Field(...)
; all other annotations are ignored but still visible withget_type_hints(..., include_extras=True)
, #2147 by @JacobHayes - Added
StrictBytes
type as well asstrict=False
option toConstrainedBytes
, #2136 by @rlizzo - added
Config.anystr_lower
andto_lower
kwarg toconstr
andconbytes
, #2134 by @tayoogunbiyi - Support plain
typing.Tuple
type, #2132 by @PrettyWood - Add a bound method
validate
to functions decorated withvalidate_arguments
to validate parameters without actually calling the function, #2127 by @PrettyWood - Add the ability to customize settings sources (add / disable / change priority order), #2107 by @kozlek
- Fix mypy complaints about most custom pydantic types, #2098 by @PrettyWood
- Add a Hypothesis plugin for easier property-based testing with Pydantic's custom types - usage details here, #2097 by @Zac-HD
- add validator for
None
,NoneType
orLiteral[None]
, #2095 by @PrettyWood - Handle properly fields of type
Callable
with a default value, #2094 by @PrettyWood - Updated
create_model
return type annotation to return type which inherits from__base__
argument, #2071 by @uriyyo - Add merged
json_encoders
inheritance, #2064 by @art049 - allow overwriting
ClassVar
s in sub-models without having to re-annotate them, #2061 by @layday - add default encoder for
Pattern
type, #2045 by @PrettyWood - Add
NonNegativeInt
,NonPositiveInt
,NonNegativeFloat
,NonPositiveFloat
, #1975 by @mdavis-xyz - Use % for percentage in string format of colors, #1960 by @EdwardBetts
- Fixed issue causing
KeyError
to be raised when building schema from multipleBaseModel
with the same names declared in separate classes, #1912 by @JSextonn - Add
rediss
(Redis over SSL) protocol toRedisDsn
Allow URLs withoutuser
part (e.g.,rediss://:pass@localhost
), #1911 by @TrDex - Add a new
frozen
boolean parameter toConfig
(default:False
). Settingfrozen=True
does everything thatallow_mutation=False
does, and also generates a__hash__()
method for the model. This makes instances of the model potentially hashable if all the attributes are hashable, #1880 by @rhuille - fix schema generation with multiple Enums having the same name, #1857 by @PrettyWood
- Added support for 13/19 digits VISA credit cards in
PaymentCardNumber
type, #1416 by @AlexanderSov - fix: prevent
RecursionError
while using recursiveGenericModel
s, #1370 by @xppt - use
enum
fortyping.Literal
in JSON schema, #1350 by @PrettyWood - Fix: some recursive models did not require
update_forward_refs
and silently behaved incorrectly, #1201 by @PrettyWood - Fix bug where generic models with fields where the typevar is nested in another type
a: List[T]
are considered to be concrete. This allows these models to be subclassed and composed as expected, #947 by @daviskirk - Add
Config.copy_on_model_validation
flag. When set toFalse
, pydantic will keep models used as fields untouched on validation instead of reconstructing (copying) them, #265 by @PrettyWood
v1.7.3 (2020-11-30)
Thank you to pydantic's sponsors: @timdrijvers, @BCarley, @chdsbd, @tiangolo, @matin, @linusg, @kevinalh, @jorgecarleitao, @koxudaxi, @primer-api, @mkeen, @meadsteve for their kind support.
- fix: set right default value for required (optional) fields, #2142 by @PrettyWood
- fix: support
underscore_attrs_are_private
with generic models, #2138 by @PrettyWood - fix: update all modified field values in
root_validator
whenvalidate_assignment
is on, #2116 by @PrettyWood - Allow pickling of
pydantic.dataclasses.dataclass
dynamically created from a built-indataclasses.dataclass
, #2111 by @aimestereo - Fix a regression where Enum fields would not propagate keyword arguments to the schema, #2109 by @bm424
- Ignore
__doc__
as private attribute whenConfig.underscore_attrs_are_private
is set, #2090 by @PrettyWood
v1.7.2 (2020-11-01)
- fix slow
GenericModel
concrete model creation, allowGenericModel
concrete name reusing in module, #2078 by @MrMrRobat - keep the order of the fields when
validate_assignment
is set, #2073 by @PrettyWood - forward all the params of the stdlib
dataclass
when converted into pydanticdataclass
, #2065 by @PrettyWood
v1.7.1 (2020-10-28)
Thank you to pydantic's sponsors: @timdrijvers, @BCarley, @chdsbd, @tiangolo, @matin, @linusg, @kevinalh, @jorgecarleitao, @koxudaxi, @primer-api, @mkeen for their kind support.
- fix annotation of
validate_arguments
when passing configuration as argument, #2055 by @layday - Fix mypy assignment error when using
PrivateAttr
, #2048 by @aphedges - fix
underscore_attrs_are_private
causingTypeError
when overriding__init__
, #2047 by @samuelcolvin - Fixed regression introduced in v1.7 involving exception handling in field validators when
validate_assignment=True
, #2044 by @johnsabath - fix: pydantic
dataclass
can inherit from stdlibdataclass
andConfig.arbitrary_types_allowed
is supported, #2042 by @PrettyWood
v1.7 (2020-10-26)
Thank you to pydantic's sponsors: @timdrijvers, @BCarley, @chdsbd, @tiangolo, @matin, @linusg, @kevinalh, @jorgecarleitao, @koxudaxi, @primer-api for their kind support.
Highlights
- python 3.9 support, thanks @PrettyWood
- Private model attributes, thanks @MrMrRobat
- "secrets files" support in
BaseSettings
, thanks @mdgilene - convert stdlib dataclasses to pydantic dataclasses and use stdlib dataclasses in models, thanks @PrettyWood
Changes
- Breaking Change: remove
__field_defaults__
, adddefault_factory
support withBaseModel.construct
. Use.get_default()
method on fields in__fields__
attribute instead, #1732 by @PrettyWood - Rearrange CI to run linting as a separate job, split install recipes for different tasks, #2020 by @samuelcolvin
- Allows subclasses of generic models to make some, or all, of the superclass's type parameters concrete, while also defining new type parameters in the subclass, #2005 by @choogeboom
- Call validator with the correct
values
parameter type inBaseModel.__setattr__
, whenvalidate_assignment = True
in model config, #1999 by @me-ransh - Force
fields.Undefined
to be a singleton object, fixing inherited generic model schemas, #1981 by @daviskirk - Include tests in source distributions, #1976 by @sbraz
- Add ability to use
min_length/max_length
constraints with secret types, #1974 by @uriyyo - Also check
root_validators
whenvalidate_assignment
is on, #1971 by @PrettyWood - Fix const validators not running when custom validators are present, #1957 by @hmvp
- add
deque
to field types, #1935 by @wozniakty - add basic support for python 3.9, #1832 by @PrettyWood
- Fix typo in the anchor of exporting_models.md#modelcopy and incorrect description, #1821 by @KimMachineGun
- Added ability for
BaseSettings
to read "secret files", #1820 by @mdgilene - add
parse_raw_as
utility function, #1812 by @PrettyWood - Support home directory relative paths for
dotenv
files (e.g.~/.env
), #1803 by @PrettyWood - Clarify documentation for
parse_file
to show that the argument should be a file path not a file-like object, #1794 by @mdavis-xyz - Fix false positive from mypy plugin when a class nested within a
BaseModel
is namedModel
, #1770 by @selimb - add basic support of Pattern type in schema generation, #1767 by @PrettyWood
- Support custom title, description and default in schema of enums, #1748 by @PrettyWood
- Properly represent
Literal
Enums whenuse_enum_values
is True, #1747 by @noelevans - Allows timezone information to be added to strings to be formatted as time objects. Permitted formats are
Z
for UTC or an offset for absolute positive or negative time shifts. Or the timezone data can be omitted, #1744 by @noelevans - Add stub
__init__
with python 3.6 signature forForwardRef
, #1738 by @sirtelemak - Fix behaviour with forward refs and optional fields in nested models, #1736 by @PrettyWood
- add
Enum
andIntEnum
as valid types for fields, #1735 by @PrettyWood - Change default value of
__module__
argument ofcreate_model
fromNone
to'pydantic.main'
. Set reference of created concrete model to it's module to allow pickling (not applied to models created in functions), #1686 by @MrMrRobat - Add private attributes support, #1679 by @MrMrRobat
- add
config
to@validate_arguments
, #1663 by @samuelcolvin - Allow descendant Settings models to override env variable names for the fields defined in parent Settings models with
env
in theirConfig
. Previously onlyenv_prefix
configuration option was applicable, #1561 by @ojomio - Support
ref_template
when creating schema$ref
s, #1479 by @kilo59 - Add a
__call__
stub toPyObject
so that mypy will know that it is callable, #1352 by @brianmaissy pydantic.dataclasses.dataclass
decorator now supports built-indataclasses.dataclass
. It is hence possible to convert an existingdataclass
easily to add pydantic validation. Moreover nested dataclasses are also supported, #744 by @PrettyWood
v1.6.1 (2020-07-15)
- fix validation and parsing of nested models with
default_factory
, #1710 by @PrettyWood
v1.6 (2020-07-11)
Thank you to pydantic's sponsors: @matin, @tiangolo, @chdsbd, @jorgecarleitao, and 1 anonymous sponsor for their kind support.
- Modify validators for
conlist
andconset
to not havealways=True
, #1682 by @samuelcolvin - add port check to
AnyUrl
(can't exceed 65536) ports are 16 insigned bits:0 <= port <= 2**16-1
src: rfc793 header format, #1654 by @flapili - Document default
regex
anchoring semantics, #1648 by @yurikhan - Use
chain.from_iterable
in class_validators.py. This is a faster and more idiomatic way of usingitertools.chain
. Instead of computing all the items in the iterable and storing them in memory, they are computed one-by-one and never stored as a huge list. This can save on both runtime and memory space, #1642 by @cool-RR - Add
conset()
, analogous toconlist()
, #1623 by @patrickkwang - make pydantic errors (un)pickable, #1616 by @PrettyWood
- Allow custom encoding for
dotenv
files, #1615 by @PrettyWood - Ensure
SchemaExtraCallable
is always defined to get type hints on BaseConfig, #1614 by @PrettyWood - Update datetime parser to support negative timestamps, #1600 by @mlbiche
- Update mypy, remove
AnyType
alias forType[Any]
, #1598 by @samuelcolvin - Adjust handling of root validators so that errors are aggregated from all failing root validators, instead of reporting on only the first root validator to fail, #1586 by @beezee
- Make
__modify_schema__
on Enums apply to the enum schema rather than fields that use the enum, #1581 by @therefromhere - Fix behavior of
__all__
key when used in conjunction with index keys in advanced include/exclude of fields that are sequences, #1579 by @xspirus - Subclass validators do not run when referencing a
List
field defined in a parent class wheneach_item=True
. Added an example to the docs illustrating this, #1566 by @samueldeklund - change
schema.field_class_to_schema
to supportfrozenset
in schema, #1557 by @wangpeibao - Call
__modify_schema__
only for the field schema, #1552 by @PrettyWood - Move the assignment of
field.validate_always
infields.py
so thealways
parameter of validators work on inheritance, #1545 by @dcHHH - Added support for UUID instantiation through 16 byte strings such as
b'\x12\x34\x56\x78' * 4
. This was done to supportBINARY(16)
columns in sqlalchemy, #1541 by @shawnwall - Add a test assertion that
default_factory
can return a singleton, #1523 by @therefromhere - Add
NameEmail.__eq__
so duplicateNameEmail
instances are evaluated as equal, #1514 by @stephen-bunn - Add datamodel-code-generator link in pydantic document site, #1500 by @koxudaxi
- Added a "Discussion of Pydantic" section to the documentation, with a link to "Pydantic Introduction" video by Alexander Hultnér, #1499 by @hultner
- Avoid some side effects of
default_factory
by calling it only once if possible and by not setting a default value in the schema, #1491 by @PrettyWood - Added docs about dumping dataclasses to JSON, #1487 by @mikegrima
- Make
BaseModel.__signature__
class-only, so getting__signature__
from model instance will raiseAttributeError
, #1466 by @MrMrRobat - include
'format': 'password'
in the schema for secret types, #1424 by @atheuz - Modify schema constraints on
ConstrainedFloat
so thatexclusiveMinimum
and minimum are not included in the schema if they are equal to-math.inf
andexclusiveMaximum
andmaximum
are not included if they are equal tomath.inf
, #1417 by @vdwees - Squash internal
__root__
dicts in.dict()
(and, by extension, in.json()
), #1414 by @patrickkwang - Move
const
validator to post-validators so it validates the parsed value, #1410 by @selimb - Fix model validation to handle nested literals, e.g.
Literal['foo', Literal['bar']]
, #1364 by @DBCerigo - Remove
user_required = True
fromRedisDsn
, neither user nor password are required, #1275 by @samuelcolvin - Remove extra
allOf
from schema for fields withUnion
and customField
, #1209 by @mostaphaRoudsari - Updates OpenAPI schema generation to output all enums as separate models.
Instead of inlining the enum values in the model schema, models now use a
$ref
property to point to the enum definition, #1173 by @calvinwyoung
v1.5.1 (2020-04-23)
- Signature generation with
extra: allow
never uses a field name, #1418 by @prettywood - Avoid mutating
Field
default value, #1412 by @prettywood
v1.5 (2020-04-18)
- Make includes/excludes arguments for
.dict()
,._iter()
, ..., immutable, #1404 by @AlexECX - Always use a field's real name with includes/excludes in
model._iter()
, regardless ofby_alias
, #1397 by @AlexECX - Update constr regex example to include start and end lines, #1396 by @lmcnearney
- Confirm that shallow
model.copy()
does make a shallow copy of attributes, #1383 by @samuelcolvin - Renaming
model_name
argument ofmain.create_model()
to__model_name
to allow usingmodel_name
as a field name, #1367 by @kittipatv - Replace raising of exception to silent passing for non-Var attributes in mypy plugin, #1345 by @b0g3r
- Remove
typing_extensions
dependency for python 3.8, #1342 by @prettywood - Make
SecretStr
andSecretBytes
initialization idempotent, #1330 by @atheuz - document making secret types dumpable using the json method, #1328 by @atheuz
- Move all testing and build to github actions, add windows and macos binaries, thank you @StephenBrown2 for much help, #1326 by @samuelcolvin
- fix card number length check in
PaymentCardNumber
,PaymentCardBrand
now inherits fromstr
, #1317 by @samuelcolvin - Have
BaseModel
inherit fromRepresentation
to make mypy happy when overriding__str__
, #1310 by @FuegoFro - Allow
None
as input to all optional list fields, #1307 by @prettywood - Add
datetime
field todefault_factory
example, #1301 by @StephenBrown2 - Allow subclasses of known types to be encoded with superclass encoder, #1291 by @StephenBrown2
- Exclude exported fields from all elements of a list/tuple of submodels/dicts with
'__all__'
, #1286 by @masalim2 - Add pydantic.color.Color objects as available input for Color fields, #1258 by @leosussan
- In examples, type nullable fields as
Optional
, so that these are valid mypy annotations, #1248 by @kokes - Make
pattern_validator()
accept pre-compiledPattern
objects. Fixstr_validator()
return type tostr
, #1237 by @adamgreg - Document how to manage Generics and inheritance, #1229 by @esadruhn
update_forward_refs()
method of BaseModel now copies__dict__
of class module instead of modyfying it, #1228 by @paul-ilyin- Support instance methods and class methods with
@validate_arguments
, #1222 by @samuelcolvin - Add
default_factory
argument toField
to create a dynamic default value by passing a zero-argument callable, #1210 by @prettywood - add support for
NewType
ofList
,Optional
, etc, #1207 by @Kazy - fix mypy signature for
root_validator
, #1192 by @samuelcolvin - Fixed parsing of nested 'custom root type' models, #1190 by @Shados
- Add
validate_arguments
function decorator which checks the arguments to a function matches type annotations, #1179 by @samuelcolvin - Add
__signature__
to models, #1034 by @MrMrRobat - Refactor
._iter()
method, 10x speed boost fordict(model)
, #1017 by @MrMrRobat
v1.4 (2020-01-24)
- Breaking Change: alias precedence logic changed so aliases on a field always take priority over
an alias from
alias_generator
to avoid buggy/unexpected behaviour, see here for details, #1178 by @samuelcolvin - Add support for unicode and punycode in TLDs, #1182 by @jamescurtin
- Fix
cls
argument in validators during assignment, #1172 by @samuelcolvin - completing Luhn algorithm for
PaymentCardNumber
, #1166 by @cuencandres - add support for generics that implement
__get_validators__
like a custom data type, #1159 by @tiangolo - add support for infinite generators with
Iterable
, #1152 by @tiangolo - fix
url_regex
to accept schemas with+
,-
and.
after the first character, #1142 by @samuelcolvin - move
version_info()
toversion.py
, suggest its use in issues, #1138 by @samuelcolvin - Improve pydantic import time by roughly 50% by deferring some module loading and regex compilation, #1127 by @samuelcolvin
- Fix
EmailStr
andNameEmail
to accept instances of themselves in cython, #1126 by @koxudaxi - Pass model class to the
Config.schema_extra
callable, #1125 by @therefromhere - Fix regex for username and password in URLs, #1115 by @samuelcolvin
- Add support for nested generic models, #1104 by @dmontagu
- add
__all__
to__init__.py
to prevent "implicit reexport" errors from mypy, #1072 by @samuelcolvin - Add support for using "dotenv" files with
BaseSettings
, #1011 by @acnebs
v1.3 (2019-12-21)
- Change
schema
andschema_model
to handle dataclasses by using their__pydantic_model__
feature, #792 by @aviramha - Added option for
root_validator
to be skipped if values validation fails using keywordskip_on_failure=True
, #1049 by @aviramha - Allow
Config.schema_extra
to be a callable so that the generated schema can be post-processed, #1054 by @selimb - Update mypy to version 0.750, #1057 by @dmontagu
- Trick Cython into allowing str subclassing, #1061 by @skewty
- Prevent type attributes being added to schema unless the attribute
__schema_attributes__
isTrue
, #1064 by @samuelcolvin - Change
BaseModel.parse_file
to useConfig.json_loads
, #1067 by @kierandarcy - Fix for optional
Json
fields, #1073 by @volker48 - Change the default number of threads used when compiling with cython to one,
allow override via the
CYTHON_NTHREADS
environment variable, #1074 by @samuelcolvin - Run FastAPI tests during Pydantic's CI tests, #1075 by @tiangolo
- My mypy strictness constraints, and associated tweaks to type annotations, #1077 by @samuelcolvin
- Add
__eq__
to SecretStr and SecretBytes to allow "value equals", #1079 by @sbv-trueenergy - Fix schema generation for nested None case, #1088 by @lutostag
- Consistent checks for sequence like objects, #1090 by @samuelcolvin
- Fix
Config
inheritance onBaseSettings
when used withenv_prefix
, #1091 by @samuelcolvin - Fix for
__modify_schema__
when it conflicted withfield_class_to_schema*
, #1102 by @samuelcolvin - docs: Fix explanation of case sensitive environment variable names when populating
BaseSettings
subclass attributes, #1105 by @tribals - Rename django-rest-framework benchmark in documentation, #1119 by @frankie567
v1.2 (2019-11-28)
- Possible Breaking Change: Add support for required
Optional
withname: Optional[AnyType] = Field(...)
and refactorModelField
creation to preserverequired
parameter value, #1031 by @tiangolo; see here for details - Add benchmarks for
cattrs
, #513 by @sebastianmika - Add
exclude_none
option todict()
and friends, #587 by @niknetniko - Add benchmarks for
valideer
, #670 by @gsakkis - Add
parse_obj_as
andparse_file_as
functions for ad-hoc parsing of data into arbitrary pydantic-compatible types, #934 by @dmontagu - Add
allow_reuse
argument to validators, thus allowing validator reuse, #940 by @dmontagu - Add support for mapping types for custom root models, #958 by @dmontagu
- Mypy plugin support for dataclasses, #966 by @koxudaxi
- Add support for dataclasses default factory, #968 by @ahirner
- Add a
ByteSize
type for converting byte string (1GB
) to plain bytes, #977 by @dgasmith - Fix mypy complaint about
@root_validator(pre=True)
, #984 by @samuelcolvin - Add manylinux binaries for python 3.8 to pypi, also support manylinux2010, #994 by @samuelcolvin
- Adds ByteSize conversion to another unit, #995 by @dgasmith
- Fix
__str__
and__repr__
inheritance for models, #1022 by @samuelcolvin - add testimonials section to docs, #1025 by @sullivancolin
- Add support for
typing.Literal
for Python 3.8, #1026 by @dmontagu
v1.1.1 (2019-11-20)
- Fix bug where use of complex fields on sub-models could cause fields to be incorrectly configured, #1015 by @samuelcolvin
v1.1 (2019-11-07)
- Add a mypy plugin for type checking
BaseModel.__init__
and more, #722 by @dmontagu - Change return type typehint for
GenericModel.__class_getitem__
to prevent PyCharm warnings, #936 by @dmontagu - Fix usage of
Any
to allowNone
, also supportTypeVar
thus allowing use of un-parameterised collection types e.g.Dict
andList
, #962 by @samuelcolvin - Set
FieldInfo
on subfields to fix schema generation for complex nested types, #965 by @samuelcolvin
v1.0 (2019-10-23)
- Breaking Change: deprecate the
Model.fields
property, useModel.__fields__
instead, #883 by @samuelcolvin - Breaking Change: Change the precedence of aliases so child model aliases override parent aliases,
including using
alias_generator
, #904 by @samuelcolvin - Breaking change: Rename
skip_defaults
toexclude_unset
, and add ability to exclude actual defaults, #915 by @dmontagu - Add
**kwargs
topydantic.main.ModelMetaclass.__new__
so__init_subclass__
can take custom parameters on extendedBaseModel
classes, #867 by @retnikt - Fix field of a type that has a default value, #880 by @koxudaxi
- Use
FutureWarning
instead ofDeprecationWarning
whenalias
instead ofenv
is used for settings models, #881 by @samuelcolvin - Fix issue with
BaseSettings
inheritance andalias
getting set toNone
, #882 by @samuelcolvin - Modify
__repr__
and__str__
methods to be consistent across all public classes, add__pretty__
to support python-devtools, #884 by @samuelcolvin - deprecation warning for
case_insensitive
onBaseSettings
config, #885 by @samuelcolvin - For
BaseSettings
merge environment variables and in-code values recursively, as long as they create a valid object when merged together, to allow splitting init arguments, #888 by @idmitrievsky - change secret types example, #890 by @ashears
- Change the signature of
Model.construct()
to be more user-friendly, documentconstruct()
usage, #898 by @samuelcolvin - Add example for the
construct()
method, #907 by @ashears - Improve use of
Field
constraints on complex types, raise an error if constraints are not enforceable, also support tuples with an ellipsisTuple[X, ...]
,Sequence
andFrozenSet
in schema, #909 by @samuelcolvin - update docs for bool missing valid value, #911 by @trim21
- Better
str
/repr
logic forModelField
, #912 by @samuelcolvin - Fix
ConstrainedList
, update schema generation to reflectmin_items
andmax_items
Field()
arguments, #917 by @samuelcolvin - Allow abstracts sets (eg. dict keys) in the
include
andexclude
arguments ofdict()
, #921 by @samuelcolvin - Fix JSON serialization errors on
ValidationError.json()
by usingpydantic_encoder
, #922 by @samuelcolvin - Clarify usage of
remove_untouched
, improve error message for types with no validators, #926 by @retnikt
v1.0b2 (2019-10-07)
- Mark
StrictBool
typecheck asbool
to allow for default values without mypy errors, #690 by @dmontagu - Transfer the documentation build from sphinx to mkdocs, re-write much of the documentation, #856 by @samuelcolvin
- Add support for custom naming schemes for
GenericModel
subclasses, #859 by @dmontagu - Add
if TYPE_CHECKING:
to the excluded lines for test coverage, #874 by @dmontagu - Rename
allow_population_by_alias
toallow_population_by_field_name
, remove unnecessary warning about it, #875 by @samuelcolvin
v1.0b1 (2019-10-01)
- Breaking Change: rename
Schema
toField
, make it a function to placate mypy, #577 by @samuelcolvin - Breaking Change: modify parsing behavior for
bool
, #617 by @dmontagu - Breaking Change:
get_validators
is no longer recognised, use__get_validators__
.Config.ignore_extra
andConfig.allow_extra
are no longer recognised, useConfig.extra
, #720 by @samuelcolvin - Breaking Change: modify default config settings for
BaseSettings
;case_insensitive
renamed tocase_sensitive
, default changed tocase_sensitive = False
,env_prefix
default changed to''
- e.g. no prefix, #721 by @dmontagu - Breaking change: Implement
root_validator
and rename root errors from__obj__
to__root__
, #729 by @samuelcolvin - Breaking Change: alter the behaviour of
dict(model)
so that sub-models are nolonger converted to dictionaries, #733 by @samuelcolvin - Breaking change: Added
initvars
support topost_init_post_parse
, #748 by @Raphael-C-Almeida - Breaking Change: Make
BaseModel.json()
only serialize the__root__
key for models with custom root, #752 by @dmontagu - Breaking Change: complete rewrite of
URL
parsing logic, #755 by @samuelcolvin - Breaking Change: preserve superclass annotations for field-determination when not provided in subclass, #757 by @dmontagu
- Breaking Change:
BaseSettings
now uses the specialenv
settings to define which environment variables to read, not aliases, #847 by @samuelcolvin - add support for
assert
statements inside validators, #653 by @abdusco - Update documentation to specify the use of
pydantic.dataclasses.dataclass
and subclassingpydantic.BaseModel
, #710 by @maddosaurus - Allow custom JSON decoding and encoding via
json_loads
andjson_dumps
Config
properties, #714 by @samuelcolvin - make all annotated fields occur in the order declared, #715 by @dmontagu
- use pytest to test
mypy
integration, #735 by @dmontagu - add
__repr__
method toErrorWrapper
, #738 by @samuelcolvin - Added support for
FrozenSet
members in dataclasses, and a better error when attempting to use types from thetyping
module that are not supported by Pydantic, #745 by @djpetti - add documentation for Pycharm Plugin, #750 by @koxudaxi
- fix broken examples in the docs, #753 by @dmontagu
- moving typing related objects into
pydantic.typing
, #761 by @samuelcolvin - Minor performance improvements to
ErrorWrapper
,ValidationError
and datetime parsing, #763 by @samuelcolvin - Improvements to
datetime
/date
/time
/timedelta
types: more descriptive errors, change errors tovalue_error
nottype_error
, support bytes, #766 by @samuelcolvin - fix error messages for
Literal
types with multiple allowed values, #770 by @dmontagu - Improved auto-generated
title
field in JSON schema by converting underscore to space, #772 by @skewty - support
mypy --no-implicit-reexport
for dataclasses, also respect--no-implicit-reexport
in pydantic itself, #783 by @samuelcolvin - add the
PaymentCardNumber
type, #790 by @matin - Fix const validations for lists, #794 by @hmvp
- Set
additionalProperties
to false in schema for models with extra fields disallowed, #796 by @Code0x58 EmailStr
validation method now returns local part case-sensitive per RFC 5321, #798 by @henriklindgren- Added ability to validate strictness to
ConstrainedFloat
,ConstrainedInt
andConstrainedStr
and addedStrictFloat
andStrictInt
classes, #799 by @DerRidda - Improve handling of
None
andOptional
, replacewhole
witheach_item
(inverse meaning, defaultFalse
) on validators, #803 by @samuelcolvin - add support for
Type[T]
type hints, #807 by @timonbimon - Performance improvements from removing
change_exceptions
, change how pydantic error are constructed, #819 by @samuelcolvin - Fix the error message arising when a
BaseModel
-type model field causes aValidationError
during parsing, #820 by @dmontagu - allow
getter_dict
onConfig
, modifyGetterDict
to be more like aMapping
object and thus easier to work with, #821 by @samuelcolvin - Only check
TypeVar
param on baseGenericModel
class, #842 by @zpencerq - rename
Model._schema_cache
->Model.__schema_cache__
,Model._json_encoder
->Model.__json_encoder__
,Model._custom_root_type
->Model.__custom_root_type__
, #851 by @samuelcolvin
v0.32.2 (2019-08-17)
(Docs are available here)
- 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
onGenericModel
fields, #754 by @amitbl
v0.32.1 (2019-08-08)
- do not validate extra fields when
validate_assignment
is on, #724 by @YaraslauZhylko
v0.32 (2019-08-06)
- add model name to
ValidationError
error message, #676 by @dmontagu - breaking change: remove
__getattr__
and rename__values__
to__dict__
onBaseModel
, 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
inConfig
sub-class, #663 by @tiangolo
v0.31.1 (2019-07-31)
v0.31 (2019-07-24)
- better support for floating point
multiple_of
values, #652 by @justindujardin - fix schema generation for
NewType
andLiteral
, #649 by @dmontagu - fix
alias_generator
and field config conflict, #645 by @gmetzker and #658 by @MrMrRobat - more detailed message for
EnumError
, #673 by @dmontagu - add advanced exclude support for
dict
,json
andcopy
, #648 by @MrMrRobat - fix bug in
GenericModel
for models with concrete parameterized fields, #672 by @dmontagu - add documentation for
Literal
type, #651 by @dmontagu - add
Config.keep_untouched
for custom descriptors support, #679 by @MrMrRobat - use
inspect.cleandoc
internally to get model description, #657 by @tiangolo - add
Color
to schema generation, by @euri10 - add documentation for Literal type, #651 by @dmontagu
v0.30.1 (2019-07-15)
- fix so nested classes which inherit and change
__init__
are correctly processed while still allowingself
as a parameter, #644 by @lnaden and @dgasmith
v0.30 (2019-07-07)
- enforce single quotes in code, #612 by @samuelcolvin
- fix infinite recursion with dataclass inheritance and
__post_init__
, #606 by @Hanaasagi - fix default values for
GenericModel
, #610 by @dmontagu - clarify that self-referencing models require python 3.7+, #616 by @vlcinsky
- fix truncate for types, #611 by @dmontagu
- add
alias_generator
support, #622 by @MrMrRobat - fix unparameterized generic type schema generation, #625 by @dmontagu
- fix schema generation with multiple/circular references to the same model, #621 by @tiangolo and @wongpat
- support custom root types, #628 by @koxudaxi
- support
self
as a field name inparse_obj
, #632 by @samuelcolvin
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)
- 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 - add
StrictBool
type, #579 by @cazgp
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
, andset
, #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 changingvalidate_model()
to always returnsTuple[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 - support
const
keyword inSchema
, #434 by @Sean1708
v0.24 (2019-04-23)
- fix handling
ForwardRef
in sub-types, likeUnion
, #464 by @tiangolo - fix secret serialization, #465 by @atheuz
- 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
forPath
,FilePath
, andDirectoryPath
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
IntEnum
support, #444 by @potykion- fix PyObject callable value, #409 by @pilosus
- fix
black
deprecation warnings after update, #451 by @pilosus - fix
ForwardRef
collection bug, #450 by @tigerwings - Support specialized
ClassVars
, #455 by @tyrylu - fix JSON serialization for
ipaddress
types, #333 by @pilosus - add
SecretStr
andSecretBytes
types, #452 by @atheuz
v0.22 (2019-03-29)
- add
IPv{4,6,Any}Network
andIPv{4,6,Any}Interface
types fromipaddress
stdlib, #333 by @pilosus - add docs for
datetime
types, #386 by @pilosus - fix to schema generation in dataclass-based models, #408 by @pilosus
- fix path in nested models, #437 by @kataev
- add
Sequence
support, #304 by @pilosus
v0.21.0 (2019-03-15)
- fix typo in
NoneIsNotAllowedError
message, #414 by @YaraslauZhylko - add
IPvAnyAddress
,IPv4Address
andIPv6Address
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 thereforefrom __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
andfield
is now permitted, eg.(cls, value, field)
, however the variadic key word argument ("**kwargs
") must be calledkwargs
, #388 by @samuelcolvin - breaking change: Adds
skip_defaults
argument toBaseModel.dict()
to allow skipping of fields that were not explicitly set, signature ofModel.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 toConstrainedDecimal
,ConstrainedFloat
,ConstrainedInt
and their related typescondecimal
,confloat
, andconint
#371, thanks @StephenBrown2 - Deprecated
ignore_extra
andallow_extra
Config fields in favor ofextra
, #352 by @liiight - Add type annotations to all functions, test fully with mypy, #373 by @samuelcolvin
- fix for 'missing' error with
validate_all
orvalidate_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)
- add
ConstrainedBytes
andconbytes
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 isNone
or the type is optional, also preventwhole
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
andallow_population_by_alias=True
, fix #257 by @samuelcolvin - breaking change: Set
BaseConfig
attributesmin_anystr_length
andmax_anystr_length
toNone
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 withconfig
) - support for nested dataclasses, #334 by @samuelcolvin
- better errors when getting an
ImportError
withPyObject
, #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
toschema
module to generate top-level schemas from base models, #308 by @tiangolo - add additional fields to
Schema
class to declare validation forstr
and numeric values, #311 by @tiangolo - rename
_schema
toschema
on fields, #318 by @samuelcolvin - add
case_insensitive
option toBaseSettings
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 anint
#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
andurlstr
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 typetimedelta
(matchesdatetime
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)
- support Python 3.7 #216, thanks @layday
- Allow arbitrary types in model #209, thanks @oldPadavan
v0.11.0 (2018-06-28)
- make
list
,tuple
andset
types stricter #86 - breaking change: remove msgpack parsing #201
- add
FilePath
andDirectoryPath
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
andConfig.max_number_size
#183, thanks @Gr1N - breaking change: correct behaviour of
lt
andgt
arguments toconint
etc. #188 for the old behaviour usele
andge
#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
andUUID5
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
andcondecimal
types #170, thanks @Gr1N
v0.9.0 (2018-04-28)
- tweak email-validator import error message #145
- fix parse error of
parse_date()
andparse_datetime()
when input is 0 #144, thanks @YannLuo - add
Config.anystr_strip_whitespace
andstrip_whitespace
kwarg toconstr
, by default values isFalse
#163, thanks @Gr1N - add
ConstrainedFloat
,confloat
,PositiveFloat
andNegativeFloat
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)
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
andtrack
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
andparse_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()
andcopy()
#53 - allow pickling of models #53
setattr
is removed as__setattr__
is now intelligent #44raise_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, takesinclude
andexclude
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-1.8.tar.gz
.
File metadata
- Download URL: pydantic-1.8.tar.gz
- Upload date:
- Size: 259.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0b71ca069c16470cb00be0acaf0657eb74cbc4ff5f11b42e79647f170956cda3 |
|
MD5 | 39d327a084309abb469cd616a4a4b41d |
|
BLAKE2b-256 | f76138d7e4125076ca54967d3c6551c96de8782a85b38197d64e924da250da73 |
File details
Details for the file pydantic-1.8-py3-none-any.whl
.
File metadata
- Download URL: pydantic-1.8-py3-none-any.whl
- Upload date:
- Size: 124.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 42b8fb1e4e4783c4aa31df44b64714f96aa4deeacbacf3713a8a238ee7df3b2b |
|
MD5 | 7d7765c957bc29ab235b4da7254d46f8 |
|
BLAKE2b-256 | d1f6ba9352d6101d479f24e838977b98aec5271ce71aa57ebf55f43b6e89b68a |
File details
Details for the file pydantic-1.8-cp39-cp39-win_amd64.whl
.
File metadata
- Download URL: pydantic-1.8-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 77e04800d19acc2a8fbb95fe3d47ff397ce137aa5a2b32cc23a87bac70dda343 |
|
MD5 | 9b89be317bfbddb536d8a8dc7f7f21f0 |
|
BLAKE2b-256 | 644e9180cd1d23ed352de8701e684cd819c2b56efa5e6695ae87aafdb26dcbf8 |
File details
Details for the file pydantic-1.8-cp39-cp39-manylinux2014_x86_64.whl
.
File metadata
- Download URL: pydantic-1.8-cp39-cp39-manylinux2014_x86_64.whl
- Upload date:
- Size: 11.3 MB
- Tags: CPython 3.9
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4a83d24bcf9ce8e6fa55c379bba1359461eedb85721bfb3151e240871e2b13a8 |
|
MD5 | 96abe18f887aa4059f95d1e770bfb135 |
|
BLAKE2b-256 | 7969c0033081f09ae08e359e6d2a41c9ffecfad8f87aa16a2c6c50b946683499 |
File details
Details for the file pydantic-1.8-cp39-cp39-manylinux2014_i686.whl
.
File metadata
- Download URL: pydantic-1.8-cp39-cp39-manylinux2014_i686.whl
- Upload date:
- Size: 10.8 MB
- Tags: CPython 3.9
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | edf37d30ea60179ef067add9772cf42299ea6cd490b3c94335a68f1021944ac4 |
|
MD5 | a17e761545d7c7783b7c93e8ad43575b |
|
BLAKE2b-256 | a72951f30307885dc7169983d9e98e5c6219d748b309a9cf62cfd9caee78cabe |
File details
Details for the file pydantic-1.8-cp39-cp39-manylinux1_i686.whl
.
File metadata
- Download URL: pydantic-1.8-cp39-cp39-manylinux1_i686.whl
- Upload date:
- Size: 10.8 MB
- Tags: CPython 3.9
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 865410a6df71fb60294887770d19c67d499689f7ce64245182653952cdbd4183 |
|
MD5 | 84c122ccf5211946869f72b17c674261 |
|
BLAKE2b-256 | 067269a4aa47602f1b275cb7f0e073a3012cba798d752018de4d29c8be9c5cd7 |
File details
Details for the file pydantic-1.8-cp39-cp39-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: pydantic-1.8-cp39-cp39-macosx_10_9_x86_64.whl
- Upload date:
- Size: 2.7 MB
- Tags: CPython 3.9, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5759a4b276bda5ac2360f00e9b1e711aaac51fabd155b422d27f3339710f4264 |
|
MD5 | b20350aeeb2d608e9f0f092d2e0d50a3 |
|
BLAKE2b-256 | 44aa21c28b334a5b8b00ad38430f02cce8c9fd72997df10f51181e3bc1871a28 |
File details
Details for the file pydantic-1.8-cp38-cp38-win_amd64.whl
.
File metadata
- Download URL: pydantic-1.8-cp38-cp38-win_amd64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.8, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ad2fae68e185cfae5b6d83e7915352ff0b6e5fa84d84bc6a94c3e2de58327114 |
|
MD5 | 68edb2d638e442699d427283e009d3c6 |
|
BLAKE2b-256 | ffe9f71ca65a7f1254eb7c2f60c78e10d2ea29a76d97b9f22656981c56917273 |
File details
Details for the file pydantic-1.8-cp38-cp38-manylinux2014_x86_64.whl
.
File metadata
- Download URL: pydantic-1.8-cp38-cp38-manylinux2014_x86_64.whl
- Upload date:
- Size: 13.7 MB
- Tags: CPython 3.8
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ccc2ab0a240d01847f3d5f0f9e1582d450a2fc3389db33a7af8e7447b205a935 |
|
MD5 | f9bed8c57a352a055864da92f8caabe2 |
|
BLAKE2b-256 | a06560f08a243a91c2f64d2182f10bc3564b5d2c775c45d2a8d6b44e523c67c7 |
File details
Details for the file pydantic-1.8-cp38-cp38-manylinux2014_i686.whl
.
File metadata
- Download URL: pydantic-1.8-cp38-cp38-manylinux2014_i686.whl
- Upload date:
- Size: 12.6 MB
- Tags: CPython 3.8
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c8a3600435b83a4f28f5379f3bb574576521180f691828268268e9f172f1b1eb |
|
MD5 | b7a56123f35e647333bd7cacaee9cba8 |
|
BLAKE2b-256 | 8c66349ec3630efe9cc50170b927dde19f298dfb071fd45d0a1b82f4f81bdf84 |
File details
Details for the file pydantic-1.8-cp38-cp38-manylinux1_i686.whl
.
File metadata
- Download URL: pydantic-1.8-cp38-cp38-manylinux1_i686.whl
- Upload date:
- Size: 12.6 MB
- Tags: CPython 3.8
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b4e03c84f4e96e3880c9d34508cccbd0f0df6e7dc14b17f960ea8c71448823a3 |
|
MD5 | 5ab9daee036602e034a4850e99ec3bd3 |
|
BLAKE2b-256 | bb12998d3f2075eb7364c8cf67fc0b576a89e5ad5a381e0786bd6144a39e9318 |
File details
Details for the file pydantic-1.8-cp38-cp38-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: pydantic-1.8-cp38-cp38-macosx_10_9_x86_64.whl
- Upload date:
- Size: 2.6 MB
- Tags: CPython 3.8, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 91baec8ed771d4c53d71ef549d8e36b0f92a31c32296062d562d1d7074dd1d6e |
|
MD5 | 30dc545c5f27f3d8dbb8e29bb2489d0f |
|
BLAKE2b-256 | 9de0370b8e55a9047f63d685afd7d675135e9190966a934fb090c2c0d51d98a0 |
File details
Details for the file pydantic-1.8-cp37-cp37m-win_amd64.whl
.
File metadata
- Download URL: pydantic-1.8-cp37-cp37m-win_amd64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.7m, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d361d181a3fb53ebfdc2fb1e3ca55a6b2ad717578a5e119c99641afd11b31a47 |
|
MD5 | 1bf95159dd648b93658a8defff66f037 |
|
BLAKE2b-256 | db952217380f9b8885fb5adfd4ac9ac8a915ee3877d9681668f6d05d55199226 |
File details
Details for the file pydantic-1.8-cp37-cp37m-manylinux2014_x86_64.whl
.
File metadata
- Download URL: pydantic-1.8-cp37-cp37m-manylinux2014_x86_64.whl
- Upload date:
- Size: 10.0 MB
- Tags: CPython 3.7m
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26821f61623b01d618bd8b3243f790ac8bd7ae31b388c0e41aa586002cf350eb |
|
MD5 | 0a1859fa0b7792c0fbe178739e8af08c |
|
BLAKE2b-256 | f90777e97d3e7bb9ffa1ac2d4fcbf010ed08d50e09c153d92a9f94f12bb93f99 |
File details
Details for the file pydantic-1.8-cp37-cp37m-manylinux2014_i686.whl
.
File metadata
- Download URL: pydantic-1.8-cp37-cp37m-manylinux2014_i686.whl
- Upload date:
- Size: 9.6 MB
- Tags: CPython 3.7m
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 12ed0b175bba65e29dfc5859cd539d3512f58bb776bf620a3d3338501fd0f389 |
|
MD5 | b0f53b0a7b63a1140ea4df6bf27c03aa |
|
BLAKE2b-256 | 33a22036a435200c4482b3ff230a9000ff22734e9e16e823e8529a4204c35731 |
File details
Details for the file pydantic-1.8-cp37-cp37m-manylinux1_i686.whl
.
File metadata
- Download URL: pydantic-1.8-cp37-cp37m-manylinux1_i686.whl
- Upload date:
- Size: 9.6 MB
- Tags: CPython 3.7m
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2bc9e9f5d91a29dec53346efc5c719d82297885d89c8a62b971492fba222c68d |
|
MD5 | 1d8c2d9f7539d8c5818ec0eed6ca8a0e |
|
BLAKE2b-256 | 2d8aa023f26f63236d6327acbb6e9c8ec364d0e180423c1158f9227898e750e6 |
File details
Details for the file pydantic-1.8-cp37-cp37m-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: pydantic-1.8-cp37-cp37m-macosx_10_9_x86_64.whl
- Upload date:
- Size: 2.6 MB
- Tags: CPython 3.7m, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a989924324513215ad2b2cfd187426e6372f76f507b17361142c0b792294960c |
|
MD5 | 43df5c84eb19f9c9cb2e769913a92633 |
|
BLAKE2b-256 | ef2439425a6e6eed79d9dc665c426f60b8bcf2244ea00913f9ac072f80dc39c9 |
File details
Details for the file pydantic-1.8-cp36-cp36m-win_amd64.whl
.
File metadata
- Download URL: pydantic-1.8-cp36-cp36m-win_amd64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.6m, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 999cc108933425752e45d1bf2f57d3cf091f2a5e8b9b8afab5b8872d2cc7645f |
|
MD5 | df62df4ee71eaf8dbaa4c3ae63c19e79 |
|
BLAKE2b-256 | 22ecba3afc181cc96226c351f25267a3537a3b5c1b0c549de4f754e89576725f |
File details
Details for the file pydantic-1.8-cp36-cp36m-manylinux2014_x86_64.whl
.
File metadata
- Download URL: pydantic-1.8-cp36-cp36m-manylinux2014_x86_64.whl
- Upload date:
- Size: 10.1 MB
- Tags: CPython 3.6m
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d5aeab86837f8799df0d84bec1190e6cc0062d5c5374636b5599234f2b39fe0a |
|
MD5 | 6d159981e01ccfa75677affc78d13feb |
|
BLAKE2b-256 | 26c2428122b736c521ebf3dd2d3f763fb7d95f254c580abfe568018dbd88bb53 |
File details
Details for the file pydantic-1.8-cp36-cp36m-manylinux2014_i686.whl
.
File metadata
- Download URL: pydantic-1.8-cp36-cp36m-manylinux2014_i686.whl
- Upload date:
- Size: 9.7 MB
- Tags: CPython 3.6m
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a0ff36e3f929d76b91d1624c6673dbdc1407358700d117bb7f29d5696c52d288 |
|
MD5 | 04b20e170915f348455933c3c579c655 |
|
BLAKE2b-256 | 04b79091e87c2fd032b295f23e926960a821afe74a9a1832304a0435c4601700 |
File details
Details for the file pydantic-1.8-cp36-cp36m-manylinux1_i686.whl
.
File metadata
- Download URL: pydantic-1.8-cp36-cp36m-manylinux1_i686.whl
- Upload date:
- Size: 9.7 MB
- Tags: CPython 3.6m
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c26d380af3e9a8eb9abe3b6337cea28f057b5425330817c918cf74d0a0a2303d |
|
MD5 | 73e40981539b5be6858d4b77da349275 |
|
BLAKE2b-256 | 261d1f5f136c9c8c6b20c6f08c164991011c9a90af5f57cc454b927f3f38a387 |
File details
Details for the file pydantic-1.8-cp36-cp36m-macosx_10_9_x86_64.whl
.
File metadata
- Download URL: pydantic-1.8-cp36-cp36m-macosx_10_9_x86_64.whl
- Upload date:
- Size: 2.6 MB
- Tags: CPython 3.6m, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 22fe5756c6c57279234e4c4027a3549507aca29e9ee832d6aa39c367cb43c99f |
|
MD5 | f4b02f53c175ffa8829cbdc922a0a634 |
|
BLAKE2b-256 | 2200d95f3214fddc53530b8103cd109f35a75e60543ef7d953c851c780ae90de |