v2.5.0 2023-11-13
v2.5.0 (2023-11-13)
The code released in v2.5.0 is functionally identical to that of v2.5.0b1.
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
- Update to
pyright==1.1.335by @Viicos in #8075
New Features
- Allow plugins to catch non
ValidationErrorerrors by @adriangb in #7806 - Support
__doc__argument increate_model()by @chris-spann in #7863 - Expose
regex_engineflag - 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
ComputedFieldInfoby @alexmojaki in #7889 - Adopting
ruffformatter by @Luca-Blight in #7930 - Added
validation_error_causeto config by @zakstucke in #7626 - Make path of the item to validate available in plugin by @hramezani in #7861
- Add
CallableDiscriminatorandTagby @dmontagu in #7983 - Make union case tags affect union error messages by @dmontagu in #8001
- Add
examplesandjson_schema_extrato@computed_fieldby @alexmojaki in #8013 - Add
JsonValuetype by @dmontagu in #7998 - Allow
stras argument toDiscriminatorby @dmontagu in #8047 - Add
SchemaSerializer.__reduce__method to enable pickle serialization by @edoakes in pydantic/pydantic-core#1006
Changes
- Significant Change: replace
ultra_strictwith 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
Enumtypes with no cases by @sydney-runkle in #7927 - Warn if a class inherits from
GenericbeforeBaseModelby @alexmojaki in #7891
Performance
- New custom JSON parser,
jiterby @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
mypyissue with subclasses ofRootModelby @sydney-runkle in #7677 - Properly rebuild the
FieldInfowhen a forward ref gets evaluated by @dmontagu in #7698 - Fix failure to load
SecretStrfrom JSON (regression in v2.4) by @sydney-runkle in #7729 - Fix
defer_buildbehavior withTypeAdapterby @sydney-runkle in #7736 - Improve compatibility with legacy
mypyversions by @dmontagu in #7742 - Fix: update
TypeVarhandling when default is not set by @pmmmwh in #7719 - Support specification of
strictonEnumtype fields by @sydney-runkle in #7761 - Wrap
weakref.refinstead of subclassing to fixcloudpickleserialization by @edoakes in #7780 - Keep values of private attributes set within
model_post_initin subclasses by @alexmojaki in #7775 - Add more specific type for non-callable
json_schema_extraby @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
strictspecification forUUIDtypes 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_calldecorator for methods in classes with__slots__by @sydney-runkle in #7883 - Fix pydantic dataclass problem with
dataclasses.fielddefault by @hramezani in #7898 - Fix schema generation for generics with union type bounds by @sydney-runkle in #7899
- Fix version for
importlib_metadataon python 3.7 by @sydney-runkle in #7904 - Support
|operator (Union) in PydanticRecursiveRef by @alexmojaki in #7892 - Fix
display_as_typeforTypeAliasTypein python 3.12 by @dmontagu in #7929 - Add support for
NotRequiredgenerics inTypedDictby @sydney-runkle in #7932 - Make generic
TypeAliasTypespecifications 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
PrivateAttris passed fromAnnotateddefault position by @tabassco in #8004- Don't decode bytes (which may not be UTF8) when displaying SecretBytes by @alexmojaki in #8012
- Use
classmethodinstead 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
Optionalfield withvalidate_defaultonly performing one field validation by @sydney-runkle in pydantic/pydantic-core#1002 - Fix
definition-refbug withDictkeys by @sydney-runkle in pydantic/pydantic-core#1014 - Fix bug allowing validation of
booltypes withcoerce_numbers_to_str=Trueby @sydney-runkle in pydantic/pydantic-core#1017 - Don't accept
NaNin float and decimal constraints by @davidhewitt in pydantic/pydantic-core#1037 - Add
lax_strandlax_intsupport for enum values not inherited from str/int by @michaelhly in pydantic/pydantic-core#1015 - Support subclasses in lists in
UnionofListtypes by @sydney-runkle in pydantic/pydantic-core#1039 - Allow validation against
max_digitsanddecimalsto pass if normalized or non-normalized input is valid by @sydney-runkle in pydantic/pydantic-core#1049 - Fix: proper pluralization in
ValidationErrormessages by @Iipin in pydantic/pydantic-core#1050 - Disallow the string
'-'asdatetimeinput 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
- @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
pydantic-core
- @sisp made their first contribution in pydantic/pydantic-core#995
- @michaelhly made their first contribution in pydantic/pydantic-core#1015
Full Changelog: v2.4.2...v2.5.0