Releases: pydantic/pydantic
v2.11.5 2025-05-22
v2.11.4 2025-04-29
What's Changed
Packaging
Changes
- Allow config and bases to be specified together in
create_model()
by @Viicos in #11714.
This change was backported as it was previously possible (although not meant to be supported)
to providemodel_config
as a field, which would make it possible to provide both configuration
and bases.
Fixes
- Remove generics cache workaround by @Viicos in #11755
- Remove coercion of decimal constraints by @Viicos in #11772
- Fix crash when expanding root type in the mypy plugin by @Viicos in #11735
- Fix issue with recursive generic models by @Viicos in #11775
- Traverse
function-before
schemas during schema gathering by @Viicos in #11801
v2.11.3 2025-04-08
v2.11.2 2025-04-03
What's Changed
Fixes
- Bump
pydantic-core
to v2.33.1 by @Viicos in #11678 - Make sure
__pydantic_private__
exists before setting private attributes by @Viicos in #11666 - Do not override
FieldInfo._complete
when using field from parent class by @Viicos in #11668 - Provide the available definitions when applying discriminated unions by @Viicos in #11670
- Do not expand root type in the mypy plugin for variables by @Viicos in #11676
- Mention the attribute name in model fields deprecation message by @Viicos in #11674
- Properly validate parameterized mappings by @Viicos in #11658
- Prepare release v2.11.2 by @Viicos in #11684
Full Changelog: v2.11.1...v2.11.2
v2.11.1 2025-03-28
What's Changed
Fixes
- Do not override
'definitions-ref'
schemas containing serialization schemas or metadata by @Viicos in #11644
Full Changelog: v2.11.0...v2.11.1
v2.11.0 2025-03-27
What's Changed
Packaging
- Re-enable memray related tests on Python 3.12+ by @Viicos in #11191
- Bump astral-sh/setup-uv from 4 to 5 by @dependabot in #11205
- Add a
check_pydantic_core_version()
function by @Viicos in #11324 - Remove
greenlet
development dependency by @Viicos in #11351 - Bump ruff from 0.9.2 to 0.9.5 by @Viicos in #11407
- Improve release automation process by @austinyu in #11427
- Bump dawidd6/action-download-artifact from 8 to 9 by @dependabot in #11513
- Bump
pydantic-core
to v2.32.0 by @Viicos in #11567
New Features
- Support unsubstituted type variables with both a default and a bound or constraints by @FyZzyss in #10789
- Add a
default_factory_takes_validated_data
property toFieldInfo
by @Viicos in #11034 - Raise a better error when a generic alias is used inside
type[]
by @Viicos in #11088 - Properly support PEP 695 generics syntax by @Viicos in #11189
- Properly support type variable defaults by @Viicos in #11332
- Add support for validating v6, v7, v8 UUIDs by @astei in #11436
- Improve alias configuration APIs by @sydney-runkle in #11468
- Add experimental support for free threading by @Viicos in #11516
- Add
encoded_string()
method to the URL types by @YassinNouh21 in #11580 - Add support for
defer_build
with@validate_call
decorator by @Viicos in #11584 - Allow
@with_config
decorator to be used with keyword arguments by @Viicos in #11608 - Simplify customization of default value inclusion in JSON Schema generation by @Viicos in #11634
- Add
generate_arguments_schema()
function by @Viicos in #11572
Changes
- Rework
create_model
field definitions format by @Viicos in #11032 - Raise a deprecation warning when a field is annotated as final with a default value by @Viicos in #11168
- Deprecate accessing
model_fields
andmodel_computed_fields
on instances by @Viicos in #11169 - Move core schema generation logic for path types inside the
GenerateSchema
class by @sydney-runkle in #10846 - Move
Mapping
schema gen toGenerateSchema
to complete removal ofprepare_annotations_for_known_type
workaround by @sydney-runkle in #11247 - Remove Python 3.8 Support by @sydney-runkle in #11258
- Optimize calls to
get_type_ref
by @Viicos in #10863 - Disable
pydantic-core
core schema validation by @sydney-runkle in #11271
Performance
- Only evaluate
FieldInfo
annotations if required during schema building by @Viicos in #10769 - Improve
__setattr__
performance of Pydantic models by caching setter functions by @MarkusSintonen in #10868 - Improve annotation application performance by @Viicos in #11186
- Improve performance of
_typing_extra
module by @Viicos in #11255 - Refactor and optimize schema cleaning logic by @Viicos in #11244
- Create a single dictionary when creating a
CoreConfig
instance by @sydney-runkle in #11384 - Reuse cached core schemas for parametrized generic Pydantic models by @MarkusSintonen in #11434
Fixes
- Add validation tests for
_internal/_validators.py
by @tkasuz in #10763 - Subclass all single host url classes from
AnyUrl
to preserve behavior from v2.9 by @sydney-runkle in #10856 - Improve
TypeAdapter
instance repr by @sydney-runkle in #10872 - Use the correct frame when instantiating a parametrized
TypeAdapter
by @Viicos in #10893 - Relax check for validated data in default factory utils by @sydney-runkle in #10909
- Fix type checking issue with
model_fields
andmodel_computed_fields
by @sydney-runkle in #10911 - Use the parent configuration during schema generation for stdlib dataclasses by @sydney-runkle in #10928
- Use the globals of the function when evaluating the return type of serializers and computed_fields by @Viicos in #10929
- Fix url constraint application by @sydney-runkle in #10922
- Fix URL equality with different validation methods by @sydney-runkle in #10934
- Fix JSON schema title when specified as
''
by @sydney-runkle in #10936 - Do not evaluate annotations for private fields by @Viicos in #10962
- Support serialization as any for
Secret
types andUrl
types by @sydney-runkle in #10947 - Fix type hint of
Field.default
to be compatible with Python 3.8 and 3.9 by @Viicos in #10972 - hashing support for urls by @sydney-runkle in #10975
- Hide
BaseModel.__replace__
definition from type checkers by @Viicos in #10979 - Set fields when
defer_build
is set on Pydantic dataclasses by @Viicos in #10984 - Do not resolve the JSON Schema reference for
dict
core schema keys by @Viicos in #10989 - Use the globals of the function when evaluating the return type for
PlainSerializer
andWrapSerializer
functions by @Viicos in #11008 - Fix host required enforcement for urls to be compatible with v2.9 behavior by @sydney-runkle in #11027
- Fix url json schema in
serialization
mode by @sydney-runkle in #11035 - Fix for comparison of AnyUrl objects by @alexprabhat99 in #11082
- Properly fetch PEP 695 type params for functions, do not fetch annotations from signature by @Viicos in #11093
- Infer final fields with a default value as class variables in the mypy plugin by @Viicos in #11121
- Recursively unpack
Literal
values if using PEP 695 type aliases by @Viicos in #11114 - Override
__subclasscheck__
onModelMetaclass
to avoid memory leak and performance issues by @Viicos in #11116 - Include JSON Schema input core schema in function schemas by @Viicos in #11085
- Add
len
to_BaseUrl
to avoid TypeError by @Kharianne in #11111 - Make sure the type reference is removed from the seen references by @Viicos in #11143
- Add FastAPI and SQLModel to third-party tests by @sydney-runkle in #11044
- Improve discriminated union error message for invalid union variants by @Viicos in #11161
- Unpack PEP 695 type aliases if using the
Annotated
form by @Viicos in #11109 - Remove custom MRO implementation of Pydantic models by @Viicos in #11184
- Add pandera third-party tests by @Viicos in #11193
- Add ODMantic third-party tests by @sydney-runkle in #11197
- Copy
WithJsonSchema
schema to avoid sharing mutated data by @thejcannon in #11014 - Do not cache parametrized models when in the process of parametrizing another model by @Viicos in #10704
- Add discriminated union related metadata entries to the
CoreMetadata
definition by @Viicos in #11216 - Consolidate schema definitions logic in the
_Definitions
class by @Viicos in #11208 - Fix url serialization for unions by @sydney-runkle in #11227
- Support initializing root model fields with values of the
root
type in the mypy plugin by @Viicos in #11212 - Move
deque
schema gen toGenerateSchema
class by @sydney-runkle in https://github.com/pydantic/pydanti...
v2.11.0b2 2025-03-17
v2.11.0b1 2025-03-06
What's Changed
Note
Addendum: 2.11 introduced a small behavior change with Final
attributes with an underscore:
class Model(BaseModel):
_var: Final[int] = 1
In 2.10, _var
would be considered as a class variable, but as a private attribute in 2.11.
As documented in the blog post, you can make use of ClassVar
instead of Final
to keep it as a class variable.
Packaging
- Add a
check_pydantic_core_version()
function by @Viicos in #11324 - Remove
greenlet
development dependency by @Viicos in #11351 - Use the
typing-inspection
library by @Viicos in #11479 - Bump
pydantic-core
tov2.31.1
by @sydney-runkle in #11526
New Features
- Support unsubstituted type variables with both a default and a bound or constraints by @FyZzyss in #10789
- Add a
default_factory_takes_validated_data
property toFieldInfo
by @Viicos in #11034 - Raise a better error when a generic alias is used inside
type[]
by @Viicos in #11088 - Properly support PEP 695 generics syntax by @Viicos in #11189
- Properly support type variable defaults by @Viicos in #11332
- Add support for validating v6, v7, v8 UUIDs by @astei in #11436
- Improve alias configuration APIs by @sydney-runkle in #11468
Changes
- Rework
create_model
field definitions format by @Viicos in #11032 - Raise a deprecation warning when a field is annotated as final with a default value by @Viicos in #11168
- Deprecate accessing
model_fields
andmodel_computed_fields
on instances by @Viicos in #11169 - Breaking Change: Move core schema generation logic for path types inside the
GenerateSchema
class by @sydney-runkle in #10846 - Remove Python 3.8 Support by @sydney-runkle in #11258
- Optimize calls to
get_type_ref
by @Viicos in #10863 - Disable
pydantic-core
core schema validation by @sydney-runkle in #11271
Performance
- Only evaluate
FieldInfo
annotations if required during schema building by @Viicos in #10769 - Improve
__setattr__
performance of Pydantic models by caching setter functions by @MarkusSintonen in #10868 - Improve annotation application performance by @Viicos in #11186
- Improve performance of
_typing_extra
module by @Viicos in #11255 - Refactor and optimize schema cleaning logic by @Viicos in #11244
- Create a single dictionary when creating a
CoreConfig
instance by @sydney-runkle in #11384 - Bump
pydantic-core
and thus useSchemaValidator
andSchemaSerializer
caching by @sydney-runkle in #11402 - Reuse cached core schemas for parametrized generic Pydantic models by @MarkusSintonen in #11434
Fixes
- Improve
TypeAdapter
instance repr by @sydney-runkle in #10872 - Use the correct frame when instantiating a parametrized
TypeAdapter
by @Viicos in #10893 - Infer final fields with a default value as class variables in the mypy plugin by @Viicos in #11121
- Recursively unpack
Literal
values if using PEP 695 type aliases by @Viicos in #11114 - Override
__subclasscheck__
onModelMetaclass
to avoid memory leak and performance issues by @Viicos in #11116 - Remove unused
_extract_get_pydantic_json_schema()
parameter by @Viicos in #11155 - Improve discriminated union error message for invalid union variants by @Viicos in #11161
- Unpack PEP 695 type aliases if using the
Annotated
form by @Viicos in #11109 - Add missing stacklevel in
deprecated_instance_property
warning by @Viicos in #11200 - Copy
WithJsonSchema
schema to avoid sharing mutated data by @thejcannon in #11014 - Do not cache parametrized models when in the process of parametrizing another model by @Viicos in #10704
- Add discriminated union related metadata entries to the
CoreMetadata
definition by @Viicos in #11216 - Consolidate schema definitions logic in the
_Definitions
class by @Viicos in #11208 - Support initializing root model fields with values of the
root
type in the mypy plugin by @Viicos in #11212 - Fix various issues with dataclasses and
use_attribute_docstrings
by @Viicos in #11246 - Only compute normalized decimal places if necessary in
decimal_places_validator
by @misrasaurabh1 in #11281 - Add support for
validation_alias
in the mypy plugin by @Viicos in #11295 - Fix JSON Schema reference collection with
"examples"
keys by @Viicos in #11305 - Do not transform model serializer functions as class methods in the mypy plugin by @Viicos in #11298
- Simplify
GenerateJsonSchema.literal_schema()
implementation by @misrasaurabh1 in #11321 - Add additional allowed schemes for
ClickHouseDsn
by @Maze21127 in #11319 - Coerce decimal constraints to
Decimal
instances by @Viicos in #11350 - Use the correct JSON Schema mode when handling function schemas by @Viicos in #11367
- Improve exception message when encountering recursion errors during type evaluation by @Viicos in #11356
- Always include
additionalProperties: True
for arbitrary dictionary schemas by @austinyu in #11392 - Expose
fallback
parameter in serialization methods by @Viicos in #11398 - Fix path serialization behavior by @sydney-runkle in #11416
- Do not reuse validators and serializers during model rebuild by @Viicos in #11429
- Collect model fields when rebuilding a model by @Viicos in #11388
- Allow cached properties to be altered on frozen models by @Viicos in #11432
- Fix tuple serialization for
Sequence
types by @sydney-runkle in #11435 - Fix: do not check for
__get_validators__
on classes where__get_pydantic_core_schema__
is also defined by @tlambert03 in #11444 - Allow callable instances to be used as serializers by @Viicos in #11451
- Improve error thrown when overriding field with a property by @sydney-runkle in #11459
- Fix JSON Schema generation with referenceable core schemas holding JSON metadata by @Viicos in #11475
- Support strict specification on union member types by @sydney-runkle in #11481
- Implicitly set
validate_by_name
toTrue
whenvalidate_by_alias
isFalse
by @sydney-runkle in #11503 - Change type of
Any
when synthesizingBaseSettings.__init__
signature in the mypy plugin by @Viicos in #11497 - Support type variable defaults referencing other type variables by @Viicos in #11520
- Fix
ValueError
on year zero by @davidhewitt in pydantic/pydantic-core#1583 dataclass
InitVar
shouldn't be required on serialization by @sydney-runkle in pydantic/pydantic-core#1602
New Contributors
- @FyZzyss made their first contribution in #10789
- @tamird made their first contribution in #10948
- @felixxm made their first contribution in #11077
- @alexprabhat99 made their first contribution in #11082
- @Kharianne made their first c...
v2.11.0a2 2025-02-10
What's Changed
Note
Pydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).
This is another early alpha release, meant to collect early feedback from users having issues with core schema builds.
Packaging
- Bump ruff from 0.9.2 to 0.9.5 by @Viicos in #11407
- Bump
pydantic-core
to v2.29.0 by @mikeedjones in #11402 - Use locally-built rust with symbols & pgo by @davidhewitt in #11403
Performance
- Create a single dictionary when creating a
CoreConfig
instance by @sydney-runkle in #11384
Fixes
- Use the correct JSON Schema mode when handling function schemas by @Viicos in #11367
- Fix
F438
JSON Schema reference logic with
examples
keys by @Viicos in #11366 - Improve exception message when encountering recursion errors during type evaluation by @Viicos in #11356
- Always include
additionalProperties: True
for arbitrary dictionary schemas by @austinyu in #11392 - Expose
fallback
parameter in serialization methods by @Viicos in #11398 - Fix path serialization behavior by @sydney-runkle in #11416
New Contributors
- @kauabh made their first contribution in #11369
- @jaceklaskowski made their first contribution in #11353
- @tmpbeing made their first contribution in #11375
- @petyosi made their first contribution in #11405
- @austinyu made their first contribution in #11392
- @mikeedjones made their first contribution in #11402
Full Changelog: v2.11.0a1...v2.11.0a2
v2.11.0a1 2025-01-30
v2.11.0a1 (2025-01-30)
What's Changed
Note
Pydantic v2.11 is a version strongly focused on build time performance of Pydantic models (and core schema generation in general).
This is an early alpha release, meant to collect early feedback from users having issues with core schema builds.
Packaging
- Bump dawidd6/action-download-artifact from 6 to 7 by @dependabot in #11018
- Re-enable memray related tests on Python 3.12+ by @Viicos in #11191
- Bump astral-sh/setup-uv to 5 by @dependabot in #11205
- Bump
ruff
to v0.9.0 by @sydney-runkle in #11254 - Regular
uv.lock
deps update by @sydney-runkle in #11333 - Add a
check_pydantic_core_version()
function by @Viicos in #11324 - Remove
greenlet
development dependency by @Viicos in #11351 - Bump
pydantic-core
to v2.28.0 by @Viicos in #11364
New Features
- Support unsubstituted type variables with both a default and a bound or constraints by @FyZzyss in #10789
- Add a
default_factory_takes_validated_data
property toFieldInfo
by @Viicos in #11034 - Raise a better error when a generic alias is used inside
type[]
by @Viicos in #11088 - Properly support PEP 695 generics syntax by @Viicos in #11189
- Properly support type variable defaults by @Viicos in #11332
Changes
- Rework
create_model
field definitions format by @Viicos in #11032 - Raise a deprecation warning when a field is annotated as final with a default value by @Viicos in #11168
- Deprecate accessing
model_fields
andmodel_computed_fields
on instances by @Viicos in #11169 - Move core schema generation logic for path types inside the
GenerateSchema
class by @sydney-runkle in #10846 - Move
deque
schema gen toGenerateSchema
class by @sydney-runkle in #11239 - Move
Mapping
schema gen toGenerateSchema
to complete removal ofprepare_annotations_for_known_type
workaround by @sydney-runkle in #11247 - Remove Python 3.8 Support by @sydney-runkle in #11258
- Disable
pydantic-core
core schema validation by @sydney-runkle in #11271
Performance
- Only evaluate
FieldInfo
annotations if required during schema building by @Viicos in #10769 - Optimize calls to
get_type_ref
by @Viicos in #10863 - Improve
__setattr__
performance of Pydantic models by caching setter functions by @MarkusSintonen in #10868 - Improve annotation application performance by @Viicos in #11186
- Improve performance of
_typing_extra
module by @Viicos in #11255 - Refactor and optimize schema cleaning logic by @Viicos and @MarkusSintonen in #11244
Fixes
- Add validation tests for
_internal/_validators.py
by @tkasuz in #10763 - Improve
TypeAdapter
instance repr by @sydney-runkle in #10872 - Revert "ci: use locally built pydantic-core with debug symbols by @sydney-runkle in #10942
- Re-enable all FastAPI tests by @tamird in #10948
- Fix typo in HISTORY.md. by @felixxm in #11077
- Infer final fields with a default value as class variables in the mypy plugin by @Viicos in #11121
- Recursively unpack
Literal
values if using PEP 695 type aliases by @Viicos in #11114 - Override
__subclasscheck__
onModelMetaclass
to avoid memory leak and performance issues by @Viicos in #11116 - Remove unused
_extract_get_pydantic_json_schema()
parameter by @Viicos in #11155 - Add FastAPI and SQLModel to third-party tests by @sydney-runkle in #11044
- Fix conditional expressions syntax for third-party tests by @Viicos in #11162
- Move FastAPI tests to third-party workflow by @Viicos in #11164
- Improve discriminated union error message for invalid union variants by @Viicos in #11161
- Unpack PEP 695 type aliases if using the
Annotated
form by @Viicos in #11109 - Include
openapi-python-client
check in issue creation for third-party failures, usemain
branch by @sydney-runkle in #11182 - Add pandera third-party tests by @Viicos in #11193
- Add ODMantic third-party tests by @sydney-runkle in #11197
- Add missing stacklevel in
deprecated_instance_property
warning by @Viicos in #11200 - Copy
WithJsonSchema
schema to avoid sharing mutated data by @thejcannon in #11014 - Do not cache parametrized models when in the process of parametrizing another model by @Viicos in #10704
- Re-enable Beanie third-party tests by @Viicos in #11214
- Add discriminated union related metadata entries to the
CoreMetadata
definition by @Viicos in #11216 - Consolidate schema definitions logic in the
_Definitions
class by @Viicos in #11208 - Support initializing root model fields with values of the
root
type in the mypy plugin by @Viicos in #11212 - Fix various issues with dataclasses and
use_attribute_docstrings
by @Viicos in #11246 - Only compute normalized decimal places if necessary in
decimal_places_validator
by @misrasaurabh1 in #11281 - Fix two misplaced sentences in validation errors documentation by @ananiavito in #11302
- Fix mkdocstrings inventory example in documentation by @pawamoy in #11311
- Add support for
validation_alias
in the mypy plugin by @Viicos in #11295 - Do not transform model serializer functions as class methods in the mypy plugin by @Viicos in #11298
- Simplify
GenerateJsonSchema.literal_schema()
implementation by @misrasaurabh1 in #11321 - Add additional allowed schemes for
ClickHouseDsn
by @Maze21127 in #11319 - Coerce decimal constraints to
Decimal
instances by @Viicos in #11350 - Fix
ValueError
on year zero by @davidhewitt in pydantic-core#1583
New Contributors
- @FyZzyss made their first contribution in #10789
- @tamird made their first contribution in #10948
- @felixxm made their first contribution in #11077
- @alexprabhat99 made their first contribution in #11082
- @Kharianne made their first contribution in #11111
- @mdaffad made their first contribution in #11177
- @thejcannon made their first contribution in #11014
- @thomasfrimannkoren made their first contribution in #11251
- @usernameMAI made their first contribution in #11275
- @ananiavito made their first contribution in #11302
- @pawamoy made their first contribution in #11311
- @Maze21127 made their first contribution in #11319