- Bump
pydantic-core
tov2.18.4
by @sydney-runkle in #9550
- Fix u style unicode strings in python @samuelcolvin in pydantic/jiter#110
- Bump
pydantic-core
tov2.18.3
by @sydney-runkle in #9515
- Replace
__spec__.parent
with__package__
by @hramezani in #9331 - Fix validation of
int
s with leading unary minus by @RajatRajdeep in pydantic/pydantic-core#1291 - Fix
str
subclass validation for enums by @sydney-runkle in pydantic/pydantic-core#1273 - Support
BigInt
s inLiteral
s andEnum
s by @samuelcolvin in pydantic/pydantic-core#1297 - Fix: uuid - allow
str
subclass as input by @davidhewitt in pydantic/pydantic-core#1296
- Bump
pydantic-core
tov2.18.2
by @sydney-runkle in #9307
- Ftp and Websocket connection strings support by @CherrySuryp in #9205
- Use field description for RootModel schema description when there is
…
by @LouisGobert in #9214
- Fix
validation_alias
behavior withmodel_construct
forAliasChoices
andAliasPath
by @sydney-runkle in #9223 - Revert
typing.Literal
and import it outside the TYPE_CHECKING block by @frost-nzcr4 in #9232 - Fix
Secret
serialization schema, applicable for unions by @sydney-runkle in #9240 - Fix
strict
application tofunction-after
withuse_enum_values
by @sydney-runkle in #9279 - Address case where
model_construct
on a class which definesmodel_post_init
fails withAttributeError
by @babygrimes in #9168 - Fix
model_json_schema
with config types by @NeevCohen in #9287 - Support multiple zeros as an
int
by @samuelcolvin in pydantic/pydantic-core#1269 - Fix validation of
int
s with leading unary plus by @cknv in pydantic/pydantic-core#1272 - Fix interaction between
extra != 'ignore'
andfrom_attributes=True
by @davidhewitt in pydantic/pydantic-core#1276 - Handle error from
Enum
'smissing
function asValidationError
by @sydney-runkle in pydantic/pydantic-core#1274 - Fix memory leak with
Iterable
validation by @davidhewitt in pydantic/pydantic-core#1271
- @zzstoatzz made their first contribution in #9219
- @frost-nzcr4 made their first contribution in #9232
- @CherrySuryp made their first contribution in #9205
- @vagenas made their first contribution in #9268
- @ollz272 made their first contribution in #9262
- @babygrimes made their first contribution in #9168
- @swelborn made their first contribution in #9296
- @kf-novi made their first contribution in #9236
- @lgeiger made their first contribution in #9288
The code released in v2.7.0 is practically identical to that of v2.7.0b1.
- Reorganize
pyproject.toml
sections by @Viicos in #8899 - Bump
pydantic-core
tov2.18.1
by @sydney-runkle in #9211 - Adopt
jiter
v0.2.0
by @samuelcolvin in pydantic/pydantic-core#1250
- Extract attribute docstrings from
FieldInfo.description
by @Viicos in #6563 - Add a
with_config
decorator to comply with typing spec by @Viicos in #8611 - Allow an optional separator splitting the value and unit of the result of
ByteSize.human_readable
by @jks15satoshi in #8706 - Add generic
Secret
base type by @conradogarciaberrotaran in #8519 - Make use of
Sphinx
inventories for cross references in docs by @Viicos in #8682 - Add environment variable to disable plugins by @geospackle in #8767
- Add support for
deprecated
fields by @Viicos in #8237 - Allow
field_serializer('*')
by @ornariece in #9001 - Handle a case when
model_config
is defined as a model property by @alexeyt101 in #9004 - Update
create_model()
to supporttyping.Annotated
as input by @wannieman98 in #8947 - Add
ClickhouseDsn
support by @solidguy7 in #9062 - Add support for
re.Pattern[str]
topattern
field by @jag-k in #9053 - Support for
serialize_as_any
runtime setting by @sydney-runkle in #8830 - Add support for
typing.Self
by @Youssefares in #9023 - Ability to pass
context
to serialization by @ornariece in #8965 - Add feedback widget to docs with flarelytics integration by @sydney-runkle in #9129
- Support for parsing partial JSON strings in Python by @samuelcolvin in pydantic/jiter#66
Finalized in v2.7.0, rather than v2.7.0b1:
- Add support for field level number to str coercion option by @NeevCohen in #9137
- Update
warnings
parameter for serialization utilities to allow raising a warning by @Lance-Drane in #9166
- Correct docs, logic for
model_construct
behavior withextra
by @sydney-runkle in #8807 - Improve error message for improper
RootModel
subclasses by @sydney-runkle in #8857 - Use
PEP570
syntax by @Viicos in #8940 - Add
enum
andtype
to the JSON schema for single item literals by @dmontagu in #8944 - Deprecate
update_json_schema
internal function by @sydney-runkle in #9125 - Serialize duration to hour minute second, instead of just seconds by @kakilangit in pydantic/speedate#50
- Trimming str before parsing to int and float by @hungtsetse in pydantic/pydantic-core#1203
enum
validator improvements by @samuelcolvin in #9045- Move
enum
validation and serialization to Rust by @samuelcolvin in #9064 - Improve schema generation for nested dataclasses by @sydney-runkle in #9114
- Fast path for ASCII python string creation in JSON by @samuelcolvin in in pydantic/jiter#72
- SIMD integer and string JSON parsing on
aarch64
(Note: SIMD on x86 will be implemented in a future release) by @samuelcolvin in in pydantic/jiter#65 - Support JSON
Cow<str>
fromjiter
by @davidhewitt in pydantic/pydantic-core#1231 - MAJOR performance improvement: update to PyO3 0.21 final by @davidhewitt in pydantic/pydantic-core#1248
- cache Python strings by @samuelcolvin in pydantic/pydantic-core#1240
- Fix strict parsing for some
Sequence
s by @sydney-runkle in #8614 - Add a check on the existence of
__qualname__
by @anci3ntr0ck in #8642 - Handle
__pydantic_extra__
annotation being a string or inherited by @alexmojaki in #8659 - Fix json validation for
NameEmail
by @Holi0317 in #8650 - Fix type-safety of attribute access in
BaseModel
by @bluenote10 in #8651 - Fix bug with
mypy
plugin andno_strict_optional = True
by @dmontagu in #8666 - Fix
ByteSize
errortype
change by @sydney-runkle in #8681 - Fix inheriting annotations in dataclasses by @sydney-runkle in #8679
- Fix regression in core schema generation for indirect definition references by @dmontagu in #8702
- Fix unsupported types bug with plain validator by @sydney-runkle in #8710
- Reverting problematic fix from 2.6 release, fixing schema building bug by @sydney-runkle in #8718
- fixes
__pydantic_config__
ignored for TypeDict by @13sin in #8734 - Fix test failures with
pytest v8.0.0
due topytest.warns()
starting to work insidepytest.raises()
by @mgorny in #8678 - Use
is_valid_field
from 1.x formypy
plugin by @DanielNoord in #8738 - Better-support
mypy
strict equality flag by @dmontagu in #8799 - model_json_schema export with Annotated types misses 'required' parameters by @LouisGobert in #8793
- Fix default inclusion in
FieldInfo.__repr_args__
by @sydney-runkle in #8801 - Fix resolution of forward refs in dataclass base classes that are not present in the subclass module namespace by @matsjoyce-refeyn in #8751
- Fix
BaseModel
type annotations to be resolvable bytyping.get_type_hints
by @devmonkey22 in #7680 - Fix: allow empty string aliases with
AliasGenerator
by @sydney-runkle in #8810 - Fix test along with
date
->datetime
timezone assumption fix by @sydney-runkle in #8823 - Fix deprecation warning with usage of
ast.Str
by @Viicos in #8837 - Add missing
deprecated
decorators by @Viicos in #8877 - Fix serialization of
NameEmail
if name includes an email address by @NeevCohen in #8860 - Add information about class in error message of schema generation by @Czaki in #8917
- Make
TypeAdapter
's typing compatible with special forms by @adriangb in #8923 - Fix issue with config behavior being baked into the ref schema for
enum
s by @dmontagu in #8920 - More helpful error re wrong
model_json_schema
usage by @sydney-runkle in #8928 - Fix nested discriminated union schema gen, pt 2 by @sydney-runkle in #8932
- Fix schema build for nested dataclasses / TypedDicts with discriminators by @sydney-runkle in #8950
- Remove unnecessary logic for definitions schema gen with discriminated unions by @sydney-runkle in #8951
- Fix handling of optionals in
mypy
plugin by @dmontagu in #9008 - Fix
PlainSerializer
usage with std type constructor by @sydney-runkle in #9031 - Remove unnecessary warning for config in plugin by @dmontagu in #9039
- Fix default value serializing by @NeevCohen in #9066
- Fix extra fields check in
Model.__getattr__()
by @NeevCohen in #9082 - Fix
ClassVar
forward ref inherited from parent class by @alexmojaki in #9097 - fix sequence like validator with strict
True
by @andresliszt in #8977 - Improve warning message when a field name shadows a field in a parent model by @chan-vince in #9105
- Do not warn about shadowed fields if they are not redefined in a child class by @chan-vince in #9111
- Fix discriminated union bug with unsubstituted type var by @sydney-runkle in #9124
- Support serialization of
deque
when passed toSequence[blah blah blah]
by @sydney-runkle in #9128 - Init private attributes from super-types in
model_post_init
by @Viicos in #9134 - fix
model_construct
withvalidation_alias
by @ornariece in #9144 - Ensure json-schema generator handles
Literal
null
types by @bruno-f-cruz in #9135 - Fixed in v2.7.0: Fix allow extra generic by @dmontagu in #9193
- @hungtsetse made their first contribution in #8546
- @StrawHatDrag0n made their first contribution in #8583
- @anci3ntr0ck made their first contribution in #8642
- @Holi0317 made their first contribution in #8650
- @bluenote10 made their first contribution in #8651
- @ADSteele916 made their first contribution in #8703
- @musicinmybrain made their first contribution in #8731
- @jks15satoshi made their first contribution in #8706
- @13sin made their first contribution in #8734
- @DanielNoord made their first contribution in #8738
- @conradogarciaberrotaran made their first contribution in #8519
- @chris-griffin made their first contribution in #8775
- @LouisGobert made their first contribution in #8793
- @matsjoyce-refeyn made their first contribution in #8751
- @devmonkey22 made their first contribution in #7680
- @adamency made their first contribution in #8847
- @MamfTheKramf made their first contribution in #8851
- @ornariece made their first contribution in #9001
- @alexeyt101 made their first contribution in #9004
- @wannieman98 made their first contribution in #8947
- @solidguy7 made their first contribution in #9062
- @kloczek made their first contribution in #9047
- @jag-k made their first contribution in #9053
- @priya-gitTest made their first contribution in #9088
- @Youssefares made their first contribution in #9023
- @chan-vince made their first contribution in #9105
- @bruno-f-cruz made their first contribution in #9135
- @Lance-Drane made their first contribution in #9166
Pre-release, see the GitHub release for details.
- Fix usage of
AliasGenerator
withcomputed_field
decorator by @sydney-runkle in #8806 - Fix nested discriminated union schema gen, pt 2 by @sydney-runkle in #8932
- Fix bug with no_strict_optional=True caused by API deferral by @dmontagu in #8826
- Update
pydantic-settings
version in the docs by @hramezani in #8906
- Fix discriminated union schema gen bug by @sydney-runkle in #8904
- Upgrade to
pydantic-core
2.16.3 by @sydney-runkle in #8879
- 'YYYY-MM-DD' date string coerced to datetime shouldn't infer timezone by @sydney-runkle in pydantic/pydantic-core#1193
- Upgrade to
pydantic-core
2.16.2 by @sydney-runkle in #8717
- Fix bug with
mypy
plugin andno_strict_optional = True
by @dmontagu in #8666 - Fix
ByteSize
errortype
change by @sydney-runkle in #8681 - Fix inheriting
Field
annotations in dataclasses by @sydney-runkle in #8679 - Fix regression in core schema generation for indirect definition references by @dmontagu in #8702
- Fix unsupported types bug with
PlainValidator
by @sydney-runkle in #8710 - Reverting problematic fix from 2.6 release, fixing schema building bug by @sydney-runkle in #8718
- Fix warning for tuple of wrong size in
Union
by @davidhewitt in pydantic/pydantic-core#1174 - Fix
computed_field
JSON serializerexclude_none
behavior by @sydney-runkle in pydantic/pydantic-core#1187
The code released in v2.6.0 is practically identical to that of v2.6.0b1.
- Check for
email-validator
version >= 2.0 by @commonism in #6033 - Upgrade `ruff`` target version to Python 3.8 by @Elkiwa in #8341
- Update to
pydantic-extra-types==2.4.1
by @yezz123 in #8478 - Update to
pyright==1.1.345
by @Viicos in #8453 - Update pydantic-core from 2.14.6 to 2.16.1, significant changes from these updates are described below, full changelog here
- Add
NatsDsn
by @ekeew in #6874 - Add
ConfigDict.ser_json_inf_nan
by @davidhewitt in #8159 - Add
types.OnErrorOmit
by @adriangb in #8222 - Support
AliasGenerator
usage by @sydney-runkle in #8282 - Add Pydantic People Page to docs by @sydney-runkle in #8345
- Support
yyyy-MM-DD
datetime parsing by @sydney-runkle in #8404 - Added bits conversions to the
ByteSize
class #8415 by @luca-matei in #8507 - Enable json schema creation with type
ByteSize
by @geospackle in #8537 - Add
eval_type_backport
to handle union operator and builtin generic subscripting in older Pythons by @alexmojaki in #8209 - Add support for
dataclass
fieldsinit
by @dmontagu in #8552 - Implement pickling for
ValidationError
by @davidhewitt in pydantic/pydantic-core#1119 - Add unified tuple validator that can handle "variadic" tuples via PEP-646 by @dmontagu in pydantic/pydantic-core#865
- Drop Python3.7 support by @hramezani in #7188
- Drop Python 3.7, and PyPy 3.7 and 3.8 by @davidhewitt in pydantic/pydantic-core#1129
- Use positional-only
self
inBaseModel
constructor, so no field name can ever conflict with it by @ariebovenberg in #8072 - Make
@validate_call
return a function instead of a custom descriptor - fixes binding issue with inheritance and addsself/cls
argument to validation errors by @alexmojaki in #8268 - Exclude
BaseModel
docstring from JSON schema description by @sydney-runkle in #8352 - Introducing
classproperty
decorator formodel_computed_fields
by @Jocelyn-Gas in #8437 - Explicitly raise an error if field names clashes with types by @Viicos in #8243
- Use stricter serializer for unions of simple types by @alexdrydew pydantic/pydantic-core#1132
- Add Codspeed profiling Actions workflow by @lambertsbennett in #8054
- Improve
int
extraction by @samuelcolvin in pydantic/pydantic-core#1155 - Improve performance of recursion guard by @samuelcolvin in pydantic/pydantic-core#1156
dataclass
serialization speedups by @samuelcolvin in pydantic/pydantic-core#1162- Avoid
HashMap
creation when looking up small JSON objects inLazyIndexMaps
by @samuelcolvin in pydantic/jiter#55 - use hashbrown to speedup python string caching by @davidhewitt in pydantic/jiter#51
- Replace
Peak
with more efficientPeek
by @davidhewitt in pydantic/jiter#48
- Move
getattr
warning in deprecatedBaseConfig
by @tlambert03 in #7183 - Only hash
model_fields
, not whole__dict__
by @alexmojaki in #7786 - Fix mishandling of unions while freezing types in the
mypy
plugin by @dmontagu in #7411 - Fix
mypy
error on untypedClassVar
by @vincent-hachin-wmx in #8138 - Only compare pydantic fields in
BaseModel.__eq__
instead of whole__dict__
by @QuentinSoubeyranAqemia in #7825 - Update
strict
docstring inmodel_validate
method. by @LukeTonin in #8223 - Fix overload position of
computed_field
by @Viicos in #8227 - Fix custom type type casting used in multiple attributes by @ianhfc in #8066
- Fix issue not allowing
validate_call
decorator to be dynamically assigned to a class method by @jusexton in #8249 - Fix issue
unittest.mock
deprecation warnings by @ibleedicare in #8262 - Added tests for the case
JsonValue
contains subclassed primitive values by @jusexton in #8286 - Fix
mypy
error on free before validator (classmethod) by @sydney-runkle in #8285 - Fix
to_snake
conversion by @jevins09 in #8316 - Fix type annotation of
ModelMetaclass.__prepare__
by @slanzmich in #8305 - Disallow
config
specification when initializing aTypeAdapter
when the annotated type has config already by @sydney-runkle in #8365 - Fix a naming issue with JSON schema for generics parametrized by recursive type aliases by @dmontagu in #8389
- Fix type annotation in pydantic people script by @shenxiangzhuang in #8402
- Add support for field
alias
indataclass
signature by @NeevCohen in #8387 - Fix bug with schema generation with
Field(...)
in a forward ref by @dmontagu in #8494 - Fix ordering of keys in
__dict__
withmodel_construct
call by @sydney-runkle in #8500 - Fix module
path_type
creation when globals does not contain__name__
by @hramezani in #8470 - Fix for namespace issue with dataclasses with
from __future__ import annotations
by @sydney-runkle in #8513 - Fix: make function validator types positional-only by @pmmmwh in #8479
- Fix usage of
@deprecated
by @Viicos in #8294 - Add more support for private attributes in
model_construct
call by @sydney-runkle in #8525 - Use a stack for the types namespace by @dmontagu in #8378
- Fix schema-building bug with
TypeAliasType
for types with refs by @dmontagu in #8526 - Support
pydantic.Field(repr=False)
in dataclasses by @tigeryy2 in #8511 - Override
dataclass_transform
behavior forRootModel
by @Viicos in #8163 - Refactor signature generation for simplicity by @sydney-runkle in #8572
- Fix ordering bug of PlainValidator annotation by @Anvil in #8567
- Fix
exclude_none
for json serialization ofcomputed_field
s by @sydney-runkle in pydantic/pydantic-core#1098 - Support yyyy-MM-DD string for datetimes by @sydney-runkle in pydantic/pydantic-core#1124
- Tweak ordering of definitions in generated schemas by @StrawHatDrag0n in #8583
- @ekeew made their first contribution in #6874
- @lambertsbennett made their first contribution in #8054
- @vincent-hachin-wmx made their first contribution in #8138
- @QuentinSoubeyranAqemia made their first contribution in #7825
- @ariebovenberg made their first contribution in #8072
- @LukeTonin made their first contribution in #8223
- @denisart made their first contribution in #8231
- @ianhfc made their first contribution in #8066
- @eonu made their first contribution in #8255
- @amandahla made their first contribution in #8263
- @ibleedicare made their first contribution in #8262
- @jevins09 made their first contribution in #8316
- @cuu508 made their first contribution in #8322
- @slanzmich made their first contribution in #8305
- @jensenbox made their first contribution in #8331
- @szepeviktor made their first contribution in #8356
- @Elkiwa made their first contribution in #8341
- @parhamfh made their first contribution in #8395
- @shenxiangzhuang made their first contribution in #8402
- @NeevCohen made their first contribution in #8387
- @zby made their first contribution in #8497
- @patelnets made their first contribution in #8491
- @edwardwli made their first contribution in #8503
- @luca-matei made their first contribution in #8507
- @Jocelyn-Gas made their first contribution in #8437
- @bL34cHig0 made their first contribution in #8501
- @tigeryy2 made their first contribution in #8511
- @geospackle made their first contribution in #8537
- @Anvil made their first contribution in #8567
- @hungtsetse made their first contribution in #8546
- @StrawHatDrag0n made their first contribution in #8583
- @mariuswinger made their first contribution in pydantic/pydantic-core#1087
- @adamchainz made their first contribution in pydantic/pydantic-core#1090
- @akx made their first contribution in pydantic/pydantic-core#1123
Pre-release, see the GitHub release for details.
- uprev
pydantic-core
to 2.14.6
- Fix memory leak with recursive definitions creating reference cycles by @davidhewitt in pydantic/pydantic-core#1125
- uprev
pydantic-core
to 2.14.5
- Add
ConfigDict.ser_json_inf_nan
by @davidhewitt in #8159
- Fix validation of
Literal
from JSON keys when used asdict
key by @sydney-runkle in pydantic/pydantic-core#1075 - Fix bug re
custom_init
on members ofUnion
by @sydney-runkle in pydantic/pydantic-core#1076 - Fix
JsonValue
bool
serialization by @sydney-runkle in #8190 - Fix handling of unhashable inputs with
Literal
inUnion
s by @sydney-runkle in pydantic/pydantic-core#1089
- uprev pydantic-core to 2.14.3 by @samuelcolvin in #8120
- Fix package description limit by @dmontagu in #8097
- Fix
ValidateCallWrapper
error when creating a model which has a @validate_call wrapped field annotation by @sydney-runkle in #8110
The code released in v2.5.0 is functionally identical to that of v2.5.0b1.
- Update pydantic-core from 2.10.1 to 2.14.1, significant changes from these updates are described below, full changelog here
- Update to
pyright==1.1.335
by @Viicos in #8075
- Allow plugins to catch non
ValidationError
errors by @adriangb in #7806 - Support
__doc__
argument increate_model()
by @chris-spann in #7863 - Expose
regex_engine
flag - meaning you can use with the Rust or Python regex libraries in constraints by @utkini in #7768 - Save return type generated from type annotation in
ComputedFieldInfo
by @alexmojaki in #7889 - Adopting
ruff
formatter by @Luca-Blight in #7930 - Added
validation_error_cause
to config by @zakstucke in #7626 - Make path of the item to validate available in plugin by @hramezani in #7861
- Add
CallableDiscriminator
andTag
by @dmontagu in #7983CallableDiscriminator
renamed toDiscriminator
by @dmontagu in #8047
- Make union case tags affect union error messages by @dmontagu in #8001
- Add
examples
andjson_schema_extra
to@computed_field
by @alexmojaki in #8013 - Add
JsonValue
type by @dmontagu in #7998 - Allow
str
as argument toDiscriminator
by @dmontagu in #8047 - Add
SchemaSerializer.__reduce__
method to enable pickle serialization by @edoakes in pydantic/pydantic-core#1006
- Significant Change: replace
ultra_strict
with new smart union implementation, the way unions are validated has changed significantly to improve performance and correctness, we have worked hard to absolutely minimise the number of cases where behaviour has changed, see the PR for details - by @davidhewitt in pydantic/pydantic-core#867 - Add support for instance method reassignment when
extra='allow'
by @sydney-runkle in #7683 - Support JSON schema generation for
Enum
types with no cases by @sydney-runkle in #7927 - Warn if a class inherits from
Generic
beforeBaseModel
by @alexmojaki in #7891
- New custom JSON parser,
jiter
by @samuelcolvin in pydantic/pydantic-core#974 - PGO build for MacOS M1 by @samuelcolvin in pydantic/pydantic-core#1063
- Use
__getattr__
for all package imports, improve import time by @samuelcolvin in #7947
- Fix
mypy
issue with subclasses ofRootModel
by @sydney-runkle in #7677 - Properly rebuild the
FieldInfo
when a forward ref gets evaluated by @dmontagu in #7698 - Fix failure to load
SecretStr
from JSON (regression in v2.4) by @sydney-runkle in #7729 - Fix
defer_build
behavior withTypeAdapter
by @sydney-runkle in #7736 - Improve compatibility with legacy
mypy
versions by @dmontagu in #7742 - Fix: update
TypeVar
handling when default is not set by @pmmmwh in #7719 - Support specification of
strict
onEnum
type fields by @sydney-runkle in #7761 - Wrap
weakref.ref
instead of subclassing to fixcloudpickle
serialization by @edoakes in #7780 - Keep values of private attributes set within
model_post_init
in subclasses by @alexmojaki in #7775 - Add more specific type for non-callable
json_schema_extra
by @alexmojaki in #7803 - Raise an error when deleting frozen (model) fields by @alexmojaki in #7800
- Fix schema sorting bug with default values by @sydney-runkle in #7817
- Use generated alias for aliases that are not specified otherwise by @alexmojaki in #7802
- Support
strict
specification forUUID
types by @sydney-runkle in #7865 - JSON schema: fix extra parameter handling by @me-and in #7810
- Fix: support
pydantic.Field(kw_only=True)
with inherited dataclasses by @PrettyWood in #7827 - Support
validate_call
decorator for methods in classes with__slots__
by @sydney-runkle in #7883 - Fix pydantic dataclass problem with
dataclasses.field
default by @hramezani in #7898 - Fix schema generation for generics with union type bounds by @sydney-runkle in #7899
- Fix version for
importlib_metadata
on python 3.7 by @sydney-runkle in #7904 - Support
|
operator (Union) in PydanticRecursiveRef by @alexmojaki in #7892 - Fix
display_as_type
forTypeAliasType
in python 3.12 by @dmontagu in #7929 - Add support for
NotRequired
generics inTypedDict
by @sydney-runkle in #7932 - Make generic
TypeAliasType
specifications produce different schema definitions by @alexdrydew in #7893 - Added fix for signature of inherited dataclass by @howsunjow in #7925
- Make the model name generation more robust in JSON schema by @joakimnordling in #7881
- Fix plurals in validation error messages (in tests) by @Iipin in #7972
PrivateAttr
is passed fromAnnotated
default position by @tabassco in #8004- Don't decode bytes (which may not be UTF8) when displaying SecretBytes by @alexmojaki in #8012
- Use
classmethod
instead ofclassmethod[Any, Any, Any]
by @Mr-Pepe in #7979 - Clearer error on invalid Plugin by @samuelcolvin in #8023
- Correct pydantic dataclasses import by @samuelcolvin in #8027
- Fix misbehavior for models referencing redefined type aliases by @dmontagu in #8050
- Fix
Optional
field withvalidate_default
only performing one field validation by @sydney-runkle in pydantic/pydantic-core#1002 - Fix
definition-ref
bug withDict
keys by @sydney-runkle in pydantic/pydantic-core#1014 - Fix bug allowing validation of
bool
types withcoerce_numbers_to_str=True
by @sydney-runkle in pydantic/pydantic-core#1017 - Don't accept
NaN
in float and decimal constraints by @davidhewitt in pydantic/pydantic-core#1037 - Add
lax_str
andlax_int
support for enum values not inherited from str/int by @michaelhly in pydantic/pydantic-core#1015 - Support subclasses in lists in
Union
ofList
types by @sydney-runkle in pydantic/pydantic-core#1039 - Allow validation against
max_digits
anddecimals
to pass if normalized or non-normalized input is valid by @sydney-runkle in pydantic/pydantic-core#1049 - Fix: proper pluralization in
ValidationError
messages by @Iipin in pydantic/pydantic-core#1050 - Disallow the string
'-'
asdatetime
input by @davidhewitt in pydantic/speedate#52 & pydantic/pydantic-core#1060 - Fix: NaN and Inf float serialization by @davidhewitt in pydantic/pydantic-core#1062
- Restore manylinux-compatible PGO builds by @davidhewitt in pydantic/pydantic-core#1068
- @schneebuzz made their first contribution in #7699
- @edoakes made their first contribution in #7780
- @alexmojaki made their first contribution in #7775
- @NickG123 made their first contribution in #7751
- @gowthamgts made their first contribution in #7830
- @jamesbraza made their first contribution in #7848
- @laundmo made their first contribution in #7850
- @rahmatnazali made their first contribution in #7870
- @waterfountain1996 made their first contribution in #7878
- @chris-spann made their first contribution in #7863
- @me-and made their first contribution in #7810
- @utkini made their first contribution in #7768
- @bn-l made their first contribution in #7744
- @alexdrydew made their first contribution in #7893
- @Luca-Blight made their first contribution in #7930
- @howsunjow made their first contribution in #7925
- @joakimnordling made their first contribution in #7881
- @icfly2 made their first contribution in #7976
- @Yummy-Yums made their first contribution in #8003
- @Iipin made their first contribution in #7972
- @tabassco made their first contribution in #8004
- @Mr-Pepe made their first contribution in #7979
- @0x00cl made their first contribution in #8010
- @barraponto made their first contribution in #8032
- @sisp made their first contribution in pydantic/pydantic-core#995
- @michaelhly made their first contribution in pydantic/pydantic-core#1015
Pre-release, see the GitHub release for details.
- Fix bug with JSON schema for sequence of discriminated union by @dmontagu in #7647
- Fix schema references in discriminated unions by @adriangb in #7646
- Fix json schema generation for recursive models by @adriangb in #7653
- Fix
models_json_schema
for generic models by @adriangb in #7654 - Fix xfailed test for generic model signatures by @adriangb in #7658
- @austinorr made their first contribution in #7657
- @peterHoburg made their first contribution in #7670
- Update pydantic-core to 2.10.1 by @davidhewitt in #7633
- Serialize unsubstituted type vars as
Any
by @adriangb in #7606 - Remove schema building caches by @adriangb in #7624
- Fix an issue where JSON schema extras weren't JSON encoded by @dmontagu in #7625
- Update pydantic-core to 2.10.0 by @samuelcolvin in #7542
- Add
Base64Url
types by @dmontagu in #7286 - Implement optional
number
tostr
coercion by @lig in #7508 - Allow access to
field_name
anddata
in all validators if there is data and a field name by @samuelcolvin in #7542 - Add
BaseModel.model_validate_strings
andTypeAdapter.validate_strings
by @hramezani in #7552 - Add Pydantic
plugins
experimental implementation by @lig @samuelcolvin and @Kludex in #6820
- Do not override
model_post_init
in subclass with private attrs by @Viicos in #7302 - Make fields with defaults not required in the serialization schema by default by @dmontagu in #7275
- Mark
Extra
as deprecated by @disrupted in #7299 - Make
EncodedStr
a dataclass by @Kludex in #7396 - Move
annotated_handlers
to be public by @samuelcolvin in #7569
- Simplify flattening and inlining of
CoreSchema
by @adriangb in #7523 - Remove unused copies in
CoreSchema
walking by @adriangb in #7528 - Add caches for collecting definitions and invalid schemas from a CoreSchema by @adriangb in #7527
- Eagerly resolve discriminated unions and cache cases where we can't by @adriangb in #7529
- Replace
dict.get
anddict.setdefault
with more verbose versions inCoreSchema
building hot paths by @adriangb in #7536 - Cache invalid
CoreSchema
discovery by @adriangb in #7535 - Allow disabling
CoreSchema
validation for faster startup times by @adriangb in #7565
- Fix config detection for
TypedDict
from grandparent classes by @dmontagu in #7272 - Fix hash function generation for frozen models with unusual MRO by @dmontagu in #7274
- Make
strict
config overridable in field for Path by @hramezani in #7281 - Use
ser_json_<timedelta|bytes>
on default inGenerateJsonSchema
by @Kludex in #7269 - Adding a check that alias is validated as an identifier for Python by @andree0 in #7319
- Raise an error when computed field overrides field by @sydney-runkle in #7346
- Fix applying
SkipValidation
to referenced schemas by @adriangb in #7381 - Enforce behavior of private attributes having double leading underscore by @lig in #7265
- Standardize
__get_pydantic_core_schema__
signature by @hramezani in #7415 - Fix generic dataclass fields mutation bug (when using
TypeAdapter
) by @sydney-runkle in #7435 - Fix
TypeError
onmodel_validator
inwrap
mode by @pmmmwh in #7496 - Improve enum error message by @hramezani in #7506
- Make
repr
work for instances that failed initialization when handlingValidationError
s by @dmontagu in #7439 - Fixed a regular expression denial of service issue by limiting whitespaces by @prodigysml in #7360
- Fix handling of
UUID
values havingUUID.version=None
by @lig in #7566 - Fix
__iter__
returning privatecached_property
info by @sydney-runkle in #7570 - Improvements to version info message by @samuelcolvin in #7594
- @15498th made their first contribution in #7238
- @GabrielCappelli made their first contribution in #7213
- @tobni made their first contribution in #7184
- @redruin1 made their first contribution in #7282
- @FacerAin made their first contribution in #7288
- @acdha made their first contribution in #7297
- @andree0 made their first contribution in #7319
- @gordonhart made their first contribution in #7375
- @pmmmwh made their first contribution in #7496
- @disrupted made their first contribution in #7299
- @prodigysml made their first contribution in #7360
- 🔥 Remove orphaned changes file from repo by @lig in #7168
- Add copy button on documentation by @Kludex in #7190
- Fix docs on JSON type by @Kludex in #7189
- Update mypy 1.5.0 to 1.5.1 in CI by @hramezani in #7191
- fix download links badge by @samuelcolvin in #7200
- add 2.2.1 to changelog by @samuelcolvin in #7212
- Make ModelWrapValidator protocols generic by @dmontagu in #7154
- Correct
Field(..., exclude: bool)
docs by @samuelcolvin in #7214 - Make shadowing attributes a warning instead of an error by @adriangb in #7193
- Document
Base64Str
andBase64Bytes
by @Kludex in #7192 - Fix
config.defer_build
for serialization first cases by @samuelcolvin in #7024 - clean Model docstrings in JSON Schema by @samuelcolvin in #7210
- fix #7228 (typo): docs in
validators.md
to correctvalidate_default
kwarg by @lmmx in #7229 - ✅ Implement
tzinfo.fromutc
method forTzInfo
inpydantic-core
by @lig in #7019 - Support
__get_validators__
by @hramezani in #7197
- Make
xfail
ing test for root model extra stopxfail
ing by @dmontagu in #6937 - Optimize recursion detection by stopping on the second visit for the same object by @mciucu in #7160
- fix link in docs by @tlambert03 in #7166
- Replace MiMalloc w/ default allocator by @adriangb in pydantic/pydantic-core#900
- Bump pydantic-core to 2.6.1 and prepare 2.2.1 release by @adriangb in #7176
- Split "pipx install" setup command into two commands on the documentation site by @nomadmtb in #6869
- Deprecate
Field.include
by @hramezani in #6852 - Fix typo in default factory error msg by @hramezani in #6880
- Simplify handling of typing.Annotated in GenerateSchema by @dmontagu in #6887
- Re-enable fastapi tests in CI by @dmontagu in #6883
- Make it harder to hit collisions with json schema defrefs by @dmontagu in #6566
- Cleaner error for invalid input to
Path
fields by @samuelcolvin in #6903 - 📝 support Coordinate Type by @yezz123 in #6906
- Fix
ForwardRef
wrapper for py 3.10.0 (shim until bpo-45166) by @randomir in #6919 - Fix misbehavior related to copying of RootModel by @dmontagu in #6918
- Fix issue with recursion error caused by ParamSpec by @dmontagu in #6923
- Add section about Constrained classes to the Migration Guide by @Kludex in #6924
- Use
main
branch for badge links by @Viicos in #6925 - Add test for v1/v2 Annotated discrepancy by @carlbordum in #6926
- Make the v1 mypy plugin work with both v1 and v2 by @dmontagu in #6921
- Fix issue where generic models couldn't be parametrized with BaseModel by @dmontagu in #6933
- Remove xfail for discriminated union with alias by @dmontagu in #6938
- add field_serializer to computed_field by @andresliszt in #6965
- Use union_schema with Type[Union[...]] by @JeanArhancet in #6952
- Fix inherited typeddict attributes / config by @adriangb in #6981
- fix dataclass annotated before validator called twice by @davidhewitt in #6998
- Update test-fastapi deselected tests by @hramezani in #7014
- Fix validator doc format by @hramezani in #7015
- Fix typo in docstring of model_json_schema by @AdamVinch-Federated in #7032
- remove unused "type ignores" with pyright by @samuelcolvin in #7026
- Add benchmark representing FastAPI startup time by @adriangb in #7030
- Fix json_encoders for Enum subclasses by @adriangb in #7029
- Update docstring of
ser_json_bytes
regarding base64 encoding by @Viicos in #7052 - Allow
@validate_call
to work on async methods by @adriangb in #7046 - Fix: mypy error with
Settings
andSettingsConfigDict
by @JeanArhancet in #7002 - Fix some typos (repeated words and it's/its) by @eumiro in #7063
- Fix the typo in docstring by @harunyasar in #7062
- Docs: Fix broken URL in the pydantic-settings package recommendation by @swetjen in #6995
- Handle constraints being applied to schemas that don't accept it by @adriangb in #6951
- Replace almost_equal_floats with math.isclose by @eumiro in #7082
- bump pydantic-core to 2.5.0 by @davidhewitt in #7077
- Add
short_version
and use it in links by @hramezani in #7115 - 📝 Add usage link to
RootModel
by @Kludex in #7113 - Revert "Fix default port for mongosrv DSNs (#6827)" by @Kludex in #7116
- Clarify validate_default and _Unset handling in usage docs and migration guide by @benbenbang in #6950
- Tweak documentation of
Field.exclude
by @Viicos in #7086 - Do not require
validate_assignment
to useField.frozen
by @Viicos in #7103 - tweaks to
_core_utils
by @samuelcolvin in #7040 - Make DefaultDict working with set by @hramezani in #7126
- Don't always require typing.Generic as a base for partially parametrized models by @dmontagu in #7119
- Fix issue with JSON schema incorrectly using parent class core schema by @dmontagu in #7020
- Fix xfailed test related to TypedDict and alias_generator by @dmontagu in #6940
- Improve error message for NameEmail by @dmontagu in #6939
- Fix generic computed fields by @dmontagu in #6988
- Reflect namedtuple default values during validation by @dmontagu in #7144
- Update dependencies, fix pydantic-core usage, fix CI issues by @dmontagu in #7150
- Add mypy 1.5.0 by @hramezani in #7118
- Handle non-json native enum values by @adriangb in #7056
- document
round_trip
in Json type documentation by @jc-louis in #7137 - Relax signature checks to better support builtins and C extension functions as validators by @adriangb in #7101
- add union_mode='left_to_right' by @davidhewitt in #7151
- Include an error message hint for inherited ordering by @yvalencia91 in #7124
- Fix one docs link and resolve some warnings for two others by @dmontagu in #7153
- Include Field extra keys name in warning by @hramezani in #7136
- Skip FieldInfo merging when unnecessary by @dmontagu in #6862
- Add
StringConstraints
for use as Annotated metadata by @adriangb in #6605 - Try to fix intermittently failing CI by @adriangb in #6683
- Remove redundant example of optional vs default. by @ehiggs-deliverect in #6676
- Docs update by @samuelcolvin in #6692
- Remove the Validate always section in validator docs by @adriangb in #6679
- Fix recursion error in json schema generation by @adriangb in #6720
- Fix incorrect subclass check for secretstr by @AlexVndnblcke in #6730
- update pdm / pdm lockfile to 2.8.0 by @davidhewitt in #6714
- unpin pdm on more CI jobs by @davidhewitt in #6755
- improve source locations for auxiliary packages in docs by @davidhewitt in #6749
- Assume builtins don't accept an info argument by @adriangb in #6754
- Fix bug where calling
help(BaseModelSubclass)
raises errors by @hramezani in #6758 - Fix mypy plugin handling of
@model_validator(mode="after")
by @ljodal in #6753 - update pydantic-core to 2.3.1 by @davidhewitt in #6756
- Mypy plugin for settings by @hramezani in #6760
- Use
contentSchema
keyword for JSON schema by @dmontagu in #6715 - fast-path checking finite decimals by @davidhewitt in #6769
- Docs update by @samuelcolvin in #6771
- Improve json schema doc by @hramezani in #6772
- Update validator docs by @adriangb in #6695
- Fix typehint for wrap validator by @dmontagu in #6788
- 🐛 Fix validation warning for unions of Literal and other type by @lig in #6628
- Update documentation for generics support in V2 by @tpdorsey in #6685
- add pydantic-core build info to
version_info()
by @samuelcolvin in #6785 - Fix pydantic dataclasses that use slots with default values by @dmontagu in #6796
- Fix inheritance of hash function for frozen models by @dmontagu in #6789
- ✨ Add
SkipJsonSchema
annotation by @Kludex in #6653 - Error if an invalid field name is used with Field by @dmontagu in #6797
- Add
GenericModel
toMOVED_IN_V2
by @adriangb in #6776 - Remove unused code from
docs/usage/types/custom.md
by @hramezani in #6803 - Fix
float
->Decimal
coercion precision loss by @adriangb in #6810 - remove email validation from the north star benchmark by @davidhewitt in #6816
- Fix link to mypy by @progsmile in #6824
- Improve initialization hooks example by @hramezani in #6822
- Fix default port for mongosrv DSNs by @dmontagu in #6827
- Improve API documentation, in particular more links between usage and API docs by @samuelcolvin in #6780
- update pydantic-core to 2.4.0 by @davidhewitt in #6831
- Fix
annotated_types.MaxLen
validator for custom sequence types by @ImogenBits in #6809 - Update V1 by @hramezani in #6833
- Make it so callable JSON schema extra works by @dmontagu in #6798
- Fix serialization issue with
InstanceOf
by @dmontagu in #6829 - Add back support for
json_encoders
by @adriangb in #6811 - Update field annotations when building the schema by @dmontagu in #6838
- Use
WeakValueDictionary
to fix generic memory leak by @dmontagu in #6681 - Add
config.defer_build
to optionally make model building lazy by @samuelcolvin in #6823 - delegate
UUID
serialization to pydantic-core by @davidhewitt in #6850 - Update
json_encoders
docs by @adriangb in #6848 - Fix error message for
staticmethod
/classmethod
order with validate_call by @dmontagu in #6686 - Improve documentation for
Config
by @samuelcolvin in #6847 - Update serialization doc to mention
Field.exclude
takes priority over call-timeinclude/exclude
by @hramezani in #6851 - Allow customizing core schema generation by making
GenerateSchema
public by @adriangb in #6737
- Mention PyObject (v1) moving to ImportString (v2) in migration doc by @slafs in #6456
- Fix release-tweet CI by @Kludex in #6461
- Revise the section on required / optional / nullable fields. by @ybressler in #6468
- Warn if a type hint is not in fact a type by @adriangb in #6479
- Replace TransformSchema with GetPydanticSchema by @dmontagu in #6484
- Fix the un-hashability of various annotation types, for use in caching generic containers by @dmontagu in #6480
- PYD-164: Rework custom types docs by @adriangb in #6490
- Fix ci by @adriangb in #6507
- Fix forward ref in generic by @adriangb in #6511
- Fix generation of serialization JSON schemas for core_schema.ChainSchema by @dmontagu in #6515
- Document the change in
Field.alias
behavior in Pydantic V2 by @hramezani in #6508 - Give better error message attempting to compute the json schema of a model with undefined fields by @dmontagu in #6519
- Document
alias_priority
by @tpdorsey in #6520 - Add redirect for types documentation by @tpdorsey in #6513
- Allow updating docs without release by @samuelcolvin in #6551
- Ensure docs tests always run in the right folder by @dmontagu in #6487
- Defer evaluation of return type hints for serializer functions by @dmontagu in #6516
- Disable E501 from Ruff and rely on just Black by @adriangb in #6552
- Update JSON Schema documentation for V2 by @tpdorsey in #6492
- Add documentation of cyclic reference handling by @dmontagu in #6493
- Remove the need for change files by @samuelcolvin in #6556
- add "north star" benchmark by @davidhewitt in #6547
- Update Dataclasses docs by @tpdorsey in #6470
- ♻️ Use different error message on v1 redirects by @Kludex in #6595
- ⬆ Upgrade
pydantic-core
to v2.2.0 by @lig in #6589 - Fix serialization for IPvAny by @dmontagu in #6572
- Improve CI by using PDM instead of pip to install typing-extensions by @adriangb in #6602
- Add
enum
error type docs by @lig in #6603 - 🐛 Fix
max_length
for unicode strings by @lig in #6559 - Add documentation for accessing features via
pydantic.v1
by @tpdorsey in #6604 - Include extra when iterating over a model by @adriangb in #6562
- Fix typing of model_validator by @adriangb in #6514
- Touch up Decimal validator by @adriangb in #6327
- Fix various docstrings using fixed pytest-examples by @dmontagu in #6607
- Handle function validators in a discriminated union by @dmontagu in #6570
- Review json_schema.md by @tpdorsey in #6608
- Make validate_call work on basemodel methods by @dmontagu in #6569
- add test for big int json serde by @davidhewitt in #6614
- Fix pydantic dataclass problem with dataclasses.field default_factory by @hramezani in #6616
- Fixed mypy type inference for TypeAdapter by @zakstucke in #6617
- Make it work to use None as a generic parameter by @dmontagu in #6609
- Make it work to use
$ref
as an alias by @dmontagu in #6568 - add note to migration guide about changes to
AnyUrl
etc by @davidhewitt in #6618 - 🐛 Support defining
json_schema_extra
onRootModel
usingField
by @lig in #6622 - Update pre-commit to prevent commits to main branch on accident by @dmontagu in #6636
- Fix PDM CI for python 3.7 on MacOS/windows by @dmontagu in #6627
- Produce more accurate signatures for pydantic dataclasses by @dmontagu in #6633
- Updates to Url types for Pydantic V2 by @tpdorsey in #6638
- Fix list markdown in
transform
docstring by @StefanBRas in #6649 - simplify slots_dataclass construction to appease mypy by @davidhewitt in #6639
- Update TypedDict schema generation docstring by @adriangb in #6651
- Detect and lint-error for prints by @dmontagu in #6655
- Add xfailing test for pydantic-core PR 766 by @dmontagu in #6641
- Ignore unrecognized fields from dataclasses metadata by @dmontagu in #6634
- Make non-existent class getattr a mypy error by @dmontagu in #6658
- Update pydantic-core to 2.3.0 by @hramezani in #6648
- Use OrderedDict from typing_extensions by @dmontagu in #6664
- Fix typehint for JSON schema extra callable by @dmontagu in #6659
- Fix bug where round-trip pickling/unpickling a
RootModel
would change the value of__dict__
, #6457 by @dmontagu - Allow single-item discriminated unions, #6405 by @dmontagu
- Fix issue with union parsing of enums, #6440 by @dmontagu
- Docs: Fixed
constr
documentation, renamed oldregex
to newpattern
, #6452 by @miili - Change
GenerateJsonSchema.generate_definitions
signature, #6436 by @dmontagu
See the full changelog here
First patch release of Pydantic V2
- Extra fields added via
setattr
(i.e.m.some_extra_field = 'extra_value'
) are added to.model_extra
ifmodel_config
extra='allowed'
. Fixed #6333, #6365 by @aaraney - Automatically unpack JSON schema '$ref' for custom types, #6343 by @adriangb
- Fix tagged unions multiple processing in submodels, #6340 by @suharnikov
See the full changelog here
Pydantic V2 is here! 🎉
See this post for more details.
Third beta pre-release of Pydantic V2
See the full changelog here
Add from_attributes
runtime flag to TypeAdapter.validate_python
and BaseModel.model_validate
.
See the full changelog here
First beta pre-release of Pydantic V2
See the full changelog here
Fourth pre-release of Pydantic V2
See the full changelog here
Third pre-release of Pydantic V2
See the full changelog here
Second pre-release of Pydantic V2
See the full changelog here
First pre-release of Pydantic V2!
See this post for more details.
- Add pydantic.v1 namespace to Pydantic v1 by @exs-dmiketa in pydantic#9042
- Relax version of typing-extensions for V1 by @SonOfLilit in pydantic#8819
- patch fix for mypy by @sydney-runkle in pydantic#8765
- Update install.md by @dmontagu in #7690
- Fix ci to only deploy docs on release by @sydney-runkle in #7740
- Ubuntu fixes for V1 by @sydney-runkle in #8540 and #8587
- Fix cached_property handling in dataclasses when copied by @rdbisme in #8407
- Fix: Add max length check to
pydantic.validate_email
, #7673 by @hramezani - Docs: Fix pip commands to install v1, #6930 by @chbndrhnns
- Fixes the
maxlen
property being dropped ondeque
validation. Happened only if the deque item has been typed. Changes the_validate_sequence_like
func, #6581 by @maciekglowka
- Importing create_model in tools.py through relative path instead of absolute path - so that it doesn't import V2 code when copied over to V2 branch, #6361 by @SharathHuddar
- Add Pydantic
Json
field support to settings management, #6250 by @hramezani - Fixed literal validator errors for unhashable values, #6188 by @markus1978
- Fixed bug with generics receiving forward refs, #6130 by @mark-todd
- Update install method of FastAPI for internal tests in CI, #6117 by @Kludex
- Fix trailing zeros not ignored in Decimal validation, #5968 by @hramezani
- Fix mypy plugin for v1.4.0, #5928 by @cdce8p
- Add future and past date hypothesis strategies, #5850 by @bschoenmaeckers
- Discourage usage of Cython 3 with Pydantic 1.x, #5845 by @lig
- Fix a bug in
Literal
usage withtyping-extension==4.6.0
, #5826 by @hramezani - This solves the (closed) issue #3849 where aliased fields that use discriminated union fail to validate when the data contains the non-aliased field name, #5736 by @benwah
- Update email-validator dependency to >=2.0.0post2, #5627 by @adriangb
- update
AnyClassMethod
for changes in python/typeshed#9771, #5505 by @ITProKyle
- Fix creating schema from model using
ConstrainedStr
withregex
as dict key, #5223 by @matejetz - Address bug in mypy plugin caused by explicit_package_bases=True, #5191 by @dmontagu
- Add implicit defaults in the mypy plugin for Field with no default argument, #5190 by @dmontagu
- Fix schema generated for Enum values used as Literals in discriminated unions, #5188 by @javibookline
- Fix mypy failures caused by the pydantic mypy plugin when users define
from_orm
in their own classes, #5187 by @dmontagu - Fix
InitVar
usage with pydantic dataclasses, mypy version1.1.1
and the custom mypy plugin, #5162 by @cdce8p
- Implement logic to support creating validators from non standard callables by using defaults to identify them and unwrapping
functools.partial
andfunctools.partialmethod
when checking the signature, #5126 by @JensHeinrich - Fix mypy plugin for v1.1.1, and fix
dataclass_transform
decorator for pydantic dataclasses, #5111 by @cdce8p - Raise
ValidationError
, notConfigError
, when a discriminator value is unhashable, #4773 by @kurtmckee
- Fix broken parametrized bases handling with
GenericModel
s with complex sets of models, #5052 by @MarkusSintonen - Invalidate mypy cache if plugin config changes, #5007 by @cdce8p
- Fix
RecursionError
when deep-copying dataclass types wrapped by pydantic, #4949 by @mbillingr - Fix
X | Y
union syntax breakingGenericModel
, #4146 by @thenx - Switch coverage badge to show coverage for this branch/release, #5060 by @samuelcolvin
- Change dependency to
typing-extensions>=4.2.0
, #4885 by @samuelcolvin
NOTE: v1.10.3 was "yanked" from PyPI due to #4885 which is fixed in v1.10.4
- fix parsing of custom root models, #4883 by @gou177
- fix: use dataclass proxy for frozen or empty dataclasses, #4878 by @PrettyWood
- Fix
schema
andschema_json
on models where a model instance is a one of default values, #4781 by @Bobronium - Add Jina AI to sponsors on docs index page, #4767 by @samuelcolvin
- fix: support assignment on
DataclassProxy
, #4695 by @PrettyWood - Add
postgresql+psycopg
as allowed scheme forPostgreDsn
to make it usable with SQLAlchemy 2, #4689 by @morian - Allow dict schemas to have both
patternProperties
andadditionalProperties
, #4641 by @jparise - Fixes error passing None for optional lists with
unique_items
, #4568 by @mfulgo - Fix
GenericModel
withCallable
param raising aTypeError
, #4551 by @mfulgo - Fix field regex with
StrictStr
type annotation, #4538 by @sisp - Correct
dataclass_transform
keyword argument name fromfield_descriptors
tofield_specifiers
, #4500 by @samuelcolvin - fix: avoid multiple calls of
__post_init__
when dataclasses are inherited, #4487 by @PrettyWood - Reduce the size of binary wheels, #2276 by @samuelcolvin
- Revert Change: Revert percent encoding of URL parts which was originally added in #4224, #4470 by @samuelcolvin
- Prevent long (length >
4_300
) strings/bytes as input to int fields, see python/cpython#95778 and CVE-2020-10735, #1477 by @samuelcolvin - fix: dataclass wrapper was not always called, #4477 by @PrettyWood
- Use
tomllib
on Python 3.11 when parsingmypy
configuration, #4476 by @hauntsaninja - Basic fix of
GenericModel
cache to detect order of arguments inUnion
models, #4474 by @sveinugu - Fix mypy plugin when using bare types like
list
anddict
asdefault_factory
, #4457 by @samuelcolvin
- Add
__hash__
method topydancic.color.Color
class, #4454 by @czaki
- Refactor the whole pydantic
dataclass
decorator to really act like its standard lib equivalent. It hence keeps__eq__
,__hash__
, ... and makes comparison with its non-validated version possible. It also fixes usage offrozen
dataclasses in fields and usage ofdefault_factory
in nested dataclasses. The support ofConfig.extra
has been added. Finally, config customization directly via adict
is now possible, #2557 by @PrettyWood
BREAKING CHANGES:- The
compiled
boolean (whether pydantic is compiled with cython) has been moved frommain.py
toversion.py
- Now that
Config.extra
is supported,dataclass
ignores by default extra arguments (likeBaseModel
)
- The
- Fix PEP487
__set_name__
protocol inBaseModel
for PrivateAttrs, #4407 by @tlambert03 - Allow for custom parsing of environment variables via
parse_env_var
inConfig
, #4406 by @acmiyaguchi - Rename
master
tomain
, #4405 by @hramezani - Fix
StrictStr
does not raiseValidationError
whenmax_length
is present inField
, #4388 by @hramezani - Make
SecretStr
andSecretBytes
hashable, #4387 by @chbndrhnns - Fix
StrictBytes
does not raiseValidationError
whenmax_length
is present inField
, #4380 by @JeanArhancet - Add support for bare
type
, #4375 by @hramezani - Support Python 3.11, including binaries for 3.11 in PyPI, #4374 by @samuelcolvin
- Add support for
re.Pattern
, #4366 by @hramezani - Fix
__post_init_post_parse__
is incorrectly passed keyword arguments when no__post_init__
is defined, #4361 by @hramezani - Fix implicitly importing
ForwardRef
andCallable
frompydantic.typing
instead oftyping
and also exposeMappingIntStrAny
, #4358 by @aminalaee - remove
Any
types from thedataclass
decorator so it can be used with thedisallow_any_expr
mypy option, #4356 by @DetachHead - moved repo to
pydantic/pydantic
, #4348 by @yezz123 - fix "extra fields not permitted" error when dataclass with
Extra.forbid
is validated multiple times, #4343 by @detachhead - Add Python 3.9 and 3.10 examples to docs, #4339 by @Bobronium
- Discriminated union models now use
oneOf
instead ofanyOf
when generating OpenAPI schema definitions, #4335 by @MaxwellPayne - Allow type checkers to infer inner type of
Json
type.Json[list[str]]
will be now inferred aslist[str]
,Json[Any]
should be used instead of plainJson
. Runtime behaviour is not changed, #4332 by @Bobronium - Allow empty string aliases by using a
alias is not None
check, rather thanbool(alias)
, #4253 by @sergeytsaplin - Update
ForwardRef
s inField.outer_type_
, #4249 by @JacobHayes - The use of
__dataclass_transform__
has been replaced bytyping_extensions.dataclass_transform
, which is the preferred way to mark pydantic models as a dataclass under PEP 681, #4241 by @multimeric - Use parent model's
Config
when validating nestedNamedTuple
fields, #4219 by @synek - Update
BaseModel.construct
to work with aliased Fields, #4192 by @kylebamos - Catch certain raised errors in
smart_deepcopy
and revert todeepcopy
if so, #4184 by @coneybeare - Add
Config.anystr_upper
andto_upper
kwarg to constr and conbytes, #4165 by @satheler - Fix JSON schema for
set
andfrozenset
when they include default values, #4155 by @aminalaee - Teach the mypy plugin that methods decorated by
@validator
are classmethods, #4102 by @DMRobertson - Improve mypy plugin's ability to detect required fields, #4086 by @richardxia
- Support fields of type
Type[]
in schema, #4051 by @aminalaee - Add
default
value in JSON Schema whenconst=True
, #4031 by @aminalaee - Adds reserved word check to signature generation logic, #4011 by @strue36
- Fix Json strategy failure for the complex nested field, #4005 by @sergiosim
- Add JSON-compatible float constraint
allow_inf_nan
, #3994 by @tiangolo - Remove undefined behaviour when
env_prefix
had characters in common withenv_nested_delimiter
, #3975 by @arsenron - Support generics model with
create_model
, #3945 by @hot123s - allow submodels to overwrite extra field info, #3934 by @PrettyWood
- Document and test structural pattern matching (PEP 636) on
BaseModel
, #3920 by @irgolic - Fix incorrect deserialization of python timedelta object to ISO 8601 for negative time deltas. Minus was serialized in incorrect place ("P-1DT23H59M59.888735S" instead of correct "-P1DT23H59M59.888735S"), #3899 by @07pepa
- Fix validation of discriminated union fields with an alias when passing a model instance, #3846 by @chornsby
- Add a CockroachDsn type to validate CockroachDB connection strings. The type
supports the following schemes:
cockroachdb
,cockroachdb+psycopg2
andcockroachdb+asyncpg
, #3839 by @blubber - Fix MyPy plugin to not override pre-existing
__init__
method in models, #3824 by @patrick91 - Fix mypy version checking, #3783 by @KotlinIsland
- support overwriting dunder attributes of
BaseModel
instances, #3777 by @PrettyWood - Added
ConstrainedDate
andcondate
, #3740 by @hottwaj - Support
kw_only
in dataclasses, #3670 by @detachhead - Add comparison method for
Color
class, #3646 by @aminalaee - Drop support for python3.6, associated cleanup, #3605 by @samuelcolvin
- created new function
to_lower_camel()
for "non pascal case" camel case, #3463 by @schlerp - Add checks to
default
anddefault_factory
arguments in Mypy plugin, #3430 by @klaa97 - fix mangling of
inspect.signature
forBaseModel
, #3413 by @fix-inspect-signature - Adds the
SecretField
abstract class so that all the current and future secret fields likeSecretStr
andSecretBytes
will derive from it, #3409 by @expobrain - Support multi hosts validation in
PostgresDsn
, #3337 by @rglsk - Fix parsing of very small numeric timedelta values, #3315 by @samuelcolvin
- Update
SecretsSettingsSource
to respectconfig.case_sensitive
, #3273 by @JeanArhancet - Add MongoDB network data source name (DSN) schema, #3229 by @snosratiershad
- Add support for multiple dotenv files, #3222 by @rekyungmin
- Raise an explicit
ConfigError
when multiple fields are incorrectly set for a single validator, #3215 by @SunsetOrange - Allow ellipsis on
Field
s insideAnnotated
forTypedDicts
required, #3133 by @ezegomez - Catch overflow errors in
int_validator
, #3112 by @ojii - Adds a
__rich_repr__
method toRepresentation
class which enables pretty printing with Rich, #3099 by @willmcgugan - Add percent encoding in
AnyUrl
and descendent types, #3061 by @FaresAhmedb validate_arguments
decorator now supportsalias
, #3019 by @MAD-py- Avoid
__dict__
and__weakref__
attributes inAnyUrl
and IP address fields, #2890 by @nuno-andre - Add ability to use
Final
in a field type annotation, #2766 by @uriyyo - Update requirement to
typing_extensions>=4.1.0
to guaranteedataclass_transform
is available, #4424 by @commonism - Add Explosion and AWS to main sponsors, #4413 by @samuelcolvin
- Update documentation for
copy_on_model_validation
to reflect recent changes, #4369 by @samuelcolvin - Runtime warning if
__slots__
is passed tocreate_model
,__slots__
is then ignored, #4432 by @samuelcolvin - Add type hints to
BaseSettings.Config
to avoid mypy errors, also correct mypy version compatibility notice in docs, #4450 by @samuelcolvin
Pre-release, see the GitHub release for details.
Pre-release, see the GitHub release for details.
Pre-release, see the GitHub release for details.
Revert Breaking Change: v1.9.1 introduced a breaking change where model fields were
deep copied by default, this release reverts the default behaviour to match v1.9.0 and before,
while also allow deep-copy behaviour via copy_on_model_validation = 'deep'
. See #4092 for more information.
- Allow for shallow copies of model fields,
Config.copy_on_model_validation
is now a str which must be'none'
,'deep'
, or'shallow'
corresponding to not copying, deep copy & shallow copy; default'shallow'
, #4093 by @timkpaine
Thank you to pydantic's sponsors: @tiangolo, @stellargraph, @JonasKs, @grillazz, @Mazyod, @kevinalh, @chdsbd, @povilasb, @povilasb, @jina-ai, @mainframeindustries, @robusta-dev, @SendCloud, @rszamszur, @jodal, @hardbyte, @corleyma, @daddycocoaman, @Rehket, @jokull, @reillysiemens, @westonsteimel, @primer-io, @koxudaxi, @browniebroke, @stradivari96, @adriangb, @kamalgill, @jqueguiner, @dev-zero, @datarootsio, @RedCarpetUp for their kind support.
- Limit the size of
generics._generic_types_cache
andgenerics._assigned_parameters
to avoid unlimited increase in memory usage, #4083 by @samuelcolvin - Add Jupyverse and FPS as Jupyter projects using pydantic, #4082 by @davidbrochart
- Speedup
__isinstancecheck__
on pydantic models when the type is not a model, may also avoid memory "leaks", #4081 by @samuelcolvin - Fix in-place modification of
FieldInfo
that caused problems with PEP 593 type aliases, #4067 by @adriangb - Add support for autocomplete in VS Code via
__dataclass_transform__
when usingpydantic.dataclasses.dataclass
, #4006 by @giuliano-oliveira - Remove benchmarks from codebase and docs, #3973 by @samuelcolvin
- Typing checking with pyright in CI, improve docs on vscode/pylance/pyright, #3972 by @samuelcolvin
- Fix nested Python dataclass schema regression, #3819 by @himbeles
- Update documentation about lazy evaluation of sources for Settings, #3806 by @garyd203
- Prevent subclasses of bytes being converted to bytes, #3706 by @samuelcolvin
- Fixed "error checking inheritance of" when using PEP585 and PEP604 type hints, #3681 by @aleksul
- Allow self referencing
ClassVar
s in models, #3679 by @samuelcolvin - Breaking Change, see #4106: Fix issue with self-referencing dataclass, #3675 by @uriyyo
- Include non-standard port numbers in rendered URLs, #3652 by @dolfinus
Config.copy_on_model_validation
does a deep copy and not a shallow one, #3641 by @PrettyWood- fix: clarify that discriminated unions do not support singletons, #3636 by @tommilligan
- Add
read_text(encoding='utf-8')
forsetup.py
, #3625 by @hswong3i - Fix JSON Schema generation for Discriminated Unions within lists, #3608 by @samuelcolvin
Thank you to pydantic's sponsors: @sthagen, @timdrijvers, @toinbis, @koxudaxi, @ginomempin, @primer-io, @and-semakin, @westonsteimel, @reillysiemens, @es3n1n, @jokull, @JonasKs, @Rehket, @corleyma, @daddycocoaman, @hardbyte, @datarootsio, @jodal, @aminalaee, @rafsaf, @jqueguiner, @chdsbd, @kevinalh, @Mazyod, @grillazz, @JonasKs, @simw, @leynier, @xfenix for their kind support.
- add Python 3.10 support, #2885 by @PrettyWood
- Discriminated unions, #619 by @PrettyWood
Config.smart_union
for better union logic, #2092 by @PrettyWood- Binaries for Macos M1 CPUs, #3498 by @samuelcolvin
- Complex types can be set via nested environment variables, e.g.
foo___bar
, #3159 by @Air-Mark - add a dark mode to pydantic documentation, #2913 by @gbdlin
- Add support for autocomplete in VS Code via
__dataclass_transform__
, #2721 by @tiangolo - Add "exclude" as a field parameter so that it can be configured using model config, #660 by @daviskirk
- Apply
update_forward_refs
toConfig.json_encodes
prevent name clashes in types defined via strings, #3583 by @samuelcolvin - Extend pydantic's mypy plugin to support mypy versions
0.910
,0.920
,0.921
&0.930
, #3573 & #3594 by @PrettyWood, @christianbundy, @samuelcolvin
- support generic models with discriminated union, #3551 by @PrettyWood
- keep old behaviour of
json()
by default, #3542 by @PrettyWood - Removed typing-only
__root__
attribute fromBaseModel
, #3540 by @layday - Build Python 3.10 wheels, #3539 by @mbachry
- Fix display of
extra
fields with model__repr__
, #3234 by @cocolman - models copied via
Config.copy_on_model_validation
always have all fields, #3201 by @PrettyWood - nested ORM from nested dictionaries, #3182 by @PrettyWood
- fix link to discriminated union section by @PrettyWood
- Add support for
Decimal
-specific validation configurations inField()
, additionally to usingcondecimal()
, to allow better support from editors and tooling, #3507 by @tiangolo - Add
arm64
binaries suitable for MacOS with an M1 CPU to PyPI, #3498 by @samuelcolvin - Fix issue where
None
was considered invalid when using aUnion
type containingAny
orobject
, #3444 by @tharradine - When generating field schema, pass optional
field
argument (of typepydantic.fields.ModelField
) to__modify_schema__()
if present, #3434 by @jasujm - Fix issue when pydantic fail to parse
typing.ClassVar
string type annotation, #3401 by @uriyyo - Mention Python >= 3.9.2 as an alternative to
typing_extensions.TypedDict
, #3374 by @BvB93 - Changed the validator method name in the Custom Errors example
to more accurately describe what the validator is doing; changed from
name_must_contain_space
tovalue_must_equal_bar
, #3327 by @michaelrios28 - Add
AmqpDsn
class, #3254 by @kludex - Always use
Enum
value as default in generated JSON schema, #3190 by @joaommartins - Add support for Mypy 0.920, #3175 by @christianbundy
validate_arguments
now supportsextra
customization (used to always beExtra.forbid
), #3161 by @PrettyWood- Complex types can be set by nested environment variables, #3159 by @Air-Mark
- Fix mypy plugin to collect fields based on
pydantic.utils.is_valid_field
so that it ignores untyped private variables, #3146 by @hi-ogawa - fix
validate_arguments
issue withConfig.validate_all
, #3135 by @PrettyWood - avoid dict coercion when using dict subclasses as field type, #3122 by @PrettyWood
- add support for
object
type, #3062 by @PrettyWood - Updates pydantic dataclasses to keep
_special
properties on parent classes, #3043 by @zulrang - Add a
TypedDict
class for error objects, #3038 by @matthewhughes934 - Fix support for using a subclass of an annotation as a default, #3018 by @JacobHayes
- make
create_model_from_typeddict
mypy compliant, #3008 by @PrettyWood - Make multiple inheritance work when using
PrivateAttr
, #2989 by @hmvp - Parse environment variables as JSON, if they have a
Union
type with a complex subfield, #2936 by @cbartz - Prevent
StrictStr
permittingEnum
values where the enum inherits fromstr
, #2929 by @samuelcolvin - Make
SecretsSettingsSource
parse values being assigned to fields of complex types when sourced from a secrets file, just as when sourced from environment variables, #2917 by @davidmreed - add a dark mode to pydantic documentation, #2913 by @gbdlin
- Make
pydantic-mypy
plugin compatible withpyproject.toml
configuration, consistent withmypy
changes. See the doc for more information, #2908 by @jrwalk - add Python 3.10 support, #2885 by @PrettyWood
- Correctly parse generic models with
Json[T]
, #2860 by @geekingfrog - Update contrib docs re: Python version to use for building docs, #2856 by @paxcodes
- Clarify documentation about pydantic's support for custom validation and strict type checking, despite pydantic being primarily a parsing library, #2855 by @paxcodes
- Fix schema generation for
Deque
fields, #2810 by @sergejkozin - fix an edge case when mixing constraints and
Literal
, #2794 by @PrettyWood - Fix postponed annotation resolution for
NamedTuple
andTypedDict
when they're used directly as the type of fields within Pydantic models, #2760 by @jameysharp - Fix bug when
mypy
plugin fails onconstruct
method call forBaseSettings
derived classes, #2753 by @uriyyo - Add function overloading for a
pydantic.create_model
function, #2748 by @uriyyo - Fix mypy plugin issue with self field declaration, #2743 by @uriyyo
- The colon at the end of the line "The fields which were supplied when user was initialised:" suggests that the code following it is related. Changed it to a period, #2733 by @krisaoe
- Renamed variable
schema
toschema_
to avoid shadowing of global variable name, #2724 by @shahriyarr - Add support for autocomplete in VS Code via
__dataclass_transform__
, #2721 by @tiangolo - add missing type annotations in
BaseConfig
and handlemax_length = 0
, #2719 by @PrettyWood - Change
orm_mode
checking to allow recursive ORM mode parsing with dicts, #2718 by @nuno-andre - Add episode 313 of the Talk Python To Me podcast, where Michael Kennedy and Samuel Colvin discuss Pydantic, to the docs, #2712 by @RatulMaharaj
- fix JSON schema generation when a field is of type
NamedTuple
and has a default value, #2707 by @PrettyWood Enum
fields now properly support extra kwargs in schema generation, #2697 by @sammchardy- Breaking Change, see #3780: Make serialization of referenced pydantic models possible, #2650 by @PrettyWood
- Add
uniqueItems
option toConstrainedList
, #2618 by @nuno-andre - Try to evaluate forward refs automatically at model creation, #2588 by @uriyyo
- Switch docs preview and coverage display to use smokeshow, #2580 by @samuelcolvin
- Add
__version__
attribute to pydantic module, #2572 by @paxcodes - Add
postgresql+asyncpg
,postgresql+pg8000
,postgresql+psycopg2
,postgresql+psycopg2cffi
,postgresql+py-postgresql
andpostgresql+pygresql
schemes forPostgresDsn
, #2567 by @postgres-asyncpg - Enable the Hypothesis plugin to generate a constrained decimal when the
decimal_places
argument is specified, #2524 by @cwe5590 - Allow
collections.abc.Callable
to be used as type in Python 3.9, #2519 by @daviskirk - Documentation update how to custom compile pydantic when using pip install, small change in
setup.py
to allow for custom CFLAGS when compiling, #2517 by @peterroelants - remove side effect of
default_factory
to run it only once even ifConfig.validate_all
is set, #2515 by @PrettyWood - Add lookahead to ip regexes for
AnyUrl
hosts. This allows urls with DNS labels looking like IPs to validate as they are perfectly valid host names, #2512 by @sbv-csis - Set
minItems
andmaxItems
in generated JSON schema for fixed-length tuples, #2497 by @PrettyWood - Add
strict
argument toconbytes
, #2489 by @koxudaxi - Support user defined generic field types in generic models, #2465 by @daviskirk
- Add an example and a short explanation of subclassing
GetterDict
to docs, #2463 by @nuno-andre - add
KafkaDsn
type,HttpUrl
now has default port 80 for http and 443 for https, #2447 by @MihanixA - Add
PastDate
andFutureDate
types, #2425 by @Kludex - Support generating schema for
Generic
fields with subtypes, #2375 by @maximberg - fix(encoder): serialize
NameEmail
to str, #2341 by @alecgerona - add
Config.smart_union
to prevent coercion inUnion
if possible, see the doc for more information, #2092 by @PrettyWood - Add ability to use
typing.Counter
as a model field type, #2060 by @uriyyo - Add parameterised subclasses to
__bases__
when constructing new parameterised classes, so thatA <: B => A[int] <: B[int]
, #2007 by @diabolo-dan - Create
FileUrl
type that allows URLs that conform to RFC 8089. Addhost_required
parameter, which isTrue
by default (AnyUrl
and subclasses),False
inRedisDsn
,FileUrl
, #1983 by @vgerak - add
confrozenset()
, analogous toconset()
andconlist()
, #1897 by @PrettyWood - stop calling parent class
root_validator
if overridden, #1895 by @PrettyWood - Add
repr
(defaults toTrue
) parameter toField
, to hide it from the default representation of theBaseModel
, #1831 by @fnep - Accept empty query/fragment URL parts, #1807 by @xavier
!!! warning A security vulnerability, level "moderate" is fixed in v1.8.2. Please upgrade ASAP. See security advisory CVE-2021-29510
- Security fix: Fix
date
anddatetime
parsing so passing either'infinity'
orfloat('inf')
(or their negative values) does not cause an infinite loop, see security advisory CVE-2021-29510 - fix schema generation with Enum by generating a valid name, #2575 by @PrettyWood
- fix JSON schema generation with a
Literal
of an enum member, #2536 by @PrettyWood - Fix bug with configurations declarations that are passed as keyword arguments during class creation, #2532 by @uriyyo
- Allow passing
json_encoders
in class kwargs, #2521 by @layday - support arbitrary types with custom
__eq__
, #2483 by @PrettyWood - support
Annotated
invalidate_arguments
and in generic models with Python 3.9, #2483 by @PrettyWood
Bug fixes for regressions and new features from v1.8
- allow elements of
Config.field
to update elements of aField
, #2461 by @samuelcolvin - fix validation with a
BaseModel
field and a custom root type, #2449 by @PrettyWood - expose
Pattern
encoder tofastapi
, #2444 by @PrettyWood - enable the Hypothesis plugin to generate a constrained float when the
multiple_of
argument is specified, #2442 by @tobi-lipede-oodle - Avoid
RecursionError
when using some types likeEnum
orLiteral
with generic models, #2436 by @PrettyWood - do not overwrite declared
__hash__
in subclasses of a model, #2422 by @PrettyWood - fix
mypy
complaints onPath
andUUID
related custom types, #2418 by @PrettyWood - Support properly variable length tuples of compound types, #2416 by @PrettyWood
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.
- 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
- 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 @Bobronium
- 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
- Security fix: Fix
date
anddatetime
parsing so passing either'infinity'
orfloat('inf')
(or their negative values) does not cause an infinite loop, See security advisory CVE-2021-29510
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
- fix slow
GenericModel
concrete model creation, allowGenericModel
concrete name reusing in module, #2078 by @Bobronium - 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
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
Thank you to pydantic's sponsors: @timdrijvers, @BCarley, @chdsbd, @tiangolo, @matin, @linusg, @kevinalh, @jorgecarleitao, @koxudaxi, @primer-api for their kind support.
- Python 3.9 support, thanks @PrettyWood
- Private model attributes, thanks @Bobronium
- "secrets files" support in
BaseSettings
, thanks @mdgilene - convert stdlib dataclasses to pydantic dataclasses and use stdlib dataclasses in models, thanks @PrettyWood
- 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 @Bobronium - Add private attributes support, #1679 by @Bobronium
- 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
- Security fix: Fix
date
anddatetime
parsing so passing either'infinity'
orfloat('inf')
(or their negative values) does not cause an infinite loop, See security advisory CVE-2021-29510
- fix validation and parsing of nested models with
default_factory
, #1710 by @PrettyWood
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 @Bobronium - 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
- Signature generation with
extra: allow
never uses a field name, #1418 by @prettywood - Avoid mutating
Field
default value, #1412 by @prettywood
- 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 @Bobronium - Refactor
._iter()
method, 10x speed boost fordict(model)
, #1017 by @Bobronium
- 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
- 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
- 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
- Fix bug where use of complex fields on sub-models could cause fields to be incorrectly configured, #1015 by @samuelcolvin
- 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
- 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
- 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
- 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
(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
- do not validate extra fields when
validate_assignment
is on, #724 by @YaraslauZhylko
- 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 @Bobronium - support
ForwardRef
(without self-referencing annotations) in Python 3.6, #706 by @koxudaxi - implement
schema_extra
inConfig
sub-class, #663 by @tiangolo
- fix json generation for
EnumError
, #697 by @dmontagu - update numerous dependencies
- 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 @Bobronium - more detailed message for
EnumError
, #673 by @dmontagu - add advanced exclude support for
dict
,json
andcopy
, #648 by @Bobronium - 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 @Bobronium - 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
- fix so nested classes which inherit and change
__init__
are correctly processed while still allowingself
as a parameter, #644 by @lnaden and @dgasmith
- 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 @Bobronium - 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
- 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
- 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
- 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
- fix JSON Schema for
list
,tuple
, andset
, #540 by @tiangolo - compiling with cython,
manylinux
binaries, some other performance improvements, #548 by @samuelcolvin
- 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
- 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
- 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
- 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
- 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
- fix typo in
NoneIsNotAllowedError
message, #414 by @YaraslauZhylko - add
IPvAnyAddress
,IPv4Address
andIPv6Address
types, #333 by @pilosus
- 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
- 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
- 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
- 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
- Fix to schema generation with
Optional
fields, fix #361 by @samuelcolvin
- add
ConstrainedBytes
andconbytes
types, #315 @Gr1N - adding
MANIFEST.in
to include license in package.tar.gz
, #358 by @samuelcolvin
- 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
- 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
- fix
create_model
to correctly use the passed__config__
, #320 by @hugoduncan
- 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
- 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
- dataclasses decorator, #269 by @Gaunt and @samuelcolvin
- fix issue where int_validator doesn't cast a
bool
to anint
#264 by @nphyatt - add deep copy support for
BaseModel.copy()
#249, @gangefors
- 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
- fix schema generation for fields defined using
typing.Any
#237
- 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
- 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
- make
list
,tuple
andset
types stricter #86 - breaking change: remove msgpack parsing #201
- add
FilePath
andDirectoryPath
types #10 - model schema generation #190
- JSON serialization of models and schemas #133
- 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
- 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
- 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
- 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
- fix bug with
create_model
modifying the base class
- 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
- allow Python date and times objects #122
- fix direct install without
README.rst
present
- errors for invalid validator use
- safer check for complex models in
Settings
- 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
- 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
- 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
- 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
- pypi and travis together messed up the deploy of
v0.2
this should fix it
- 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
- add docs
- add history