Releases: pydantic/pydantic
Releases · pydantic/pydantic
v2.5.0b1 (2023-11-09)
What's Changed
Packaging
- Update pydantic-core from 2.10.1 to 2.14.1, significant changes from these updates are described below, full changelog here
New Features
- 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 #7983 - 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
Changes
- 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
Performance
- 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
Fixes
- 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
New Contributors
pydantic
- @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](https://github.com/...
v2.4.2 2023-09-27
What's Changed
Fixes
- 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
New Contributors
- @austinorr made their first contribution in #7657
- @peterHoburg made their first contribution in #7670
Full Changelog: v2.4.1...v2.4.2/
V1.10.13 2023-09-27
What's Changed
- Update pip commands to install 1.10 by @chbndrhnns in #6930
- Make the v1 mypy plugin work with both v1 and v2 by @dmontagu in #6920
- [Backport] Add max length check to
validate_email
by @hramezani in #7673
Full Changelog: v1.10.12...v1.10.13
v2.4.1 2023-09-26
What's Changed
Packaging
- Update pydantic-core to 2.10.1 by @davidhewitt in #7633
Fixes
- 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
Full Changelog: v2.4.0...v2.4.1/
v2.4.0 2023-09-25
What's Changed
Packaging
- Update pydantic-core to 2.10.0 by @samuelcolvin in #7542
New Features
- 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
Changes
- 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
Performance
- 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
Fixes
- 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
New Contributors
- @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
Full Changelog: v2.3.0...v2.4.0
v2.3.0 2023-08-23
What's Changed
- 🔥 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
New Contributors
Full Changelog: v2.2.1...v2.2.2
v2.2.1 2023-08-18
What's Changed
- Make xfailing test for root model extra stop xfailing by @dmontagu in #6937
- Optimize recursion detection by stopping on the second visit for the … by @mciucu in #7160
- fix link in docs by @tlambert03 in #7166
- Bump pydantic-core to 2.6.1 and prepare 2.2.1 release by @adriangb in #7176
New Contributors
Full Changelog: v2.2.0...v2.2.1
v2.2.0 2023-08-17
What's Changed
- 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
- Prepare for v2.2.0 by @dmontagu in #7157
New Contributors
- @nomadmtb made their first contribution in #6869
- @RS-Credentive made their first contribution in #6878
- @ialarmedalien made their first contribution in #6886
- @randomir made their first contribution in #6919
- @carlbordum made their first contribution in #6926
- @vishallama made their first contribution in #6947
- @andresliszt made their first contribution in #6965
- @AdamVinch-Federated made their first contribution in #7032
- @eumiro made their first contribution in #7063
- @harunyasar made their first contribution in #7062
- @mo1ein made their first contribution in #7074
- @swetjen made their first contribution in #6995
- @benbenbang made their first contribution in #6950
- @jc-louis made their first contribution in #7137
- @yvalencia91 made their first contribution in #7124
Full Changelog: v2.1.1...v2.2.0
v2.1.1 2023-07-25
v2.1.0 2023-07-25
What's Changed
- 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 to MOVED_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 - Prepare for release of v2.1.0 by @samuelcolvin in #6853
New Contributors
- @ehiggs-deliverect made their first contribution in #6676
- @AlexVndnblcke made their first contribution in #6730
- @ljodal made their first contribution in #6753
- @progsmile made their first contribution in #6824
- @ImogenBits made their first contribution in #6809
Full Changelog: v2.0.3...v2.1.0