Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clean up serialization warnings for invalid data in unions #1449

Merged
merged 4 commits into from
Sep 16, 2024

Conversation

sydney-runkle
Copy link
Member

@sydney-runkle sydney-runkle commented Sep 12, 2024

Fix pydantic/pydantic#10363
Fix pydantic/pydantic#10344

This makes it such that we report all warnings associated with union serialization. This is similar to union validation, where the errors can be quite verbose. One example that clearly demonstrates the change is the following. We used to raise one error saying expected Union[A, B], got C (or something similar). Now we report on all warnings.

from pydantic import BaseModel, TypeAdapter

class A(BaseModel):
    a: int

class B(BaseModel):
    b: int

class C(BaseModel):
    c: int

ta = TypeAdapter(A | B)
print(ta.dump_python(C(c=1)))

"""
PydanticSerializationUnexpectedValue: Expected `A` but got `C` with value `C(c=1)` - serialized value may not be as expected
PydanticSerializationUnexpectedValue: Expected `B` but got `C` with value `C(c=1)` - serialized value may not be as expected
"""

I think there's still more to improve here - we should probably group the errors more intuitively, and use shared logic across much of the PydanticSerializationUnexpectedValue initialization steps. Also, in the long term, we should remove the fallback to the union serializer for tagged unions and jump straight to inference instead. Will probably retain this for backwards compatibility for a few minor versions as we iron out small issues like this one.

Copy link

codspeed-hq bot commented Sep 12, 2024

CodSpeed Performance Report

Merging #1449 will not alter performance

Comparing warning-fix (d24aad5) with main (16331d7)

Summary

✅ 155 untouched benchmarks

@sydney-runkle sydney-runkle changed the title Fix errs -> warnings in union serialization Clean up serialization warnings for invalid data in unions Sep 13, 2024
@sydney-runkle
Copy link
Member Author

Currently, we don't warn on tagged unions. I'd like to move us to a place where we eventually don't fall back to untagged union serialization for tagged unions, at which point we can add in warnings for tagged unions.

@sydney-runkle
Copy link
Member Author

sydney-runkle commented Sep 16, 2024

A few test cases here:

from typing import Tuple

import pydantic


class Model(pydantic.BaseModel):
    values: Tuple[float, ...]


model = Model(values=(0, 1))
print(pydantic.__version__, repr(model), model.model_dump())
model = model.model_copy(deep=True, update={"values": [1, 2]})
print(pydantic.__version__, repr(model), model.model_dump())
model = model.model_validate(model)
print(pydantic.__version__, repr(model), model.model_dump())

"""
Model(values=(0.0, 1.0)) {'values': (0.0, 1.0)}
/Users/programming/pydantic_work/pydantic/pydantic/main.py:387: UserWarning: Pydantic serializer warnings:
  Expected `tuple[float, ...]` but got `list` with value `[1, 2]` - serialized value may not be as expected
  return self.__pydantic_serializer__.to_python(
Model(values=[1, 2]) {'values': [1, 2]}
Model(values=[1, 2]) {'values': [1, 2]}
"""
from pydantic import BaseModel, TypeAdapter

class A(BaseModel):
    a: int

class B(BaseModel):
    b: int

class C(BaseModel):
    c: int

ta = TypeAdapter(A | B)
print(ta.dump_python(C(c=1)))

"""
PydanticSerializationUnexpectedValue: Expected `A` but got `C` with value `C(c=1)` - serialized value may not be as expected
PydanticSerializationUnexpectedValue: Expected `B` but got `C` with value `C(c=1)` - serialized value may not be as expected
"""
from typing import Annotated, Literal, Union

from pydantic import BaseModel, Field


class Bar(BaseModel):
    discriminator_key: Literal["Bar"] = "Bar"
    name: str


class Foo(BaseModel):
    discriminator_key: Literal["Foo"] = "Foo"


class Container(BaseModel):

    prop: Annotated[Union[Bar, Foo], Field(..., discriminator="discriminator_key")]


bar = Bar.model_construct()
foo_child = Foo()
container = Container.model_construct(prop=bar)
print(bar.model_dump())
print(container.model_dump())

"""
PydanticSerializationUnexpectedValue: Expected 2 fields but got 1 for type `Bar` with value `Bar(discriminator_key='Bar')` - serialized value may not be as expected.
PydanticSerializationUnexpectedValue: Expected `Foo` but got `Bar` with value `Bar(discriminator_key='Bar')` - serialized value may not be as expected
"""

Comment on lines +395 to +403
let type_name = value
.get_type()
.qualname()
.unwrap_or_else(|_| PyString::new_bound(value.py(), "<unknown python object>"));

let value_str = truncate_safe_repr(value, None);
Err(PydanticSerializationUnexpectedValue::new_err(Some(format!(
"Expected `{field_type}` but got `{type_name}` with value `{value_str}` - serialized value may not be as expected"
))))
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Admittedly is a bit redundant with existing code - would like to standardize how we raise serialization errors in pydantic-core for the v2.10 release :)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This case shows why we might want to do that - could probably minimize the duplicates here:

from typing import Annotated, FrozenSet, Union, Literal, List

from pydantic import BaseModel, PlainSerializer, IPvAnyAddress, Field
from ipaddress import IPv4Network

SortedFrozenNetworkSet = Annotated[
    FrozenSet[IPv4Network],
    PlainSerializer(
        lambda x: sorted(str(network) for network in x),
        return_type=FrozenSet[str],
    ),
]


class ModelA(BaseModel):
    type: Literal["A"]
    addresses: SortedFrozenNetworkSet


class ModelB(BaseModel):
    type: Literal["B"]
    hostname: str
    address: IPvAnyAddress


AnnotatedUnionType = Annotated[
    Union[ModelA, ModelB],
    Field(discriminator="type")
]


class CompositeModel(BaseModel):
    composite_field: AnnotatedUnionType


data = {"composite_field": {"type": "A", "addresses": ["192.168.1.0/24", "127.0.0.1"]}}
model = CompositeModel(**data)
print("Deserialized:", model.model_dump_json())

"""
PydanticSerializationUnexpectedValue: Expected `frozenset[str]` but got `list` with value `['127.0.0.1/32', '192.168.1.0/24']` - serialized value may not be as expected
PydanticSerializationUnexpectedValue: Expected `ModelB` but got `ModelA` with value `ModelA(type='A', addresse...twork('127.0.0.1/32')}))` - serialized value may not be as expected
Expected `frozenset[str]` but got `list` with value `['127.0.0.1/32', '192.168.1.0/24']` - serialized value may not be as expected
"""

@sydney-runkle
Copy link
Member Author

I've opened #1454 and #1455 to hold us accountable to the suggestions made above.

@sydney-runkle sydney-runkle merged commit 4a0c332 into main Sep 16, 2024
29 checks passed
@sydney-runkle sydney-runkle deleted the warning-fix branch September 16, 2024 15:31
renovate bot added a commit to spiraldb/ziggy-pydust that referenced this pull request Sep 17, 2024
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [pydantic](https://redirect.github.com/pydantic/pydantic)
([changelog](https://docs.pydantic.dev/latest/changelog/)) | `2.9.1` ->
`2.9.2` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pydantic/2.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pydantic/2.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pydantic/2.9.1/2.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pydantic/2.9.1/2.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>pydantic/pydantic (pydantic)</summary>

###
[`v2.9.2`](https://redirect.github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v292-2024-09-17)

[Compare
Source](https://redirect.github.com/pydantic/pydantic/compare/v2.9.1...v2.9.2)

[GitHub
release](https://redirect.github.com/pydantic/pydantic/releases/tag/v2.9.2)

##### What's Changed

##### Fixes

- Do not error when trying to evaluate annotations of private attributes
by [@&#8203;Viicos](https://redirect.github.com/Viicos) in
[#&#8203;10358](https://redirect.github.com/pydantic/pydantic/pull/10358)
- Adding notes on designing sound `Callable` discriminators by
[@&#8203;sydney-runkle](https://redirect.github.com/sydney-runkle) in
[#&#8203;10400](https://redirect.github.com/pydantic/pydantic/pull/10400)
- Fix serialization schema generation when using `PlainValidator` by
[@&#8203;Viicos](https://redirect.github.com/Viicos) in
[#&#8203;10427](https://redirect.github.com/pydantic/pydantic/pull/10427)
- Fix `Union` serialization warnings by
[@&#8203;sydney-runkle](https://redirect.github.com/sydney-runkle) in
[pydantic/pydantic-core#1449](https://redirect.github.com/pydantic/pydantic-core/pull/1449)
- Fix variance issue in `_IncEx` type alias, only allow `True` by
[@&#8203;Viicos](https://redirect.github.com/Viicos) in
[#&#8203;10414](https://redirect.github.com/pydantic/pydantic/pull/10414)
- Fix `ZoneInfo` validation with various invalid types by
[@&#8203;sydney-runkle](https://redirect.github.com/sydney-runkle) in
[#&#8203;10408](https://redirect.github.com/pydantic/pydantic/pull/10408)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/spiraldb/ziggy-pydust).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC44MC4wIiwidXBkYXRlZEluVmVyIjoiMzguODAuMCIsInRhcmdldEJyYW5jaCI6ImRldmVsb3AiLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
chouinar pushed a commit to HHS/simpler-grants-gov that referenced this pull request Sep 19, 2024
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [SQLAlchemy](https://www.sqlalchemy.org)
([changelog](https://docs.sqlalchemy.org/en/latest/changelog/)) |
`2.0.34` -> `2.0.35` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/SQLAlchemy/2.0.35?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/SQLAlchemy/2.0.35?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/SQLAlchemy/2.0.34/2.0.35?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/SQLAlchemy/2.0.34/2.0.35?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [boto3](https://redirect.github.com/boto/boto3) | `1.35.14` ->
`1.35.22` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/boto3/1.35.22?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/boto3/1.35.22?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/boto3/1.35.14/1.35.22?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/boto3/1.35.14/1.35.22?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [botocore](https://redirect.github.com/boto/botocore) | `1.35.14` ->
`1.35.22` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/botocore/1.35.22?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/botocore/1.35.22?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/botocore/1.35.14/1.35.22?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/botocore/1.35.14/1.35.22?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[marshmallow-dataclass](https://redirect.github.com/lovasoa/marshmallow_dataclass)
| `8.7.0` -> `8.7.1` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/marshmallow-dataclass/8.7.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/marshmallow-dataclass/8.7.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/marshmallow-dataclass/8.7.0/8.7.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/marshmallow-dataclass/8.7.0/8.7.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [psycopg](https://psycopg.org/psycopg3/)
([source](https://redirect.github.com/psycopg/psycopg),
[changelog](https://psycopg.org/psycopg3/docs/news.html)) | `3.2.1` ->
`3.2.2` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/psycopg/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/psycopg/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/psycopg/3.2.1/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/psycopg/3.2.1/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [pydantic](https://redirect.github.com/pydantic/pydantic)
([changelog](https://docs.pydantic.dev/latest/changelog/)) | `2.9.1` ->
`2.9.2` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pydantic/2.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pydantic/2.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pydantic/2.9.1/2.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pydantic/2.9.1/2.9.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[pydantic-settings](https://redirect.github.com/pydantic/pydantic-settings)
([changelog](https://redirect.github.com/pydantic/pydantic-settings/releases))
| `2.4.0` -> `2.5.2` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/pydantic-settings/2.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/pydantic-settings/2.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/pydantic-settings/2.4.0/2.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pydantic-settings/2.4.0/2.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [ruff](https://docs.astral.sh/ruff)
([source](https://redirect.github.com/astral-sh/ruff),
[changelog](https://redirect.github.com/astral-sh/ruff/blob/main/CHANGELOG.md))
| `^0.4.0` -> `^0.6.0` |
[![age](https://developer.mend.io/api/mc/badges/age/pypi/ruff/0.6.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/ruff/0.6.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/ruff/0.4.10/0.6.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ruff/0.4.10/0.6.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>boto/boto3 (boto3)</summary>

###
[`v1.35.22`](https://redirect.github.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13522)

[Compare
Source](https://redirect.github.com/boto/boto3/compare/1.35.21...1.35.22)

\=======

- api-change:`ce`: \[`botocore`] This release extends the
GetReservationPurchaseRecommendation API to support recommendations for
Amazon DynamoDB reservations.
- api-change:`ds`: \[`botocore`] Added new APIs for enabling, disabling,
and describing access to the AWS Directory Service Data API
- api-change:`ds-data`: \[`botocore`] Added new AWS Directory Service
Data API, enabling you to manage data stored in AWS Directory Service
directories. This includes APIs for creating, reading, updating, and
deleting directory users, groups, and group memberships.
- api-change:`guardduty`: \[`botocore`] Add `launchType` and `sourceIPs`
fields to GuardDuty findings.
- api-change:`mailmanager`: \[`botocore`] Introduce a new RuleSet
condition evaluation, where customers can set up a StringExpression with
a MimeHeader condition. This condition will perform the necessary
validation based on the X-header provided by customers.
- api-change:`rds`: \[`botocore`] Updates Amazon RDS documentation with
information upgrading snapshots with unsupported engine versions for RDS
for MySQL and RDS for PostgreSQL.
- api-change:`s3`: \[`botocore`] Added SSE-KMS support for directory
buckets.

###
[`v1.35.21`](https://redirect.github.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13521)

[Compare
Source](https://redirect.github.com/boto/boto3/compare/1.35.20...1.35.21)

\=======

- api-change:`codebuild`: \[`botocore`] GitLab Enhancements - Add
support for Self-Hosted GitLab runners in CodeBuild. Add group webhooks
- api-change:`ecr`: \[`botocore`] The `DescribeImageScanning` API now
includes `fixAvailable`, `exploitAvailable`, and `fixedInVersion` fields
to provide more detailed information about the availability of fixes,
exploits, and fixed versions for identified image vulnerabilities.
- api-change:`ecs`: \[`botocore`] This is a documentation only release
to address various tickets.
- api-change:`lambda`: \[`botocore`] Support for JSON resource-based
policies and block public access
- api-change:`rds`: \[`botocore`] Updates Amazon RDS documentation with
configuration information about the BYOL model for RDS for Db2.
- api-change:`ssm`: \[`botocore`] Support for additional levels of
cross-account, cross-Region organizational units in Automation. Various
documentation updates.

###
[`v1.35.20`](https://redirect.github.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13520)

[Compare
Source](https://redirect.github.com/boto/boto3/compare/1.35.19...1.35.20)

\=======

- api-change:`bedrock`: \[`botocore`] This feature adds cross account s3
bucket and VPC support to ModelInvocation jobs. To use a cross account
bucket, pass in the accountId of the bucket to s3BucketOwner in the
ModelInvocationJobInputDataConfig or ModelInvocationJobOutputDataConfig.
- api-change:`iot`: \[`botocore`] This release adds additional
enhancements to AWS IoT Device Management Software Package Catalog and
Jobs. It also adds SBOM support in Software Package Version.
- api-change:`medialive`: \[`botocore`] Removing the ON_PREMISE enum
from the input settings field.
- api-change:`organizations`: \[`botocore`] Doc only update for AWS
Organizations that fixes several customer-reported issues
- api-change:`pca-connector-scep`: \[`botocore`] This is a general
availability (GA) release of Connector for SCEP, a feature of AWS
Private CA. Connector for SCEP links your SCEP-enabled and mobile device
management systems to AWS Private CA for digital signature installation
and certificate management.
-   api-change:`rds`: \[`botocore`] Launching Global Cluster tagging.

###
[`v1.35.19`](https://redirect.github.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13519)

[Compare
Source](https://redirect.github.com/boto/boto3/compare/1.35.18...1.35.19)

\=======

- api-change:`amplify`: \[`botocore`] Doc only update to Amplify to
explain platform setting for Next.js 14 SSG only applications
-   api-change:`ivs`: \[`botocore`] Updates to all tags descriptions.
- api-change:`ivschat`: \[`botocore`] Updates to all tags descriptions.

###
[`v1.35.18`](https://redirect.github.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13518)

[Compare
Source](https://redirect.github.com/boto/boto3/compare/1.35.17...1.35.18)

\=======

- api-change:`cognito-idp`: \[`botocore`] Added email MFA option to user
pools with advanced security features.
- api-change:`elbv2`: \[`botocore`] Correct incorrectly mapped error in
ELBv2 waiters
- api-change:`emr`: \[`botocore`] Update APIs to allow modification of
ODCR options, allocation strategy, and InstanceTypeConfigs on running
InstanceFleet clusters.
- api-change:`glue`: \[`botocore`] AWS Glue is introducing two new
optimizers for Apache Iceberg tables: snapshot retention and orphan file
deletion. Customers can enable these optimizers and customize their
configurations to perform daily maintenance tasks on their Iceberg
tables based on their specific requirements.
- api-change:`mediaconvert`: \[`botocore`] This release includes support
for dynamic video overlay workflows, including picture-in-picture and
squeezeback
- api-change:`rds`: \[`botocore`] This release adds support for the
os-upgrade pending maintenance action for Amazon Aurora DB clusters.
- api-change:`storagegateway`: \[`botocore`] The S3 File Gateway now
supports DSSE-KMS encryption. A new parameter EncryptionType is added to
these APIs: CreateSmbFileShare, CreateNfsFileShare, UpdateSmbFileShare,
UpdateNfsFileShare, DescribeSmbFileShares, DescribeNfsFileShares. Also,
in favor of EncryptionType, KmsEncrypted is deprecated.
- api-change:`synthetics`: \[`botocore`] This release introduces two
features. The first is tag replication, which allows for the propagation
of canary tags onto Synthetics related resources, such as Lambda
functions. The second is a limit increase in canary name length, which
has now been increased from 21 to 255 characters.

###
[`v1.35.17`](https://redirect.github.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13517)

[Compare
Source](https://redirect.github.com/boto/boto3/compare/1.35.16...1.35.17)

\=======

- api-change:`bedrock-agent`: \[`botocore`] Amazon Bedrock Knowledge
Bases now supports using inference profiles to increase throughput and
improve resilience.
- api-change:`bedrock-agent-runtime`: \[`botocore`] Amazon Bedrock
Knowledge Bases now supports using inference profiles to increase
throughput and improve resilience.
-   api-change:`ecr`: \[`botocore`] Added KMS_DSSE to EncryptionType
- api-change:`guardduty`: \[`botocore`] Add support for new statistic
types in GetFindingsStatistics.
- api-change:`lexv2-models`: \[`botocore`] Support new Polly voice
engines in VoiceSettings: long-form and generative
- api-change:`medialive`: \[`botocore`] Adds AV1 Codec support, SRT
ouputs, and MediaLive Anywhere support.

###
[`v1.35.16`](https://redirect.github.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13516)

[Compare
Source](https://redirect.github.com/boto/boto3/compare/1.35.15...1.35.16)

\=======

- api-change:`chime-sdk-voice`: \[`botocore`] Documentation-only update
that clarifies the ValidateE911Address action of the Amazon Chime SDK
Voice APIs.
- api-change:`cognito-identity`: \[`botocore`] This release adds
sensitive trait to some required shapes.
- api-change:`pipes`: \[`botocore`] This release adds support for
customer managed KMS keys in Amazon EventBridge Pipe
- api-change:`securityhub`: \[`botocore`] Documentation update for
Security Hub
-   enhancement:AWSCRT: \[`botocore`] Update awscrt version to 0.21.5
- enhancement:`s3`: \[`botocore`] Adds logic to gracefully handle
invalid timestamps returned in the Expires header.

###
[`v1.35.15`](https://redirect.github.com/boto/boto3/blob/HEAD/CHANGELOG.rst#13515)

[Compare
Source](https://redirect.github.com/boto/boto3/compare/1.35.14...1.35.15)

\=======

- api-change:`dynamodb`: \[`botocore`] Doc-only update for DynamoDB.
Added information about async behavior for TagResource and UntagResource
APIs and updated the description of ResourceInUseException.
- api-change:`elbv2`: \[`botocore`] Add paginators for the ELBv2
DescribeListenerCertificates and DescribeRules APIs. Fix broken waiter
for the ELBv2 DescribeLoadBalancers API.
- api-change:`ivs-realtime`: \[`botocore`] IVS Real-Time now offers
customers the ability to broadcast to Stages using RTMP(S).
- api-change:`kafka`: \[`botocore`] Amazon MSK Replicator can now
replicate data to identically named topics between MSK clusters within
the same AWS Region or across different AWS Regions.
- api-change:`sagemaker`: \[`botocore`] Amazon Sagemaker supports
orchestrating SageMaker HyperPod clusters with Amazon EKS
- api-change:`sagemaker-runtime`: \[`botocore`] AWS SageMaker Runtime
feature: Add sticky routing to support stateful inference models.

</details>

<details>
<summary>boto/botocore (botocore)</summary>

###
[`v1.35.22`](https://redirect.github.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13522)

[Compare
Source](https://redirect.github.com/boto/botocore/compare/1.35.21...1.35.22)

\=======

- api-change:`ce`: This release extends the
GetReservationPurchaseRecommendation API to support recommendations for
Amazon DynamoDB reservations.
- api-change:`ds`: Added new APIs for enabling, disabling, and
describing access to the AWS Directory Service Data API
- api-change:`ds-data`: Added new AWS Directory Service Data API,
enabling you to manage data stored in AWS Directory Service directories.
This includes APIs for creating, reading, updating, and deleting
directory users, groups, and group memberships.
- api-change:`guardduty`: Add `launchType` and `sourceIPs` fields to
GuardDuty findings.
- api-change:`mailmanager`: Introduce a new RuleSet condition
evaluation, where customers can set up a StringExpression with a
MimeHeader condition. This condition will perform the necessary
validation based on the X-header provided by customers.
- api-change:`rds`: Updates Amazon RDS documentation with information
upgrading snapshots with unsupported engine versions for RDS for MySQL
and RDS for PostgreSQL.
-   api-change:`s3`: Added SSE-KMS support for directory buckets.

###
[`v1.35.21`](https://redirect.github.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13521)

[Compare
Source](https://redirect.github.com/boto/botocore/compare/1.35.20...1.35.21)

\=======

- api-change:`codebuild`: GitLab Enhancements - Add support for
Self-Hosted GitLab runners in CodeBuild. Add group webhooks
- api-change:`ecr`: The `DescribeImageScanning` API now includes
`fixAvailable`, `exploitAvailable`, and `fixedInVersion` fields to
provide more detailed information about the availability of fixes,
exploits, and fixed versions for identified image vulnerabilities.
- api-change:`ecs`: This is a documentation only release to address
various tickets.
- api-change:`lambda`: Support for JSON resource-based policies and
block public access
- api-change:`rds`: Updates Amazon RDS documentation with configuration
information about the BYOL model for RDS for Db2.
- api-change:`ssm`: Support for additional levels of cross-account,
cross-Region organizational units in Automation. Various documentation
updates.

###
[`v1.35.20`](https://redirect.github.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13520)

[Compare
Source](https://redirect.github.com/boto/botocore/compare/1.35.19...1.35.20)

\=======

- api-change:`bedrock`: This feature adds cross account s3 bucket and
VPC support to ModelInvocation jobs. To use a cross account bucket, pass
in the accountId of the bucket to s3BucketOwner in the
ModelInvocationJobInputDataConfig or ModelInvocationJobOutputDataConfig.
- api-change:`iot`: This release adds additional enhancements to AWS IoT
Device Management Software Package Catalog and Jobs. It also adds SBOM
support in Software Package Version.
- api-change:`medialive`: Removing the ON_PREMISE enum from the input
settings field.
- api-change:`organizations`: Doc only update for AWS Organizations that
fixes several customer-reported issues
- api-change:`pca-connector-scep`: This is a general availability (GA)
release of Connector for SCEP, a feature of AWS Private CA. Connector
for SCEP links your SCEP-enabled and mobile device management systems to
AWS Private CA for digital signature installation and certificate
management.
-   api-change:`rds`: Launching Global Cluster tagging.

###
[`v1.35.19`](https://redirect.github.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13519)

[Compare
Source](https://redirect.github.com/boto/botocore/compare/1.35.18...1.35.19)

\=======

- api-change:`amplify`: Doc only update to Amplify to explain platform
setting for Next.js 14 SSG only applications
-   api-change:`ivs`: Updates to all tags descriptions.
-   api-change:`ivschat`: Updates to all tags descriptions.

###
[`v1.35.18`](https://redirect.github.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13518)

[Compare
Source](https://redirect.github.com/boto/botocore/compare/1.35.17...1.35.18)

\=======

- api-change:`cognito-idp`: Added email MFA option to user pools with
advanced security features.
- api-change:`elbv2`: Correct incorrectly mapped error in ELBv2 waiters
- api-change:`emr`: Update APIs to allow modification of ODCR options,
allocation strategy, and InstanceTypeConfigs on running InstanceFleet
clusters.
- api-change:`glue`: AWS Glue is introducing two new optimizers for
Apache Iceberg tables: snapshot retention and orphan file deletion.
Customers can enable these optimizers and customize their configurations
to perform daily maintenance tasks on their Iceberg tables based on
their specific requirements.
- api-change:`mediaconvert`: This release includes support for dynamic
video overlay workflows, including picture-in-picture and squeezeback
- api-change:`rds`: This release adds support for the os-upgrade pending
maintenance action for Amazon Aurora DB clusters.
- api-change:`storagegateway`: The S3 File Gateway now supports DSSE-KMS
encryption. A new parameter EncryptionType is added to these APIs:
CreateSmbFileShare, CreateNfsFileShare, UpdateSmbFileShare,
UpdateNfsFileShare, DescribeSmbFileShares, DescribeNfsFileShares. Also,
in favor of EncryptionType, KmsEncrypted is deprecated.
- api-change:`synthetics`: This release introduces two features. The
first is tag replication, which allows for the propagation of canary
tags onto Synthetics related resources, such as Lambda functions. The
second is a limit increase in canary name length, which has now been
increased from 21 to 255 characters.

###
[`v1.35.17`](https://redirect.github.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13517)

[Compare
Source](https://redirect.github.com/boto/botocore/compare/1.35.16...1.35.17)

\=======

- api-change:`bedrock-agent`: Amazon Bedrock Knowledge Bases now
supports using inference profiles to increase throughput and improve
resilience.
- api-change:`bedrock-agent-runtime`: Amazon Bedrock Knowledge Bases now
supports using inference profiles to increase throughput and improve
resilience.
-   api-change:`ecr`: Added KMS_DSSE to EncryptionType
- api-change:`guardduty`: Add support for new statistic types in
GetFindingsStatistics.
- api-change:`lexv2-models`: Support new Polly voice engines in
VoiceSettings: long-form and generative
- api-change:`medialive`: Adds AV1 Codec support, SRT ouputs, and
MediaLive Anywhere support.

###
[`v1.35.16`](https://redirect.github.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13516)

[Compare
Source](https://redirect.github.com/boto/botocore/compare/1.35.15...1.35.16)

\=======

- api-change:`chime-sdk-voice`: Documentation-only update that clarifies
the ValidateE911Address action of the Amazon Chime SDK Voice APIs.
- api-change:`cognito-identity`: This release adds sensitive trait to
some required shapes.
- api-change:`pipes`: This release adds support for customer managed KMS
keys in Amazon EventBridge Pipe
-   api-change:`securityhub`: Documentation update for Security Hub
-   enhancement:AWSCRT: Update awscrt version to 0.21.5
- enhancement:`s3`: Adds logic to gracefully handle invalid timestamps
returned in the Expires header.

###
[`v1.35.15`](https://redirect.github.com/boto/botocore/blob/HEAD/CHANGELOG.rst#13515)

[Compare
Source](https://redirect.github.com/boto/botocore/compare/1.35.14...1.35.15)

\=======

- api-change:`dynamodb`: Doc-only update for DynamoDB. Added information
about async behavior for TagResource and UntagResource APIs and updated
the description of ResourceInUseException.
- api-change:`elbv2`: Add paginators for the ELBv2
DescribeListenerCertificates and DescribeRules APIs. Fix broken waiter
for the ELBv2 DescribeLoadBalancers API.
- api-change:`ivs-realtime`: IVS Real-Time now offers customers the
ability to broadcast to Stages using RTMP(S).
- api-change:`kafka`: Amazon MSK Replicator can now replicate data to
identically named topics between MSK clusters within the same AWS Region
or across different AWS Regions.
- api-change:`sagemaker`: Amazon Sagemaker supports orchestrating
SageMaker HyperPod clusters with Amazon EKS
- api-change:`sagemaker-runtime`: AWS SageMaker Runtime feature: Add
sticky routing to support stateful inference models.

</details>

<details>
<summary>lovasoa/marshmallow_dataclass (marshmallow-dataclass)</summary>

###
[`v8.7.1`](https://redirect.github.com/lovasoa/marshmallow_dataclass/blob/HEAD/CHANGELOG.md#v871-2024-09-12)

[Compare
Source](https://redirect.github.com/lovasoa/marshmallow_dataclass/compare/v8.7.0...v8.7.1)

- Relax dependency pins for `typeguard` and `typing-inspect`.
([#&#8203;273], [#&#8203;272])

[#&#8203;272]:
https://redirect.github.com/lovasoa/marshmallow_dataclass/issues/272

[#&#8203;273]:
https://redirect.github.com/lovasoa/marshmallow_dataclass/pull/273

</details>

<details>
<summary>psycopg/psycopg (psycopg)</summary>

###
[`v3.2.2`](https://redirect.github.com/psycopg/psycopg/compare/3.2.1...3.2.2)

[Compare
Source](https://redirect.github.com/psycopg/psycopg/compare/3.2.1...3.2.2)

</details>

<details>
<summary>pydantic/pydantic (pydantic)</summary>

###
[`v2.9.2`](https://redirect.github.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v292-2024-09-17)

[Compare
Source](https://redirect.github.com/pydantic/pydantic/compare/v2.9.1...v2.9.2)

[GitHub
release](https://redirect.github.com/pydantic/pydantic/releases/tag/v2.9.2)

##### What's Changed

##### Fixes

- Do not error when trying to evaluate annotations of private attributes
by [@&#8203;Viicos](https://redirect.github.com/Viicos) in
[#&#8203;10358](https://redirect.github.com/pydantic/pydantic/pull/10358)
- Adding notes on designing sound `Callable` discriminators by
[@&#8203;sydney-runkle](https://redirect.github.com/sydney-runkle) in
[#&#8203;10400](https://redirect.github.com/pydantic/pydantic/pull/10400)
- Fix serialization schema generation when using `PlainValidator` by
[@&#8203;Viicos](https://redirect.github.com/Viicos) in
[#&#8203;10427](https://redirect.github.com/pydantic/pydantic/pull/10427)
- Fix `Union` serialization warnings by
[@&#8203;sydney-runkle](https://redirect.github.com/sydney-runkle) in
[pydantic/pydantic-core#1449](https://redirect.github.com/pydantic/pydantic-core/pull/1449)
- Fix variance issue in `_IncEx` type alias, only allow `True` by
[@&#8203;Viicos](https://redirect.github.com/Viicos) in
[#&#8203;10414](https://redirect.github.com/pydantic/pydantic/pull/10414)
- Fix `ZoneInfo` validation with various invalid types by
[@&#8203;sydney-runkle](https://redirect.github.com/sydney-runkle) in
[#&#8203;10408](https://redirect.github.com/pydantic/pydantic/pull/10408)

</details>

<details>
<summary>pydantic/pydantic-settings (pydantic-settings)</summary>

###
[`v2.5.2`](https://redirect.github.com/pydantic/pydantic-settings/releases/tag/v2.5.2)

[Compare
Source](https://redirect.github.com/pydantic/pydantic-settings/compare/v2.5.1...v2.5.2)

#### What's Changed

- Second fix for the TypeError bug introduced in 2.5 by
[@&#8203;hramezani](https://redirect.github.com/hramezani) in
[https://github.com/pydantic/pydantic-settings/pull/396](https://redirect.github.com/pydantic/pydantic-settings/pull/396)

**Full Changelog**:
https://github.com/pydantic/pydantic-settings/compare/v2.5.1...v2.5.2

###
[`v2.5.1`](https://redirect.github.com/pydantic/pydantic-settings/releases/tag/v2.5.1)

[Compare
Source](https://redirect.github.com/pydantic/pydantic-settings/compare/v2.5.0...v2.5.1)

#### What's Changed

- Fix TypeError introduced in 2.5 by
[@&#8203;hramezani](https://redirect.github.com/hramezani) in
[https://github.com/pydantic/pydantic-settings/pull/392](https://redirect.github.com/pydantic/pydantic-settings/pull/392)

**Full Changelog**:
https://github.com/pydantic/pydantic-settings/compare/v2.5.0...v2.5.1

###
[`v2.5.0`](https://redirect.github.com/pydantic/pydantic-settings/releases/tag/v2.5.0)

[Compare
Source](https://redirect.github.com/pydantic/pydantic-settings/compare/v2.4.0...v2.5.0)

#### What's Changed

- Fix a bug in nested vanila dataclass by
[@&#8203;hramezani](https://redirect.github.com/hramezani) in
[https://github.com/pydantic/pydantic-settings/pull/357](https://redirect.github.com/pydantic/pydantic-settings/pull/357)
- CLI Improve Docstring Help Text by
[@&#8203;kschwab](https://redirect.github.com/kschwab) in
[https://github.com/pydantic/pydantic-settings/pull/359](https://redirect.github.com/pydantic/pydantic-settings/pull/359)
- Cli fix default or none object help text by
[@&#8203;kschwab](https://redirect.github.com/kschwab) in
[https://github.com/pydantic/pydantic-settings/pull/364](https://redirect.github.com/pydantic/pydantic-settings/pull/364)
- Determine RootModel complexity from root type by
[@&#8203;user1584](https://redirect.github.com/user1584) in
[https://github.com/pydantic/pydantic-settings/pull/344](https://redirect.github.com/pydantic/pydantic-settings/pull/344)
- Add CLI bool flags by
[@&#8203;kschwab](https://redirect.github.com/kschwab) in
[https://github.com/pydantic/pydantic-settings/pull/365](https://redirect.github.com/pydantic/pydantic-settings/pull/365)
- CLI arg list whitespaces fix. by
[@&#8203;kschwab](https://redirect.github.com/kschwab) in
[https://github.com/pydantic/pydantic-settings/pull/369](https://redirect.github.com/pydantic/pydantic-settings/pull/369)
- Add `nested_model_default_partial_update` flag and
`DefaultSettingsSource` by
[@&#8203;kschwab](https://redirect.github.com/kschwab) in
[https://github.com/pydantic/pydantic-settings/pull/348](https://redirect.github.com/pydantic/pydantic-settings/pull/348)
- Parse enum fixes. by
[@&#8203;kschwab](https://redirect.github.com/kschwab) in
[https://github.com/pydantic/pydantic-settings/pull/367](https://redirect.github.com/pydantic/pydantic-settings/pull/367)
- Fixes CLI help text for function types by
[@&#8203;kschwab](https://redirect.github.com/kschwab) in
[https://github.com/pydantic/pydantic-settings/pull/370](https://redirect.github.com/pydantic/pydantic-settings/pull/370)
- Add get_subcommand function. by
[@&#8203;kschwab](https://redirect.github.com/kschwab) in
[https://github.com/pydantic/pydantic-settings/pull/341](https://redirect.github.com/pydantic/pydantic-settings/pull/341)
- Cli prefix validation alias fix by
[@&#8203;kschwab](https://redirect.github.com/kschwab) in
[https://github.com/pydantic/pydantic-settings/pull/375](https://redirect.github.com/pydantic/pydantic-settings/pull/375)
- CLI ignore external parser list fix by
[@&#8203;kschwab](https://redirect.github.com/kschwab) in
[https://github.com/pydantic/pydantic-settings/pull/379](https://redirect.github.com/pydantic/pydantic-settings/pull/379)
- Enable multiple secrets dirs by
[@&#8203;makukha](https://redirect.github.com/makukha) in
[https://github.com/pydantic/pydantic-settings/pull/372](https://redirect.github.com/pydantic/pydantic-settings/pull/372)
- Add CLI subcommand union and alias support by
[@&#8203;kschwab](https://redirect.github.com/kschwab) in
[https://github.com/pydantic/pydantic-settings/pull/380](https://redirect.github.com/pydantic/pydantic-settings/pull/380)
- Fix dotenv settings source problem in handling extra variables with
same prefix in name by
[@&#8203;hramezani](https://redirect.github.com/hramezani) in
[https://github.com/pydantic/pydantic-settings/pull/386](https://redirect.github.com/pydantic/pydantic-settings/pull/386)

#### New Contributors

- [@&#8203;user1584](https://redirect.github.com/user1584) made their
first contribution in
[https://github.com/pydantic/pydantic-settings/pull/344](https://redirect.github.com/pydantic/pydantic-settings/pull/344)
- [@&#8203;makukha](https://redirect.github.com/makukha) made their
first contribution in
[https://github.com/pydantic/pydantic-settings/pull/372](https://redirect.github.com/pydantic/pydantic-settings/pull/372)

**Full Changelog**:
https://github.com/pydantic/pydantic-settings/compare/v2.4.0...v2.5.0

</details>

<details>
<summary>astral-sh/ruff (ruff)</summary>

###
[`v0.6.5`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#065)

[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.6.4...0.6.5)

##### Preview features

- \[`pydoclint`] Ignore `DOC201` when function name is "**new**"
([#&#8203;13300](https://redirect.github.com/astral-sh/ruff/pull/13300))
- \[`refurb`] Implement `slice-to-remove-prefix-or-suffix` (`FURB188`)
([#&#8203;13256](https://redirect.github.com/astral-sh/ruff/pull/13256))

##### Rule changes

- \[`eradicate`] Ignore script-comments with multiple end-tags
(`ERA001`)
([#&#8203;13283](https://redirect.github.com/astral-sh/ruff/pull/13283))
- \[`pyflakes`] Improve error message for `UndefinedName` when a builtin
was added in a newer version than specified in Ruff config (`F821`)
([#&#8203;13293](https://redirect.github.com/astral-sh/ruff/pull/13293))

##### Server

- Add support for extensionless Python files for server
([#&#8203;13326](https://redirect.github.com/astral-sh/ruff/pull/13326))
- Fix configuration inheritance for configurations specified in the LSP
settings
([#&#8203;13285](https://redirect.github.com/astral-sh/ruff/pull/13285))

##### Bug fixes

- \[`ruff`] Handle unary operators in `decimal-from-float-literal`
(`RUF032`)
([#&#8203;13275](https://redirect.github.com/astral-sh/ruff/pull/13275))

##### CLI

- Only include rules with diagnostics in SARIF metadata
([#&#8203;13268](https://redirect.github.com/astral-sh/ruff/pull/13268))

##### Playground

- Add "Copy as pyproject.toml/ruff.toml" and "Paste from TOML"
([#&#8203;13328](https://redirect.github.com/astral-sh/ruff/pull/13328))
- Fix errors not shown for restored snippet on page load
([#&#8203;13262](https://redirect.github.com/astral-sh/ruff/pull/13262))

###
[`v0.6.4`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#064)

[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.6.3...0.6.4)

##### Preview features

- \[`flake8-builtins`] Use dynamic builtins list based on Python version
([#&#8203;13172](https://redirect.github.com/astral-sh/ruff/pull/13172))
- \[`pydoclint`] Permit yielding `None` in `DOC402` and `DOC403`
([#&#8203;13148](https://redirect.github.com/astral-sh/ruff/pull/13148))
- \[`pylint`] Update diagnostic message for `PLW3201`
([#&#8203;13194](https://redirect.github.com/astral-sh/ruff/pull/13194))
- \[`ruff`] Implement `post-init-default` (`RUF033`)
([#&#8203;13192](https://redirect.github.com/astral-sh/ruff/pull/13192))
- \[`ruff`] Implement useless if-else (`RUF034`)
([#&#8203;13218](https://redirect.github.com/astral-sh/ruff/pull/13218))

##### Rule changes

- \[`flake8-pyi`] Respect `pep8_naming.classmethod-decorators` settings
when determining if a method is a classmethod in
`custom-type-var-return-type` (`PYI019`)
([#&#8203;13162](https://redirect.github.com/astral-sh/ruff/pull/13162))
- \[`flake8-pyi`] Teach various rules that annotations might be
stringized
([#&#8203;12951](https://redirect.github.com/astral-sh/ruff/pull/12951))
- \[`pylint`] Avoid `no-self-use` for `attrs`-style validators
([#&#8203;13166](https://redirect.github.com/astral-sh/ruff/pull/13166))
- \[`pylint`] Recurse into subscript subexpressions when searching for
list/dict lookups (`PLR1733`, `PLR1736`)
([#&#8203;13186](https://redirect.github.com/astral-sh/ruff/pull/13186))
- \[`pyupgrade`] Detect `aiofiles.open` calls in `UP015`
([#&#8203;13173](https://redirect.github.com/astral-sh/ruff/pull/13173))
- \[`pyupgrade`] Mark `sys.version_info[0] < 3` and similar comparisons
as outdated (`UP036`)
([#&#8203;13175](https://redirect.github.com/astral-sh/ruff/pull/13175))

##### CLI

- Enrich messages of SARIF results
([#&#8203;13180](https://redirect.github.com/astral-sh/ruff/pull/13180))
- Handle singular case for incompatible rules warning in `ruff format`
output
([#&#8203;13212](https://redirect.github.com/astral-sh/ruff/pull/13212))

##### Bug fixes

- \[`pydocstyle`] Improve heuristics for detecting Google-style
docstrings
([#&#8203;13142](https://redirect.github.com/astral-sh/ruff/pull/13142))
- \[`refurb`] Treat `sep` arguments with effects as unsafe removals
(`FURB105`)
([#&#8203;13165](https://redirect.github.com/astral-sh/ruff/pull/13165))

###
[`v0.6.3`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#063)

[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.6.2...0.6.3)

##### Preview features

- \[`flake8-simplify`] Extend `open-file-with-context-handler` to work
with `dbm.sqlite3` (`SIM115`)
([#&#8203;13104](https://redirect.github.com/astral-sh/ruff/pull/13104))
- \[`pycodestyle`] Disable `E741` in stub files (`.pyi`)
([#&#8203;13119](https://redirect.github.com/astral-sh/ruff/pull/13119))
- \[`pydoclint`] Avoid `DOC201` on explicit returns in functions that
only return `None`
([#&#8203;13064](https://redirect.github.com/astral-sh/ruff/pull/13064))

##### Rule changes

- \[`flake8-async`] Disable check for `asyncio` before Python 3.11
(`ASYNC109`)
([#&#8203;13023](https://redirect.github.com/astral-sh/ruff/pull/13023))

##### Bug fixes

- \[`FastAPI`] Avoid introducing invalid syntax in fix for
`fast-api-non-annotated-dependency` (`FAST002`)
([#&#8203;13133](https://redirect.github.com/astral-sh/ruff/pull/13133))
- \[`flake8-implicit-str-concat`] Normalize octals before merging
concatenated strings in `single-line-implicit-string-concatenation`
(`ISC001`)
([#&#8203;13118](https://redirect.github.com/astral-sh/ruff/pull/13118))
- \[`flake8-pytest-style`] Improve help message for
`pytest-incorrect-mark-parentheses-style` (`PT023`)
([#&#8203;13092](https://redirect.github.com/astral-sh/ruff/pull/13092))
- \[`pylint`] Avoid autofix for calls that aren't `min` or `max` as
starred expression (`PLW3301`)
([#&#8203;13089](https://redirect.github.com/astral-sh/ruff/pull/13089))
- \[`ruff`] Add `datetime.time`, `datetime.tzinfo`, and
`datetime.timezone` as immutable function calls (`RUF009`)
([#&#8203;13109](https://redirect.github.com/astral-sh/ruff/pull/13109))
- \[`ruff`] Extend comment deletion for `RUF100` to include trailing
text from `noqa` directives while preserving any following comments on
the same line, if any
([#&#8203;13105](https://redirect.github.com/astral-sh/ruff/pull/13105))
- Fix dark theme on initial page load for the Ruff playground
([#&#8203;13077](https://redirect.github.com/astral-sh/ruff/pull/13077))

###
[`v0.6.2`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#062)

[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.6.1...0.6.2)

##### Preview features

- \[`flake8-simplify`] Extend `open-file-with-context-handler` to work
with other standard-library IO modules (`SIM115`)
([#&#8203;12959](https://redirect.github.com/astral-sh/ruff/pull/12959))
- \[`ruff`] Avoid `unused-async` for functions with FastAPI route
decorator (`RUF029`)
([#&#8203;12938](https://redirect.github.com/astral-sh/ruff/pull/12938))
- \[`ruff`] Ignore `fstring-missing-syntax` (`RUF027`) for `fastAPI`
paths
([#&#8203;12939](https://redirect.github.com/astral-sh/ruff/pull/12939))
- \[`ruff`] Implement check for Decimal called with a float literal
(RUF032)
([#&#8203;12909](https://redirect.github.com/astral-sh/ruff/pull/12909))

##### Rule changes

- \[`flake8-bugbear`] Update diagnostic message when expression is at
the end of function (`B015`)
([#&#8203;12944](https://redirect.github.com/astral-sh/ruff/pull/12944))
- \[`flake8-pyi`] Skip type annotations in `string-or-bytes-too-long`
(`PYI053`)
([#&#8203;13002](https://redirect.github.com/astral-sh/ruff/pull/13002))
- \[`flake8-type-checking`] Always recognise relative imports as
first-party
([#&#8203;12994](https://redirect.github.com/astral-sh/ruff/pull/12994))
- \[`flake8-unused-arguments`] Ignore unused arguments on stub functions
(`ARG001`)
([#&#8203;12966](https://redirect.github.com/astral-sh/ruff/pull/12966))
- \[`pylint`] Ignore augmented assignment for `self-cls-assignment`
(`PLW0642`)
([#&#8203;12957](https://redirect.github.com/astral-sh/ruff/pull/12957))

##### Server

- Show full context in error log messages
([#&#8203;13029](https://redirect.github.com/astral-sh/ruff/pull/13029))

##### Bug fixes

- \[`pep8-naming`] Don't flag `from` imports following conventional
import names (`N817`)
([#&#8203;12946](https://redirect.github.com/astral-sh/ruff/pull/12946))
- \[`pylint`] - Allow `__new__` methods to have `cls` as their first
argument even if decorated with `@staticmethod` for
`bad-staticmethod-argument` (`PLW0211`)
([#&#8203;12958](https://redirect.github.com/astral-sh/ruff/pull/12958))

##### Documentation

- Add `hyperfine` installation instructions; update `hyperfine` code
samples
([#&#8203;13034](https://redirect.github.com/astral-sh/ruff/pull/13034))
- Expand note to use Ruff with other language server in Kate
([#&#8203;12806](https://redirect.github.com/astral-sh/ruff/pull/12806))
- Update example for `PT001` as per the new default behavior
([#&#8203;13019](https://redirect.github.com/astral-sh/ruff/pull/13019))
- \[`perflint`] Improve docs for `try-except-in-loop` (`PERF203`)
([#&#8203;12947](https://redirect.github.com/astral-sh/ruff/pull/12947))
- \[`pydocstyle`] Add reference to `lint.pydocstyle.ignore-decorators`
setting to rule docs
([#&#8203;12996](https://redirect.github.com/astral-sh/ruff/pull/12996))

###
[`v0.6.1`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#061)

[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.6.0...0.6.1)

This is a hotfix release to address an issue with `ruff-pre-commit`. In
v0.6,
Ruff changed its behavior to lint and format Jupyter notebooks by
default;
however, due to an oversight, these files were still excluded by default
if
Ruff was run via pre-commit, leading to inconsistent behavior.
This has [now been
fixed](https://redirect.github.com/astral-sh/ruff-pre-commit/pull/96).

##### Preview features

- \[`fastapi`] Implement `fast-api-unused-path-parameter` (`FAST003`)
([#&#8203;12638](https://redirect.github.com/astral-sh/ruff/pull/12638))

##### Rule changes

- \[`pylint`] Rename `too-many-positional` to
`too-many-positional-arguments` (`R0917`)
([#&#8203;12905](https://redirect.github.com/astral-sh/ruff/pull/12905))

##### Server

- Fix crash when applying "fix-all" code-action to notebook cells
([#&#8203;12929](https://redirect.github.com/astral-sh/ruff/pull/12929))

##### Other changes

- \[`flake8-naming`]: Respect import conventions (`N817`)
([#&#8203;12922](https://redirect.github.com/astral-sh/ruff/pull/12922))

###
[`v0.6.0`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#060)

[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.5.7...0.6.0)

Check out the [blog post](https://astral.sh/blog/ruff-v0.6.0) for a
migration guide and overview of the changes!

##### Breaking changes

See also, the "Remapped rules" section which may result in disabled
rules.

- Lint and format Jupyter Notebook by default
([#&#8203;12878](https://redirect.github.com/astral-sh/ruff/pull/12878)).
- Detect imports in `src` layouts by default for `isort` rules
([#&#8203;12848](https://redirect.github.com/astral-sh/ruff/pull/12848))
- The pytest rules `PT001` and `PT023` now default to omitting the
decorator parentheses when there are no arguments
([#&#8203;12838](https://redirect.github.com/astral-sh/ruff/pull/12838)).

##### Deprecations

The following rules are now deprecated:

-
[`pytest-missing-fixture-name-underscore`](https://docs.astral.sh/ruff/rules/pytest-missing-fixture-name-underscore/)
(`PT004`)
-
[`pytest-incorrect-fixture-name-underscore`](https://docs.astral.sh/ruff/rules/pytest-incorrect-fixture-name-underscore/)
(`PT005`)
-
[`unpacked-list-comprehension`](https://docs.astral.sh/ruff/rules/unpacked-list-comprehension/)
(`UP027`)

##### Remapped rules

The following rules have been remapped to new rule codes:

-
[`unnecessary-dict-comprehension-for-iterable`](https://docs.astral.sh/ruff/rules/unnecessary-dict-comprehension-for-iterable/):
`RUF025` to `C420`

##### Stabilization

The following rules have been stabilized and are no longer in preview:

-
[`singledispatch-method`](https://docs.astral.sh/ruff/rules/singledispatch-method/)
(`PLE1519`)
-
[`singledispatchmethod-function`](https://docs.astral.sh/ruff/rules/singledispatchmethod-function/)
(`PLE1520`)
-
[`bad-staticmethod-argument`](https://docs.astral.sh/ruff/rules/bad-staticmethod-argument/)
(`PLW0211`)
-
[`if-stmt-min-max`](https://docs.astral.sh/ruff/rules/if-stmt-min-max/)
(`PLR1730`)
-
[`invalid-bytes-return-type`](https://docs.astral.sh/ruff/rules/invalid-bytes-return-type/)
(`PLE0308`)
-
[`invalid-hash-return-type`](https://docs.astral.sh/ruff/rules/invalid-hash-return-type/)
(`PLE0309`)
-
[`invalid-index-return-type`](https://docs.astral.sh/ruff/rules/invalid-index-return-type/)
(`PLE0305`)
-
[`invalid-length-return-type`](https://docs.astral.sh/ruff/rules/invalid-length-return-type/)
(`E303`)
-
[`self-or-cls-assignment`](https://docs.astral.sh/ruff/rules/self-or-cls-assignment/)
(`PLW0642`)
-
[`byte-string-usage`](https://docs.astral.sh/ruff/rules/byte-string-usage/)
(`PYI057`)
-
[`duplicate-literal-member`](https://docs.astral.sh/ruff/rules/duplicate-literal-member/)
(`PYI062`)
-
[`redirected-noqa`](https://docs.astral.sh/ruff/rules/redirected-noqa/)
(`RUF101`)

The following behaviors have been stabilized:

-
[`cancel-scope-no-checkpoint`](https://docs.astral.sh/ruff/rules/cancel-scope-no-checkpoint/)
(`ASYNC100`): Support `asyncio` and `anyio` context mangers.
-
[`async-function-with-timeout`](https://docs.astral.sh/ruff/rules/async-function-with-timeout/)
(`ASYNC109`): Support `asyncio` and `anyio` context mangers.
-
[`async-busy-wait`](https://docs.astral.sh/ruff/rules/async-busy-wait/)
(`ASYNC110`): Support `asyncio` and `anyio` context mangers.
-
[`async-zero-sleep`](https://docs.astral.sh/ruff/rules/async-zero-sleep/)
(`ASYNC115`): Support `anyio` context mangers.
-
[`long-sleep-not-forever`](https://docs.astral.sh/ruff/rules/long-sleep-not-forever/)
(`ASYNC116`): Support `anyio` context mangers.

The following fixes have been stabilized:

-
[`superfluous-else-return`](https://docs.astral.sh/ruff/rules/superfluous-else-return/)
(`RET505`)
-
[`superfluous-else-raise`](https://docs.astral.sh/ruff/rules/superfluous-else-raise/)
(`RET506`)
-
[`superfluous-else-continue`](https://docs.astral.sh/ruff/rules/superfluous-else-continue/)
(`RET507`)
-
[`superfluous-else-break`](https://docs.astral.sh/ruff/rules/superfluous-else-break/)
(`RET508`)

##### Preview features

- \[`flake8-simplify`] Further simplify to binary in preview for
(`SIM108`)
([#&#8203;12796](https://redirect.github.com/astral-sh/ruff/pull/12796))
- \[`pyupgrade`] Show violations without auto-fix (`UP031`)
([#&#8203;11229](https://redirect.github.com/astral-sh/ruff/pull/11229))

##### Rule changes

- \[`flake8-import-conventions`] Add `xml.etree.ElementTree` to default
conventions
([#&#8203;12455](https://redirect.github.com/astral-sh/ruff/pull/12455))
- \[`flake8-pytest-style`] Add a space after comma in CSV output
(`PT006`)
([#&#8203;12853](https://redirect.github.com/astral-sh/ruff/pull/12853))

##### Server

- Show a message for incorrect settings
([#&#8203;12781](https://redirect.github.com/astral-sh/ruff/pull/12781))

##### Bug fixes

- \[`flake8-async`] Do not lint yield in context manager (`ASYNC100`)
([#&#8203;12896](https://redirect.github.com/astral-sh/ruff/pull/12896))
- \[`flake8-comprehensions`] Do not lint `async for` comprehensions
(`C419`)
([#&#8203;12895](https://redirect.github.com/astral-sh/ruff/pull/12895))
- \[`flake8-return`] Only add return `None` at end of a function
(`RET503`)
([#&#8203;11074](https://redirect.github.com/astral-sh/ruff/pull/11074))
- \[`flake8-type-checking`] Avoid treating `dataclasses.KW_ONLY` as
typing-only (`TCH003`)
([#&#8203;12863](https://redirect.github.com/astral-sh/ruff/pull/12863))
- \[`pep8-naming`] Treat `type(Protocol)` et al as metaclass base
(`N805`)
([#&#8203;12770](https://redirect.github.com/astral-sh/ruff/pull/12770))
- \[`pydoclint`] Don't enforce returns and yields in abstract methods
(`DOC201`, `DOC202`)
([#&#8203;12771](https://redirect.github.com/astral-sh/ruff/pull/12771))
- \[`ruff`] Skip tuples with slice expressions in (`RUF031`)
([#&#8203;12768](https://redirect.github.com/astral-sh/ruff/pull/12768))
- \[`ruff`] Ignore unparenthesized tuples in subscripts when the
subscript is a type annotation or type alias (`RUF031`)
([#&#8203;12762](https://redirect.github.com/astral-sh/ruff/pull/12762))
- \[`ruff`] Ignore template strings passed to logging and `builtins._()`
calls (`RUF027`)
([#&#8203;12889](https://redirect.github.com/astral-sh/ruff/pull/12889))
- \[`ruff`] Do not remove parens for tuples with starred expressions in
Python <=3.10 (`RUF031`)
([#&#8203;12784](https://redirect.github.com/astral-sh/ruff/pull/12784))
- Evaluate default parameter values for a function in that function's
enclosing scope
([#&#8203;12852](https://redirect.github.com/astral-sh/ruff/pull/12852))

##### Other changes

- Respect VS Code cell metadata when detecting the language of Jupyter
Notebook cells
([#&#8203;12864](https://redirect.github.com/astral-sh/ruff/pull/12864))
- Respect `kernelspec` notebook metadata when detecting the preferred
language for a Jupyter Notebook
([#&#8203;12875](https://redirect.github.com/astral-sh/ruff/pull/12875))

###
[`v0.5.7`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#057)

[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.5.6...0.5.7)

##### Preview features

- \[`flake8-comprehensions`] Account for list and set comprehensions in
`unnecessary-literal-within-tuple-call` (`C409`)
([#&#8203;12657](https://redirect.github.com/astral-sh/ruff/pull/12657))
- \[`flake8-pyi`] Add autofix for `future-annotations-in-stub`
(`PYI044`)
([#&#8203;12676](https://redirect.github.com/astral-sh/ruff/pull/12676))
- \[`flake8-return`] Avoid syntax error when auto-fixing `RET505` with
mixed indentation (space and tabs)
([#&#8203;12740](https://redirect.github.com/astral-sh/ruff/pull/12740))
- \[`pydoclint`] Add `docstring-missing-yields` (`DOC402`) and
`docstring-extraneous-yields` (`DOC403`)
([#&#8203;12538](https://redirect.github.com/astral-sh/ruff/pull/12538))
- \[`pydoclint`] Avoid `DOC201` if docstring begins with "Return",
"Returns", "Yield", or "Yields"
([#&#8203;12675](https://redirect.github.com/astral-sh/ruff/pull/12675))
- \[`pydoclint`] Deduplicate collected exceptions after traversing
function bodies (`DOC501`)
([#&#8203;12642](https://redirect.github.com/astral-sh/ruff/pull/12642))
- \[`pydoclint`] Ignore `DOC` errors for stub functions
([#&#8203;12651](https://redirect.github.com/astral-sh/ruff/pull/12651))
- \[`pydoclint`] Teach rules to understand reraised exceptions as being
explicitly raised (`DOC501`, `DOC502`)
([#&#8203;12639](https://redirect.github.com/astral-sh/ruff/pull/12639))
- \[`ruff`] Implement `incorrectly-parenthesized-tuple-in-subscript`
(`RUF031`)
([#&#8203;12480](https://redirect.github.com/astral-sh/ruff/pull/12480))
- \[`ruff`] Mark `RUF023` fix as unsafe if `__slots__` is not a set and
the binding is used elsewhere
([#&#8203;12692](https://redirect.github.com/astral-sh/ruff/pull/12692))

##### Rule changes

- \[`refurb`] Add autofix for `implicit-cwd` (`FURB177`)
([#&#8203;12708](https://redirect.github.com/astral-sh/ruff/pull/12708))
- \[`ruff`] Add autofix for `zip-instead-of-pairwise` (`RUF007`)
([#&#8203;12663](https://redirect.github.com/astral-sh/ruff/pull/12663))
- \[`tryceratops`] Add `BaseException` to `raise-vanilla-class` rule
(`TRY002`)
([#&#8203;12620](https://redirect.github.com/astral-sh/ruff/pull/12620))

##### Server

- Ignore non-file workspace URL; Ruff will display a warning
notification in this case
([#&#8203;12725](https://redirect.github.com/astral-sh/ruff/pull/12725))

##### CLI

- Fix cache invalidation for nested `pyproject.toml` files
([#&#8203;12727](https://redirect.github.com/astral-sh/ruff/pull/12727))

##### Bug fixes

- \[`flake8-async`] Fix false positives with multiple `async with` items
(`ASYNC100`)
([#&#8203;12643](https://redirect.github.com/astral-sh/ruff/pull/12643))
- \[`flake8-bandit`] Avoid false-positives for list concatenations in
SQL construction (`S608`)
([#&#8203;12720](https://redirect.github.com/astral-sh/ruff/pull/12720))
- \[`flake8-bugbear`] Treat `return` as equivalent to `break` (`B909`)
([#&#8203;12646](https://redirect.github.com/astral-sh/ruff/pull/12646))
- \[`flake8-comprehensions`] Set comprehensions not a violation for
`sum` in `unnecessary-comprehension-in-call` (`C419`)
([#&#8203;12691](https://redirect.github.com/astral-sh/ruff/pull/12691))
- \[`flake8-simplify`] Parenthesize conditions based on precedence when
merging if arms (`SIM114`)
([#&#8203;12737](https://redirect.github.com/astral-sh/ruff/pull/12737))
- \[`pydoclint`] Try both 'Raises' section styles when convention is
unspecified (`DOC501`)
([#&#8203;12649](https://redirect.github.com/astral-sh/ruff/pull/12649))

###
[`v0.5.6`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#056)

[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.5.5...0.5.6)

Ruff 0.5.6 automatically enables linting and formatting of notebooks in
*preview mode*.
You can opt-out of this behavior by adding `*.ipynb` to the
`extend-exclude` setting.

```toml
[tool.ruff]
extend-exclude = ["*.ipynb"]
```

##### Preview features

- Enable notebooks by default in preview mode
([#&#8203;12621](https://redirect.github.com/astral-sh/ruff/pull/12621))
- \[`flake8-builtins`] Implement import, lambda, and module shadowing
([#&#8203;12546](https://redirect.github.com/astral-sh/ruff/pull/12546))
- \[`pydoclint`] Add `docstring-missing-returns` (`DOC201`) and
`docstring-extraneous-returns` (`DOC202`)
([#&#8203;12485](https://redirect.github.com/astral-sh/ruff/pull/12485))

##### Rule changes

- \[`flake8-return`] Exempt cached properties and other property-like
decorators from explicit return rule (`RET501`)
([#&#8203;12563](https://redirect.github.com/astral-sh/ruff/pull/12563))

##### Server

- Make server panic hook more error resilient
([#&#8203;12610](https://redirect.github.com/astral-sh/ruff/pull/12610))
- Use `$/logTrace` for server trace logs in Zed and VS Code
([#&#8203;12564](https://redirect.github.com/astral-sh/ruff/pull/12564))
- Keep track of deleted cells for reorder change request
([#&#8203;12575](https://redirect.github.com/astral-sh/ruff/pull/12575))

##### Configuration

- \[`flake8-implicit-str-concat`] Always allow explicit multi-line
concatenations when implicit concatenations are banned
([#&#8203;12532](https://redirect.github.com/astral-sh/ruff/pull/12532))

##### Bug fixes

- \[`flake8-async`] Avoid flagging `asyncio.timeout`s as unused when the
context manager includes `asyncio.TaskGroup`
([#&#8203;12605](https://redirect.github.com/astral-sh/ruff/pull/12605))
- \[`flake8-slots`] Avoid recommending `__slots__` for classes that
inherit from more than `namedtuple`
([#&#8203;12531](https://redirect.github.com/astral-sh/ruff/pull/12531))
- \[`isort`] Avoid marking required imports as unused
([#&#8203;12537](https://redirect.github.com/astral-sh/ruff/pull/12537))
- \[`isort`] Preserve trailing inline comments on import-from statements
([#&#8203;12498](https://redirect.github.com/astral-sh/ruff/pull/12498))
- \[`pycodestyle`] Add newlines before comments (`E305`)
([#&#8203;12606](https://redirect.github.com/astral-sh/ruff/pull/12606))
- \[`pycodestyle`] Don't attach comments with mismatched indents
([#&#8203;12604](https://redirect.github.com/astral-sh/ruff/pull/12604))
- \[`pyflakes`] Fix preview-mode bugs in `F401` when attempting to
autofix unused first-party submodule imports in an `__init__.py` file
([#&#8203;12569](https://redirect.github.com/astral-sh/ruff/pull/12569))
- \[`pylint`] Respect start index in `unnecessary-list-index-lookup`
([#&#8203;12603](https://redirect.github.com/astral-sh/ruff/pull/12603))
- \[`pyupgrade`] Avoid recommending no-argument super in `slots=True`
dataclasses
([#&#8203;12530](https://redirect.github.com/astral-sh/ruff/pull/12530))
- \[`pyupgrade`] Use colon rather than dot formatting for integer-only
types
([#&#8203;12534](https://redirect.github.com/astral-sh/ruff/pull/12534))
- Fix NFKC normalization bug when removing unused imports
([#&#8203;12571](https://redirect.github.com/astral-sh/ruff/pull/12571))

##### Other changes

- Consider more stdlib decorators to be property-like
([#&#8203;12583](https://redirect.github.com/astral-sh/ruff/pull/12583))
- Improve handling of metaclasses in various linter rules
([#&#8203;12579](https://redirect.github.com/astral-sh/ruff/pull/12579))
- Improve consistency between linter rules in determining whether a
function is property
([#&#8203;12581](https://redirect.github.com/astral-sh/ruff/pull/12581))

###
[`v0.5.5`](https://redirect.github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#055)

[Compare
Source](https://redirect.github.com/astral-sh/ruff/compare/0.5.4...0.5.5)

##### Preview features

- \[`fastapi`] Implement `fastapi-redundant-response-model` (`FAST001`)
and `fastapi-non-annotated-dependency`(`FAST002`)
([#&#8203;11579](https://redirect.github.com/astral-sh/ruff/pull/11579))
- \[`pydoclint`] Implement `docstring-missing-exception` (`DOC501`) and
`docstring-extraneous-exception` (`DOC502`)
([#&#8203;11471](https://redirect.github.com/astral-sh/ruff/pull/11471))

##### Rule changes

- \[`numpy`] Fix NumPy 2.0 rule for `np.alltrue` and `np.sometrue`
([#&#8203;12473](https://redirect.github.com/astral-sh/ruff/pull/12473))
- \[`numpy`] Ignore `NPY201` inside `except` blocks for compatibility
with older numpy versions
([#&#8203;12490](https://redirect.github.com/astral-sh/ruff/pull/12490))
- \[`pep8-naming`] Avoid applying `ignore-names` to `self` and `cls`
function names (`N804`, `N805`)
([#&#8203;12497](https://redirect.github.com/astral-sh/ruff/pull/12497))

##### Formatter

- Fix incorrect placement of leading function comment with type params
([#&#8203;12447](https://redirect.github.com/astral-sh/ruff/pull/12447))

##### Server

- Do not bail code action resolution when a quick fix is requested
([#&#8203;12462](https://redirect.github.com/astral-sh/ruff/pull/12462))

##### Bug fixes

- Fix `Ord` implementation of `cmp_fix`
([#&#8203;12471](https://redirect.github.com/astral-sh/ruff/pull/12471))
- Raise syntax error for unparenthesized generator expression in
multi-argument call
([#&#8203;12445](https://redirect.github.com/astral-sh/ruff/pull/12445))
- \[`pydoclint`] Fix panic in `DOC501` reported in
[#&#8203;12428](https://redirect.github.com/astral-sh/ruff/pull/12428)
([#&#8203;12435](https://redirect.github.com/astral-sh/ruff/pull/12435))
- \[`flake8-bugbear`] Allow singleton tuples with starred expressions in
`B013`
([#&#8203;12484](https://redirect.github.com/astral-sh/ruff/pull/12484))

##### Documentation

- Add Eglot setup guide for Emacs editor
([#&#8203;12426](https://redirect.github.com/astral-sh/ruff/pull/12426))
- Add note about the breaking change in `nvim-lspconfig`
([#&#8203;12507](https://redirect.github.com/astral-sh/ruff/pull/12507))
- Add note to include notebook files for native server
([#&#8203;12449](https://redirect.github.com/astral

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "on the 2nd and 4th day instance on
sunday after 9pm" in timezone America/New_York, Automerge - At any time
(no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/HHS/simpler-grants-gov).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNjguMTAiLCJ1cGRhdGVkSW5WZXIiOiIzOC44MC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@lukas503
Copy link

lukas503 commented Sep 24, 2024

Unexpected Warning in Pydantic 2.9.2 with Discriminated Union and Overlapping Literal Names

I'm encountering a warning with the following code when using discriminated unions in Pydantic 2.9.2. While the code still behaves as expected, I am curious if the warning is intentional. Specifically, could the warning be due to multiple classes using the same Literal value for the name field? Is that correct usage? 🤔

from typing import Union, Literal, Annotated, Optional
from pydantic import BaseModel, Field, ConfigDict
import pydantic
print(pydantic.__version__)

class _BaseConfig(BaseModel):
    model_config = ConfigDict(
        extra="forbid"  # Don't allow extra values
    )

class A(_BaseConfig):
    c: int
    name: Literal["A"] = "A"
    
    def __repr__(self):
        return "ClassA"

class B(_BaseConfig):
    b: int
    name: Literal["B"] = "B"
    
    def __repr__(self):
        return "ClassB"

class C(_BaseConfig):
    c: int
    d: int
    name: Literal["A"] = "A"
        
    def __repr__(self):
        return "ClassC"

class D(_BaseConfig):
    c: int
    d: int
    name: Literal["B"] = "B"
    
    def __repr__(self):
        return "ClassD"

Var = Union[
    Annotated[A, Field(discriminator='name')], 
    Annotated[B, Field(discriminator='name')], 
    Annotated[C, Field(discriminator='name')], 
    Annotated[D, Field(discriminator='name')]
]

class T(BaseModel):
    a: Optional[Union[dict[str, Var], Var]] = None

model = T(a={"test": {"name": "A", "c": 1, "d": 2}})
print(model, model.model_dump(), T(**model.model_dump()))

model = T(a={"test": {"name": "A", "c": 1,}})
print(model, model.model_dump(), T(**model.model_dump()))

model = T(a={"test": {"name": "B", "b": 1,}})
print(model, model.model_dump(), T(**model.model_dump()))

model = T(a={"test": {"name": "B", "c": 1, "d": 5}})
print(model, model.model_dump(), T(**model.model_dump()))

model = T(a={"name": "B", "c": 1, "d": 2})
print(model, model.model_dump(), T(**model.model_dump()))

Output

2.9.2
a={'test': ClassC} {'a': {'test': {'c': 1, 'd': 2, 'name': 'A'}}} a={'test': ClassC}
a={'test': ClassA} {'a': {'test': {'c': 1, 'name': 'A'}}} a={'test': ClassA}
a={'test': ClassB} {'a': {'test': {'b': 1, 'name': 'B'}}} a={'test': ClassB}
a={'test': ClassD} {'a': {'test': {'c': 1, 'd': 5, 'name': 'B'}}} a={'test': ClassD}
a=ClassD {'a': {'c': 1, 'd': 2, 'name': 'B'}} a=ClassD
.../envs/dev_l1/lib/python3.9/site-packages/pydantic/main.py:390: UserWarning: Pydantic serializer warnings:
  PydanticSerializationUnexpectedValue: Expected `A` but got `C` with value `ClassC` - serialized value may not be as expected
  return self.__pydantic_serializer__.to_python(
.../envs/dev_l1/lib/python3.9/site-packages/pydantic/main.py:390: UserWarning: Pydantic serializer warnings:
  PydanticSerializationUnexpectedValue: Expected `A` but got `B` with value `ClassB` - serialized value may not be as expected
  return self.__pydantic_serializer__.to_python(
.../envs/dev_l1/lib/python3.9/site-packages/pydantic/main.py:390: UserWarning: Pydantic serializer warnings:
  PydanticSerializationUnexpectedValue: Expected `A` but got `D` with value `ClassD` - serialized value may not be as expected
  return self.__pydantic_serializer__.to_python(

My environment:

             pydantic version: 2.9.2
        pydantic-core version: 2.23.4
          pydantic-core build: profile=release pgo=false
                 install path: .../envs/dev_l1/lib/python3.9/site-packages/pydantic
               python version: 3.9.19 (main, May  6 2024, 19:43:03)  [GCC 11.2.0]
                     platform: Linux-6.5.0-1023-gcp-x86_64-with-glibc2.35
             related packages: typing_extensions-4.12.2 pyright-1.1.358

Question: Is the warning related to using the same literal value for multiple classes, or is this a bug in the Pydantic serialization process? Any insights into the cause of this behavior would be appreciated.

@davidhewitt
Copy link
Contributor

@lukas503 your use of discriminators is wrong, see pydantic/pydantic#10482. Indeed they should not be overlapping. It looks like we can help protect against this case better.

@lukas503
Copy link

Thanks. Better protection sounds helpful 👍

kodiakhq bot added a commit to cloudquery/python-plugin-template that referenced this pull request Dec 9, 2024
This PR contains the following updates:

| Package | Type | Update | Change | Pending |
|---|---|---|---|---|
| [pydantic](https://togithub.com/pydantic/pydantic) ([changelog](https://docs.pydantic.dev/latest/changelog/)) | dependencies | minor | `2.4.2` -> `2.10.2` | `2.10.3` |

---

### Release Notes

<details>
<summary>pydantic/pydantic (pydantic)</summary>

### [`v2.10.2`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2102-2024-11-25)

[Compare Source](https://togithub.com/pydantic/pydantic/compare/v2.10.1...v2.10.2)

[GitHub release](https://togithub.com/pydantic/pydantic/releases/tag/v2.10.2)

##### What's Changed

##### Fixes

-   Only evaluate FieldInfo annotations if required during schema building by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10769](https://togithub.com/pydantic/pydantic/pull/10769)
-   Do not evaluate annotations for private fields by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10962](https://togithub.com/pydantic/pydantic/pull/10962)
-   Support serialization as any for `Secret` types and `Url` types by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10947](https://togithub.com/pydantic/pydantic/pull/10947)
-   Fix type hint of `Field.default` to be compatible with Python 3.8 and 3.9 by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10972](https://togithub.com/pydantic/pydantic/pull/10972)
-   Add hashing support for URL types by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10975](https://togithub.com/pydantic/pydantic/pull/10975)
-   Hide `BaseModel.__replace__` definition from type checkers by [@&#8203;Viicos](https://togithub.com/Viicos) in [10979](https://togithub.com/pydantic/pydantic/pull/10979)

### [`v2.10.1`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2101-2024-11-21)

[Compare Source](https://togithub.com/pydantic/pydantic/compare/v2.10.0...v2.10.1)

[GitHub release](https://togithub.com/pydantic/pydantic/releases/tag/v2.10.1)

##### What's Changed

##### Packaging

-   Bump `pydantic-core` version to `v2.27.1` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10938](https://togithub.com/pydantic/pydantic/pull/10938)

##### Fixes

-   Use the correct frame when instantiating a parametrized `TypeAdapter` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10893](https://togithub.com/pydantic/pydantic/pull/10893)
-   Relax check for validated data in `default_factory` utils by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10909](https://togithub.com/pydantic/pydantic/pull/10909)
-   Fix type checking issue with `model_fields` and `model_computed_fields` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10911](https://togithub.com/pydantic/pydantic/pull/10911)
-   Use the parent configuration during schema generation for stdlib `dataclass`es by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10928](https://togithub.com/pydantic/pydantic/pull/10928)
-   Use the `globals` of the function when evaluating the return type of serializers and `computed_field`s by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10929](https://togithub.com/pydantic/pydantic/pull/10929)
-   Fix URL constraint application by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10922](https://togithub.com/pydantic/pydantic/pull/10922)
-   Fix URL equality with different validation methods by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10934](https://togithub.com/pydantic/pydantic/pull/10934)
-   Fix JSON schema title when specified as `''` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10936](https://togithub.com/pydantic/pydantic/pull/10936)
-   Fix `python` mode serialization for `complex` inference by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [pydantic-core#1549](https://togithub.com/pydantic/pydantic-core/pull/1549)

##### New Contributors

### [`v2.10.0`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v2100-2024-11-20)

[Compare Source](https://togithub.com/pydantic/pydantic/compare/v2.9.2...v2.10.0)

The code released in v2.10.0 is practically identical to that of v2.10.0b2.

[GitHub release](https://togithub.com/pydantic/pydantic/releases/tag/v2.10.0)

See the [v2.10 release blog post](https://pydantic.dev/articles/pydantic-v2-10-release) for the highlights!

##### What's Changed

##### Packaging

-   Bump `pydantic-core` to `v2.27.0` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10825](https://togithub.com/pydantic/pydantic/pull/10825)
-   Replaced pdm with uv by [@&#8203;frfahim](https://togithub.com/frfahim) in [#&#8203;10727](https://togithub.com/pydantic/pydantic/pull/10727)

##### New Features

-   Support `fractions.Fraction` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10318](https://togithub.com/pydantic/pydantic/pull/10318)
-   Support `Hashable` for json validation by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10324](https://togithub.com/pydantic/pydantic/pull/10324)
-   Add a `SocketPath` type for `linux` systems by [@&#8203;theunkn0wn1](https://togithub.com/theunkn0wn1) in [#&#8203;10378](https://togithub.com/pydantic/pydantic/pull/10378)
-   Allow arbitrary refs in JSON schema `examples` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10417](https://togithub.com/pydantic/pydantic/pull/10417)
-   Support `defer_build` for Pydantic dataclasses by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10313](https://togithub.com/pydantic/pydantic/pull/10313)
-   Adding v1 / v2 incompatibility warning for nested v1 model by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10431](https://togithub.com/pydantic/pydantic/pull/10431)
-   Add support for unpacked `TypedDict` to type hint variadic keyword arguments with `@validate_call` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10416](https://togithub.com/pydantic/pydantic/pull/10416)
-   Support compiled patterns in `protected_namespaces` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10522](https://togithub.com/pydantic/pydantic/pull/10522)
-   Add support for `propertyNames` in JSON schema by [@&#8203;FlorianSW](https://togithub.com/FlorianSW) in [#&#8203;10478](https://togithub.com/pydantic/pydantic/pull/10478)
-   Adding `__replace__` protocol for Python 3.13+ support by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10596](https://togithub.com/pydantic/pydantic/pull/10596)
-   Expose public `sort` method for JSON schema generation by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10595](https://togithub.com/pydantic/pydantic/pull/10595)
-   Add runtime validation of `@validate_call` callable argument by [@&#8203;kc0506](https://togithub.com/kc0506) in [#&#8203;10627](https://togithub.com/pydantic/pydantic/pull/10627)
-   Add `experimental_allow_partial` support by [@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in [#&#8203;10748](https://togithub.com/pydantic/pydantic/pull/10748)
-   Support default factories taking validated data as an argument by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10678](https://togithub.com/pydantic/pydantic/pull/10678)
-   Allow subclassing `ValidationError` and `PydanticCustomError` by [@&#8203;Youssefares](https://togithub.com/Youssefares) in [pydantic/pydantic-core#1413](https://togithub.com/pydantic/pydantic-core/pull/1413)
-   Add `trailing-strings` support to `experimental_allow_partial` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10825](https://togithub.com/pydantic/pydantic/pull/10825)
-   Add `rebuild()` method for `TypeAdapter` and simplify `defer_build` patterns by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10537](https://togithub.com/pydantic/pydantic/pull/10537)
-   Improve `TypeAdapter` instance repr by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10872](https://togithub.com/pydantic/pydantic/pull/10872)

##### Changes

-   Don't allow customization of `SchemaGenerator` until interface is more stable by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10303](https://togithub.com/pydantic/pydantic/pull/10303)
-   Cleanly `defer_build` on `TypeAdapters`, removing experimental flag by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10329](https://togithub.com/pydantic/pydantic/pull/10329)
-   Fix `mro` of generic subclass  by [@&#8203;kc0506](https://togithub.com/kc0506) in [#&#8203;10100](https://togithub.com/pydantic/pydantic/pull/10100)
-   Strip whitespaces on JSON Schema title generation by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10404](https://togithub.com/pydantic/pydantic/pull/10404)
-   Use `b64decode` and `b64encode` for `Base64Bytes` type by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10486](https://togithub.com/pydantic/pydantic/pull/10486)
-   Relax protected namespace config default by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10441](https://togithub.com/pydantic/pydantic/pull/10441)
-   Revalidate parametrized generics if instance's origin is subclass of OG class by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10666](https://togithub.com/pydantic/pydantic/pull/10666)
-   Warn if configuration is specified on the `@dataclass` decorator and with the `__pydantic_config__` attribute by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10406](https://togithub.com/pydantic/pydantic/pull/10406)
-   Recommend against using `Ellipsis` (...) with `Field` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10661](https://togithub.com/pydantic/pydantic/pull/10661)
-   Migrate to subclassing instead of annotated approach for pydantic url types by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10662](https://togithub.com/pydantic/pydantic/pull/10662)
-   Change JSON schema generation of `Literal`s and `Enums` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10692](https://togithub.com/pydantic/pydantic/pull/10692)
-   Simplify unions involving `Any` or `Never` when replacing type variables by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10338](https://togithub.com/pydantic/pydantic/pull/10338)
-   Do not require padding when decoding `base64` bytes by [@&#8203;bschoenmaeckers](https://togithub.com/bschoenmaeckers) in [pydantic/pydantic-core#1448](https://togithub.com/pydantic/pydantic-core/pull/1448)
-   Support dates all the way to 1BC by [@&#8203;changhc](https://togithub.com/changhc) in [pydantic/speedate#77](https://togithub.com/pydantic/speedate/pull/77)

##### Performance

-   Schema cleaning: skip unnecessary copies during schema walking by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10286](https://togithub.com/pydantic/pydantic/pull/10286)
-   Refactor namespace logic for annotations evaluation by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10530](https://togithub.com/pydantic/pydantic/pull/10530)
-   Improve email regexp on edge cases by [@&#8203;AlekseyLobanov](https://togithub.com/AlekseyLobanov) in [#&#8203;10601](https://togithub.com/pydantic/pydantic/pull/10601)
-   `CoreMetadata` refactor with an emphasis on documentation, schema build time performance, and reducing complexity by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10675](https://togithub.com/pydantic/pydantic/pull/10675)

##### Fixes

-   Remove guarding check on `computed_field` with `field_serializer` by [@&#8203;nix010](https://togithub.com/nix010) in [#&#8203;10390](https://togithub.com/pydantic/pydantic/pull/10390)
-   Fix `Predicate` issue in `v2.9.0` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10321](https://togithub.com/pydantic/pydantic/pull/10321)
-   Fixing `annotated-types` bound by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10327](https://togithub.com/pydantic/pydantic/pull/10327)
-   Turn `tzdata` install requirement into optional `timezone` dependency by [@&#8203;jakob-keller](https://togithub.com/jakob-keller) in [#&#8203;10331](https://togithub.com/pydantic/pydantic/pull/10331)
-   Use correct types namespace when building `namedtuple` core schemas by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10337](https://togithub.com/pydantic/pydantic/pull/10337)
-   Fix evaluation of stringified annotations during namespace inspection by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10347](https://togithub.com/pydantic/pydantic/pull/10347)
-   Fix `IncEx` type alias definition by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10339](https://togithub.com/pydantic/pydantic/pull/10339)
-   Do not error when trying to evaluate annotations of private attributes by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10358](https://togithub.com/pydantic/pydantic/pull/10358)
-   Fix nested type statement by [@&#8203;kc0506](https://togithub.com/kc0506) in [#&#8203;10369](https://togithub.com/pydantic/pydantic/pull/10369)
-   Improve typing of `ModelMetaclass.mro` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10372](https://togithub.com/pydantic/pydantic/pull/10372)
-   Fix class access of deprecated `computed_field`s by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10391](https://togithub.com/pydantic/pydantic/pull/10391)
-   Make sure `inspect.iscoroutinefunction` works on coroutines decorated with `@validate_call` by [@&#8203;MovisLi](https://togithub.com/MovisLi) in [#&#8203;10374](https://togithub.com/pydantic/pydantic/pull/10374)
-   Fix `NameError` when using `validate_call` with PEP 695 on a class by [@&#8203;kc0506](https://togithub.com/kc0506) in [#&#8203;10380](https://togithub.com/pydantic/pydantic/pull/10380)
-   Fix `ZoneInfo` with various invalid types by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10408](https://togithub.com/pydantic/pydantic/pull/10408)
-   Fix `PydanticUserError` on empty `model_config` with annotations by [@&#8203;cdwilson](https://togithub.com/cdwilson) in [#&#8203;10412](https://togithub.com/pydantic/pydantic/pull/10412)
-   Fix variance issue in `_IncEx` type alias, only allow `True` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10414](https://togithub.com/pydantic/pydantic/pull/10414)
-   Fix serialization schema generation when using `PlainValidator` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10427](https://togithub.com/pydantic/pydantic/pull/10427)
-   Fix schema generation error when serialization schema holds references by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10444](https://togithub.com/pydantic/pydantic/pull/10444)
-   Inline references if possible when generating schema for `json_schema_input_type` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10439](https://togithub.com/pydantic/pydantic/pull/10439)
-   Fix recursive arguments in `Representation` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10480](https://togithub.com/pydantic/pydantic/pull/10480)
-   Fix representation for builtin function types by [@&#8203;kschwab](https://togithub.com/kschwab) in [#&#8203;10479](https://togithub.com/pydantic/pydantic/pull/10479)
-   Add python validators for decimal constraints (`max_digits` and `decimal_places`) by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10506](https://togithub.com/pydantic/pydantic/pull/10506)
-   Only fetch `__pydantic_core_schema__` from the current class during schema generation by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10518](https://togithub.com/pydantic/pydantic/pull/10518)
-   Fix `stacklevel` on deprecation warnings for `BaseModel` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10520](https://togithub.com/pydantic/pydantic/pull/10520)
-   Fix warning `stacklevel` in `BaseModel.__init__` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10526](https://togithub.com/pydantic/pydantic/pull/10526)
-   Improve error handling for in-evaluable refs for discriminator application by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10440](https://togithub.com/pydantic/pydantic/pull/10440)
-   Change the signature of `ConfigWrapper.core_config` to take the title directly by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10562](https://togithub.com/pydantic/pydantic/pull/10562)
-   Do not use the previous config from the stack for dataclasses without config by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10576](https://togithub.com/pydantic/pydantic/pull/10576)
-   Fix serialization for IP types with `mode='python'` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10594](https://togithub.com/pydantic/pydantic/pull/10594)
-   Support constraint application for `Base64Etc` types by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10584](https://togithub.com/pydantic/pydantic/pull/10584)
-   Fix `validate_call` ignoring `Field` in `Annotated` by [@&#8203;kc0506](https://togithub.com/kc0506) in [#&#8203;10610](https://togithub.com/pydantic/pydantic/pull/10610)
-   Raise an error when `Self` is invalid by [@&#8203;kc0506](https://togithub.com/kc0506) in [#&#8203;10609](https://togithub.com/pydantic/pydantic/pull/10609)
-   Using `core_schema.InvalidSchema` instead of metadata injection + checks by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10523](https://togithub.com/pydantic/pydantic/pull/10523)
-   Tweak type alias logic by [@&#8203;kc0506](https://togithub.com/kc0506) in [#&#8203;10643](https://togithub.com/pydantic/pydantic/pull/10643)
-   Support usage of `type` with `typing.Self` and type aliases by [@&#8203;kc0506](https://togithub.com/kc0506) in [#&#8203;10621](https://togithub.com/pydantic/pydantic/pull/10621)
-   Use overloads for `Field` and `PrivateAttr` functions by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10651](https://togithub.com/pydantic/pydantic/pull/10651)
-   Clean up the `mypy` plugin implementation by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10669](https://togithub.com/pydantic/pydantic/pull/10669)
-   Properly check for `typing_extensions` variant of `TypeAliasType` by [@&#8203;Daraan](https://togithub.com/Daraan) in [#&#8203;10713](https://togithub.com/pydantic/pydantic/pull/10713)
-   Allow any mapping in `BaseModel.model_copy()` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10751](https://togithub.com/pydantic/pydantic/pull/10751)
-   Fix `isinstance` behavior for urls by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10766](https://togithub.com/pydantic/pydantic/pull/10766)
-   Ensure `cached_property` can be set on Pydantic models by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10774](https://togithub.com/pydantic/pydantic/pull/10774)
-   Fix equality checks for primitives in literals by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [pydantic/pydantic-core#1459](https://togithub.com/pydantic/pydantic-core/pull/1459)
-   Properly enforce `host_required` for URLs by [@&#8203;Viicos](https://togithub.com/Viicos) in [pydantic/pydantic-core#1488](https://togithub.com/pydantic/pydantic-core/pull/1488)
-   Fix when `coerce_numbers_to_str` enabled and string has invalid Unicode character by [@&#8203;andrey-berenda](https://togithub.com/andrey-berenda) in [pydantic/pydantic-core#1515](https://togithub.com/pydantic/pydantic-core/pull/1515)
-   Fix serializing `complex` values in `Enum`s by [@&#8203;changhc](https://togithub.com/changhc) in [pydantic/pydantic-core#1524](https://togithub.com/pydantic/pydantic-core/pull/1524)
-   Refactor `_typing_extra` module by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10725](https://togithub.com/pydantic/pydantic/pull/10725)
-   Support intuitive equality for urls by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10798](https://togithub.com/pydantic/pydantic/pull/10798)
-   Add `bytearray` to `TypeAdapter.validate_json` signature by [@&#8203;samuelcolvin](https://togithub.com/samuelcolvin) in [#&#8203;10802](https://togithub.com/pydantic/pydantic/pull/10802)
-   Ensure class access of method descriptors is performed when used as a default with `Field` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10816](https://togithub.com/pydantic/pydantic/pull/10816)
-   Fix circular import with `validate_call` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10807](https://togithub.com/pydantic/pydantic/pull/10807)
-   Fix error when using type aliases referencing other type aliases by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10809](https://togithub.com/pydantic/pydantic/pull/10809)
-   Fix `IncEx` type alias to be compatible with mypy by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10813](https://togithub.com/pydantic/pydantic/pull/10813)
-   Make `__signature__` a lazy property, do not deepcopy defaults by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10818](https://togithub.com/pydantic/pydantic/pull/10818)
-   Make `__signature__` lazy for dataclasses, too by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10832](https://togithub.com/pydantic/pydantic/pull/10832)
-   Subclass all single host url classes from `AnyUrl` to preserve behavior from v2.9 by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10856](https://togithub.com/pydantic/pydantic/pull/10856)

##### New Contributors

-   [@&#8203;jakob-keller](https://togithub.com/jakob-keller) made their first contribution in [#&#8203;10331](https://togithub.com/pydantic/pydantic/pull/10331)
-   [@&#8203;MovisLi](https://togithub.com/MovisLi) made their first contribution in [#&#8203;10374](https://togithub.com/pydantic/pydantic/pull/10374)
-   [@&#8203;joaopalmeiro](https://togithub.com/joaopalmeiro) made their first contribution in [#&#8203;10405](https://togithub.com/pydantic/pydantic/pull/10405)
-   [@&#8203;theunkn0wn1](https://togithub.com/theunkn0wn1) made their first contribution in [#&#8203;10378](https://togithub.com/pydantic/pydantic/pull/10378)
-   [@&#8203;cdwilson](https://togithub.com/cdwilson) made their first contribution in [#&#8203;10412](https://togithub.com/pydantic/pydantic/pull/10412)
-   [@&#8203;dlax](https://togithub.com/dlax) made their first contribution in [#&#8203;10421](https://togithub.com/pydantic/pydantic/pull/10421)
-   [@&#8203;kschwab](https://togithub.com/kschwab) made their first contribution in [#&#8203;10479](https://togithub.com/pydantic/pydantic/pull/10479)
-   [@&#8203;santibreo](https://togithub.com/santibreo) made their first contribution in [#&#8203;10453](https://togithub.com/pydantic/pydantic/pull/10453)
-   [@&#8203;FlorianSW](https://togithub.com/FlorianSW) made their first contribution in [#&#8203;10478](https://togithub.com/pydantic/pydantic/pull/10478)
-   [@&#8203;tkasuz](https://togithub.com/tkasuz) made their first contribution in [#&#8203;10555](https://togithub.com/pydantic/pydantic/pull/10555)
-   [@&#8203;AlekseyLobanov](https://togithub.com/AlekseyLobanov) made their first contribution in [#&#8203;10601](https://togithub.com/pydantic/pydantic/pull/10601)
-   [@&#8203;NiclasvanEyk](https://togithub.com/NiclasvanEyk) made their first contribution in [#&#8203;10667](https://togithub.com/pydantic/pydantic/pull/10667)
-   [@&#8203;mschoettle](https://togithub.com/mschoettle) made their first contribution in [#&#8203;10677](https://togithub.com/pydantic/pydantic/pull/10677)
-   [@&#8203;Daraan](https://togithub.com/Daraan) made their first contribution in [#&#8203;10713](https://togithub.com/pydantic/pydantic/pull/10713)
-   [@&#8203;k4nar](https://togithub.com/k4nar) made their first contribution in [#&#8203;10736](https://togithub.com/pydantic/pydantic/pull/10736)
-   [@&#8203;UriyaHarpeness](https://togithub.com/UriyaHarpeness) made their first contribution in [#&#8203;10740](https://togithub.com/pydantic/pydantic/pull/10740)
-   [@&#8203;frfahim](https://togithub.com/frfahim) made their first contribution in [#&#8203;10727](https://togithub.com/pydantic/pydantic/pull/10727)

### [`v2.9.2`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v292-2024-09-17)

[Compare Source](https://togithub.com/pydantic/pydantic/compare/v2.9.1...v2.9.2)

[GitHub release](https://togithub.com/pydantic/pydantic/releases/tag/v2.9.2)

##### What's Changed

##### Fixes

-   Do not error when trying to evaluate annotations of private attributes by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10358](https://togithub.com/pydantic/pydantic/pull/10358)
-   Adding notes on designing sound `Callable` discriminators by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10400](https://togithub.com/pydantic/pydantic/pull/10400)
-   Fix serialization schema generation when using `PlainValidator` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10427](https://togithub.com/pydantic/pydantic/pull/10427)
-   Fix `Union` serialization warnings by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [pydantic/pydantic-core#1449](https://togithub.com/pydantic/pydantic-core/pull/1449)
-   Fix variance issue in `_IncEx` type alias, only allow `True` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10414](https://togithub.com/pydantic/pydantic/pull/10414)
-   Fix `ZoneInfo` validation with various invalid types by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10408](https://togithub.com/pydantic/pydantic/pull/10408)

### [`v2.9.1`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v291-2024-09-09)

[Compare Source](https://togithub.com/pydantic/pydantic/compare/v2.9.0...v2.9.1)

[GitHub release](https://togithub.com/pydantic/pydantic/releases/tag/v2.9.1)

##### What's Changed

##### Fixes

-   Fix Predicate issue in v2.9.0 by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10321](https://togithub.com/pydantic/pydantic/pull/10321)
-   Fixing `annotated-types` bound to `>=0.6.0` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10327](https://togithub.com/pydantic/pydantic/pull/10327)
-   Turn `tzdata` install requirement into optional `timezone` dependency by [@&#8203;jakob-keller](https://togithub.com/jakob-keller) in [#&#8203;10331](https://togithub.com/pydantic/pydantic/pull/10331)
-   Fix `IncExc` type alias definition by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10339](https://togithub.com/pydantic/pydantic/pull/10339)
-   Use correct types namespace when building namedtuple core schemas by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10337](https://togithub.com/pydantic/pydantic/pull/10337)
-   Fix evaluation of stringified annotations during namespace inspection by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10347](https://togithub.com/pydantic/pydantic/pull/10347)
-   Fix tagged union serialization with alias generators by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [pydantic/pydantic-core#1442](https://togithub.com/pydantic/pydantic-core/pull/1442)

### [`v2.9.0`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v290-2024-09-05)

[Compare Source](https://togithub.com/pydantic/pydantic/compare/v2.8.2...v2.9.0)

[GitHub release](https://togithub.com/pydantic/pydantic/releases/tag/v2.9.0)

The code released in v2.9.0 is practically identical to that of v2.9.0b2.

##### What's Changed

##### Packaging

-   Bump `ruff` to `v0.5.0` and `pyright` to `v1.1.369` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9801](https://togithub.com/pydantic/pydantic/pull/9801)
-   Bump `pydantic-extra-types` to `v2.9.0` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9832](https://togithub.com/pydantic/pydantic/pull/9832)
-   Support compatibility with `pdm v2.18.1` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10138](https://togithub.com/pydantic/pydantic/pull/10138)
-   Bump `v1` version stub to `v1.10.18` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10214](https://togithub.com/pydantic/pydantic/pull/10214)
-   Bump `pydantic-core` to `v2.23.2` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10311](https://togithub.com/pydantic/pydantic/pull/10311)

##### New Features

-   Add support for `ZoneInfo` by [@&#8203;Youssefares](https://togithub.com/Youssefares) in [#&#8203;9896](https://togithub.com/pydantic/pydantic/pull/9896)
-   Add `Config.val_json_bytes` by [@&#8203;josh-newman](https://togithub.com/josh-newman) in [#&#8203;9770](https://togithub.com/pydantic/pydantic/pull/9770)
-   Add DSN for Snowflake by [@&#8203;aditkumar72](https://togithub.com/aditkumar72) in [#&#8203;10128](https://togithub.com/pydantic/pydantic/pull/10128)
-   Support `complex` number by [@&#8203;changhc](https://togithub.com/changhc) in [#&#8203;9654](https://togithub.com/pydantic/pydantic/pull/9654)
-   Add support for `annotated_types.Not` by [@&#8203;aditkumar72](https://togithub.com/aditkumar72) in [#&#8203;10210](https://togithub.com/pydantic/pydantic/pull/10210)
-   Allow `WithJsonSchema` to inject `$ref`s w/ `http` or `https` links by [@&#8203;dAIsySHEng1](https://togithub.com/dAIsySHEng1) in [#&#8203;9863](https://togithub.com/pydantic/pydantic/pull/9863)
-   Allow validators to customize validation JSON schema by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10094](https://togithub.com/pydantic/pydantic/pull/10094)
-   Support parametrized `PathLike` types by [@&#8203;nix010](https://togithub.com/nix010) in [#&#8203;9764](https://togithub.com/pydantic/pydantic/pull/9764)
-   Add tagged union serializer that attempts to use `str` or `callable` discriminators to select the correct serializer by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in in [pydantic/pydantic-core#1397](https://togithub.com/pydantic/pydantic-core/pull/1397)

##### Changes

-   Breaking Change: Merge `dict` type `json_schema_extra` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9792](https://togithub.com/pydantic/pydantic/pull/9792)
    -   For more info (how to replicate old behavior) on this change, see [here](https://docs.pydantic.dev/dev/concepts/json_schema/#merging-json_schema_extra)
-   Refactor annotation injection for known (often generic) types by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9979](https://togithub.com/pydantic/pydantic/pull/9979)
-   Move annotation compatibility errors to validation phase by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9999](https://togithub.com/pydantic/pydantic/pull/9999)
-   Improve runtime errors for string constraints like `pattern` for incompatible types by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10158](https://togithub.com/pydantic/pydantic/pull/10158)
-   Remove `'allOf'` JSON schema workarounds by [@&#8203;dpeachey](https://togithub.com/dpeachey) in [#&#8203;10029](https://togithub.com/pydantic/pydantic/pull/10029)
-   Remove `typed_dict_cls` data from `CoreMetadata` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10180](https://togithub.com/pydantic/pydantic/pull/10180)
-   Deprecate passing a dict to the `Examples` class by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10181](https://togithub.com/pydantic/pydantic/pull/10181)
-   Remove `initial_metadata` from internal metadata construct by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10194](https://togithub.com/pydantic/pydantic/pull/10194)
-   Use `re.Pattern.search` instead of `re.Pattern.match` for consistency with `rust` behavior by [@&#8203;tinez](https://togithub.com/tinez) in [pydantic/pydantic-core#1368](https://togithub.com/pydantic/pydantic-core/pull/1368)
-   Show value of wrongly typed data in `pydantic-core` serialization warning by [@&#8203;BoxyUwU](https://togithub.com/BoxyUwU) in [pydantic/pydantic-core#1377](https://togithub.com/pydantic/pydantic-core/pull/1377)
-   Breaking Change: in `pydantic-core`, change `metadata` type hint in core schemas from `Any` -> `Dict[str, Any] | None` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [pydantic/pydantic-core#1411](https://togithub.com/pydantic/pydantic-core/pull/1411)
-   Raise helpful warning when `self` isn't returned from model validator by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10255](https://togithub.com/pydantic/pydantic/pull/10255)

##### Performance

-   Initial start at improving import times for modules, using caching primarily by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10009](https://togithub.com/pydantic/pydantic/pull/10009)
-   Using cached internal import for `BaseModel` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10013](https://togithub.com/pydantic/pydantic/pull/10013)
-   Simplify internal generics logic - remove generator overhead by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10059](https://togithub.com/pydantic/pydantic/pull/10059)
-   Remove default module globals from types namespace by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10123](https://togithub.com/pydantic/pydantic/pull/10123)
-   Performance boost: skip caching parent namespaces in most cases by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10113](https://togithub.com/pydantic/pydantic/pull/10113)
-   Update ns stack with already copied ns by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10267](https://togithub.com/pydantic/pydantic/pull/10267)

##### Minor Internal Improvements

-   ⚡️ Speed up `multiple_of_validator()` by 31% in `pydantic/_internal/_validators.py` by [@&#8203;misrasaurabh1](https://togithub.com/misrasaurabh1) in [#&#8203;9839](https://togithub.com/pydantic/pydantic/pull/9839)
-   ⚡️ Speed up `ModelPrivateAttr.__set_name__()` by 18% in `pydantic/fields.py` by [@&#8203;misrasaurabh1](https://togithub.com/misrasaurabh1) in [#&#8203;9841](https://togithub.com/pydantic/pydantic/pull/9841)
-   ⚡️ Speed up `dataclass()` by 7% in `pydantic/dataclasses.py` by [@&#8203;misrasaurabh1](https://togithub.com/misrasaurabh1) in [#&#8203;9843](https://togithub.com/pydantic/pydantic/pull/9843)
-   ⚡️ Speed up function `_field_name_for_signature` by 37% in `pydantic/_internal/_signature.py` by [@&#8203;misrasaurabh1](https://togithub.com/misrasaurabh1) in [#&#8203;9951](https://togithub.com/pydantic/pydantic/pull/9951)
-   ⚡️ Speed up method `GenerateSchema._unpack_refs_defs` by 26% in `pydantic/_internal/_generate_schema.py` by [@&#8203;misrasaurabh1](https://togithub.com/misrasaurabh1) in [#&#8203;9949](https://togithub.com/pydantic/pydantic/pull/9949)
-   ⚡️ Speed up function `apply_each_item_validators` by 100% in `pydantic/_internal/_generate_schema.py` by [@&#8203;misrasaurabh1](https://togithub.com/misrasaurabh1) in [#&#8203;9950](https://togithub.com/pydantic/pydantic/pull/9950)
-   ⚡️ Speed up method `ConfigWrapper.core_config` by 28% in `pydantic/_internal/_config.py` by [@&#8203;misrasaurabh1](https://togithub.com/misrasaurabh1) in [#&#8203;9953](https://togithub.com/pydantic/pydantic/pull/9953)

##### Fixes

-   Respect `use_enum_values` on `Literal` types by [@&#8203;kwint](https://togithub.com/kwint) in [#&#8203;9787](https://togithub.com/pydantic/pydantic/pull/9787)
-   Prevent type error for exotic `BaseModel/RootModel` inheritance by [@&#8203;dmontagu](https://togithub.com/dmontagu) in [#&#8203;9913](https://togithub.com/pydantic/pydantic/pull/9913)
-   Fix typing issue with field_validator-decorated methods by [@&#8203;dmontagu](https://togithub.com/dmontagu) in [#&#8203;9914](https://togithub.com/pydantic/pydantic/pull/9914)
-   Replace `str` type annotation with `Any` in validator factories in documentation on validators by [@&#8203;maximilianfellhuber](https://togithub.com/maximilianfellhuber) in [#&#8203;9885](https://togithub.com/pydantic/pydantic/pull/9885)
-   Fix `ComputedFieldInfo.wrapped_property` pointer when a property setter is assigned by [@&#8203;tlambert03](https://togithub.com/tlambert03) in [#&#8203;9892](https://togithub.com/pydantic/pydantic/pull/9892)
-   Fix recursive typing of `main.IncEnx` by [@&#8203;tlambert03](https://togithub.com/tlambert03) in [#&#8203;9924](https://togithub.com/pydantic/pydantic/pull/9924)
-   Allow usage of `type[Annotated[...]]` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;9932](https://togithub.com/pydantic/pydantic/pull/9932)
-   `mypy` plugin: handle frozen fields on a per-field basis by [@&#8203;dmontagu](https://togithub.com/dmontagu) in [#&#8203;9935](https://togithub.com/pydantic/pydantic/pull/9935)
-   Fix typo in `invalid-annotated-type` error code by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9948](https://togithub.com/pydantic/pydantic/pull/9948)
-   Simplify schema generation for `uuid`, `url`, and `ip` types by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9975](https://togithub.com/pydantic/pydantic/pull/9975)
-   Move `date` schemas to `_generate_schema.py` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9976](https://togithub.com/pydantic/pydantic/pull/9976)
-   Move `decimal.Decimal` validation to `_generate_schema.py` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9977](https://togithub.com/pydantic/pydantic/pull/9977)
-   Simplify IP address schema in `_std_types_schema.py` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9959](https://togithub.com/pydantic/pydantic/pull/9959)
-   Fix type annotations for some potentially generic `GenerateSchema.match_type` options by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9961](https://togithub.com/pydantic/pydantic/pull/9961)
-   Add class name to "has conflict" warnings by [@&#8203;msabramo](https://togithub.com/msabramo) in [#&#8203;9964](https://togithub.com/pydantic/pydantic/pull/9964)
-   Fix `dataclass` ignoring `default_factory` passed in Annotated by [@&#8203;kc0506](https://togithub.com/kc0506) in [#&#8203;9971](https://togithub.com/pydantic/pydantic/pull/9971)
-   Fix `Sequence` ignoring `discriminator` by [@&#8203;kc0506](https://togithub.com/kc0506) in [#&#8203;9980](https://togithub.com/pydantic/pydantic/pull/9980)
-   Fix typing for `IPvAnyAddress` and `IPvAnyInterface` by [@&#8203;haoyun](https://togithub.com/haoyun) in [#&#8203;9990](https://togithub.com/pydantic/pydantic/pull/9990)
-   Fix false positives on v1 models in `mypy` plugin for `from_orm` check requiring from_attributes=True config by [@&#8203;radekwlsk](https://togithub.com/radekwlsk) in [#&#8203;9938](https://togithub.com/pydantic/pydantic/pull/9938)
-   Apply `strict=True` to `__init__` in `mypy` plugin by [@&#8203;kc0506](https://togithub.com/kc0506) in [#&#8203;9998](https://togithub.com/pydantic/pydantic/pull/9998)
-   Refactor application of `deque` annotations by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10018](https://togithub.com/pydantic/pydantic/pull/10018)
-   Raise a better user error when failing to evaluate a forward reference by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10030](https://togithub.com/pydantic/pydantic/pull/10030)
-   Fix evaluation of `__pydantic_extra__` annotation in specific circumstances by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10070](https://togithub.com/pydantic/pydantic/pull/10070)
-   Fix `frozen` enforcement for `dataclasses` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10066](https://togithub.com/pydantic/pydantic/pull/10066)
-   Remove logic to handle unused `__get_pydantic_core_schema__` signature by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10075](https://togithub.com/pydantic/pydantic/pull/10075)
-   Use `is_annotated` consistently by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10095](https://togithub.com/pydantic/pydantic/pull/10095)
-   Fix `PydanticDeprecatedSince26` typo by [@&#8203;kc0506](https://togithub.com/kc0506) in [#&#8203;10101](https://togithub.com/pydantic/pydantic/pull/10101)
-   Improve `pyright` tests, refactor model decorators signatures by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10092](https://togithub.com/pydantic/pydantic/pull/10092)
-   Fix `ip` serialization logic by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10112](https://togithub.com/pydantic/pydantic/pull/10112)
-   Warn when frozen defined twice for `dataclasses` by [@&#8203;mochi22](https://togithub.com/mochi22) in [#&#8203;10082](https://togithub.com/pydantic/pydantic/pull/10082)
-   Do not compute JSON Schema default when plain serializers are used with `when_used` set to `'json-unless-none'` and the default value is `None` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10121](https://togithub.com/pydantic/pydantic/pull/10121)
-   Fix `ImportString` special cases by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10137](https://togithub.com/pydantic/pydantic/pull/10137)
-   Blacklist default globals to support exotic user code with `__` prefixed annotations by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10136](https://togithub.com/pydantic/pydantic/pull/10136)
-   Handle `nullable` schemas with `serialization` schema available during JSON Schema generation by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10132](https://togithub.com/pydantic/pydantic/pull/10132)
-   Reorganize `BaseModel` annotations by [@&#8203;kc0506](https://togithub.com/kc0506) in [#&#8203;10110](https://togithub.com/pydantic/pydantic/pull/10110)
-   Fix core schema simplification when serialization schemas are involved in specific scenarios by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10155](https://togithub.com/pydantic/pydantic/pull/10155)
-   Add support for stringified annotations when using `PrivateAttr` with `Annotated` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10157](https://togithub.com/pydantic/pydantic/pull/10157)
-   Fix JSON Schema `number` type for literal and enum schemas by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10172](https://togithub.com/pydantic/pydantic/pull/10172)
-   Fix JSON Schema generation of fields with plain validators in serialization mode by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10167](https://togithub.com/pydantic/pydantic/pull/10167)
-   Fix invalid JSON Schemas being generated for functions in certain scenarios by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10188](https://togithub.com/pydantic/pydantic/pull/10188)
-   Make sure generated JSON Schemas are valid in tests by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10182](https://togithub.com/pydantic/pydantic/pull/10182)
-   Fix key error with custom serializer by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10200](https://togithub.com/pydantic/pydantic/pull/10200)
-   Add 'wss' for allowed schemes in NatsDsn by [@&#8203;swelborn](https://togithub.com/swelborn) in [#&#8203;10224](https://togithub.com/pydantic/pydantic/pull/10224)
-   Fix `Mapping` and `MutableMapping` annotations to use mapping schema instead of dict schema by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10020](https://togithub.com/pydantic/pydantic/pull/10020)
-   Fix JSON Schema generation for constrained dates by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10185](https://togithub.com/pydantic/pydantic/pull/10185)
-   Fix discriminated union bug regression when using enums by [@&#8203;kfreezen](https://togithub.com/kfreezen) in [pydantic/pydantic-core#1286](https://togithub.com/pydantic/pydantic-core/pull/1286)
-   Fix `field_serializer` with computed field when using `*` by [@&#8203;nix010](https://togithub.com/nix010) in [pydantic/pydantic-core#1349](https://togithub.com/pydantic/pydantic-core/pull/1349)
-   Try each option in `Union` serializer before inference by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [pydantic/pydantic-core#1398](https://togithub.com/pydantic/pydantic-core/pull/1398)
-   Fix `float` serialization behavior in `strict` mode by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [pydantic/pydantic-core#1400](https://togithub.com/pydantic/pydantic-core/pull/1400)
-   Introduce `exactness` into Decimal validation logic to improve union validation behavior by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in in [pydantic/pydantic-core#1405](https://togithub.com/pydantic/pydantic-core/pull/1405)
-   Fix new warnings assertions to use `pytest.warns()` by [@&#8203;mgorny](https://togithub.com/mgorny) in [#&#8203;10241](https://togithub.com/pydantic/pydantic/pull/10241)
-   Fix a crash when cleaning the namespace in `ModelMetaclass` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10242](https://togithub.com/pydantic/pydantic/pull/10242)
-   Fix parent namespace issue with model rebuilds by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10257](https://togithub.com/pydantic/pydantic/pull/10257)
-   Remove defaults filter for namespace by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10261](https://togithub.com/pydantic/pydantic/pull/10261)
-   Use identity instead of equality after validating model in `__init__` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10264](https://togithub.com/pydantic/pydantic/pull/10264)
-   Support `BigInt` serialization for `int` subclasses by [@&#8203;kxx317](https://togithub.com/kxx317) in [pydantic/pydantic-core#1417](https://togithub.com/pydantic/pydantic-core/pull/1417)
-   Support signature for wrap validators without `info` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10277](https://togithub.com/pydantic/pydantic/pull/10277)
-   Ensure `__pydantic_complete__` is set when rebuilding `dataclasses` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;10291](https://togithub.com/pydantic/pydantic/pull/10291)
-   Respect `schema_generator` config value in `TypeAdapter` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;10300](https://togithub.com/pydantic/pydantic/pull/10300)

##### New Contributors

##### `pydantic`

-   [@&#8203;kwint](https://togithub.com/kwint) made their first contribution in [#&#8203;9787](https://togithub.com/pydantic/pydantic/pull/9787)
-   [@&#8203;seekinginfiniteloop](https://togithub.com/seekinginfiniteloop) made their first contribution in [#&#8203;9822](https://togithub.com/pydantic/pydantic/pull/9822)
-   [@&#8203;a-alexander](https://togithub.com/a-alexander) made their first contribution in [#&#8203;9848](https://togithub.com/pydantic/pydantic/pull/9848)
-   [@&#8203;maximilianfellhuber](https://togithub.com/maximilianfellhuber) made their first contribution in [#&#8203;9885](https://togithub.com/pydantic/pydantic/pull/9885)
-   [@&#8203;karmaBonfire](https://togithub.com/karmaBonfire) made their first contribution in [#&#8203;9945](https://togithub.com/pydantic/pydantic/pull/9945)
-   [@&#8203;s-rigaud](https://togithub.com/s-rigaud) made their first contribution in [#&#8203;9958](https://togithub.com/pydantic/pydantic/pull/9958)
-   [@&#8203;msabramo](https://togithub.com/msabramo) made their first contribution in [#&#8203;9964](https://togithub.com/pydantic/pydantic/pull/9964)
-   [@&#8203;DimaCybr](https://togithub.com/DimaCybr) made their first contribution in [#&#8203;9972](https://togithub.com/pydantic/pydantic/pull/9972)
-   [@&#8203;kc0506](https://togithub.com/kc0506) made their first contribution in [#&#8203;9971](https://togithub.com/pydantic/pydantic/pull/9971)
-   [@&#8203;haoyun](https://togithub.com/haoyun) made their first contribution in [#&#8203;9990](https://togithub.com/pydantic/pydantic/pull/9990)
-   [@&#8203;radekwlsk](https://togithub.com/radekwlsk) made their first contribution in [#&#8203;9938](https://togithub.com/pydantic/pydantic/pull/9938)
-   [@&#8203;dpeachey](https://togithub.com/dpeachey) made their first contribution in [#&#8203;10029](https://togithub.com/pydantic/pydantic/pull/10029)
-   [@&#8203;BoxyUwU](https://togithub.com/BoxyUwU) made their first contribution in [#&#8203;10085](https://togithub.com/pydantic/pydantic/pull/10085)
-   [@&#8203;mochi22](https://togithub.com/mochi22) made their first contribution in [#&#8203;10082](https://togithub.com/pydantic/pydantic/pull/10082)
-   [@&#8203;aditkumar72](https://togithub.com/aditkumar72) made their first contribution in [#&#8203;10128](https://togithub.com/pydantic/pydantic/pull/10128)
-   [@&#8203;changhc](https://togithub.com/changhc) made their first contribution in [#&#8203;9654](https://togithub.com/pydantic/pydantic/pull/9654)
-   [@&#8203;insumanth](https://togithub.com/insumanth) made their first contribution in [#&#8203;10229](https://togithub.com/pydantic/pydantic/pull/10229)
-   [@&#8203;AdolfoVillalobos](https://togithub.com/AdolfoVillalobos) made their first contribution in [#&#8203;10240](https://togithub.com/pydantic/pydantic/pull/10240)
-   [@&#8203;bllchmbrs](https://togithub.com/bllchmbrs) made their first contribution in [#&#8203;10270](https://togithub.com/pydantic/pydantic/pull/10270)

##### `pydantic-core`

-   [@&#8203;kfreezen](https://togithub.com/kfreezen) made their first contribution in [pydantic/pydantic-core#1286](https://togithub.com/pydantic/pydantic-core/pull/1286)
-   [@&#8203;tinez](https://togithub.com/tinez) made their first contribution in [pydantic/pydantic-core#1368](https://togithub.com/pydantic/pydantic-core/pull/1368)
-   [@&#8203;fft001](https://togithub.com/fft001) made their first contribution in [pydantic/pydantic-core#1362](https://togithub.com/pydantic/pydantic-core/pull/1362)
-   [@&#8203;nix010](https://togithub.com/nix010) made their first contribution in [pydantic/pydantic-core#1349](https://togithub.com/pydantic/pydantic-core/pull/1349)
-   [@&#8203;BoxyUwU](https://togithub.com/BoxyUwU) made their first contribution in [pydantic/pydantic-core#1379](https://togithub.com/pydantic/pydantic-core/pull/1379)
-   [@&#8203;candleindark](https://togithub.com/candleindark) made their first contribution in [pydantic/pydantic-core#1404](https://togithub.com/pydantic/pydantic-core/pull/1404)
-   [@&#8203;changhc](https://togithub.com/changhc) made their first contribution in [pydantic/pydantic-core#1331](https://togithub.com/pydantic/pydantic-core/pull/1331)

### [`v2.8.2`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v282-2024-07-03)

[Compare Source](https://togithub.com/pydantic/pydantic/compare/v2.8.1...v2.8.2)

[GitHub release](https://togithub.com/pydantic/pydantic/releases/tag/v2.8.2)

##### What's Changed

##### Fixes

-   Fix issue with assertion caused by pluggable schema validator by [@&#8203;dmontagu](https://togithub.com/dmontagu) in [#&#8203;9838](https://togithub.com/pydantic/pydantic/pull/9838)

### [`v2.8.1`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v281-2024-07-03)

[Compare Source](https://togithub.com/pydantic/pydantic/compare/v2.8.0...v2.8.1)

[GitHub release](https://togithub.com/pydantic/pydantic/releases/tag/v2.8.1)

##### What's Changed

##### Packaging

-   Bump `ruff` to `v0.5.0` and `pyright` to `v1.1.369` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9801](https://togithub.com/pydantic/pydantic/pull/9801)
-   Bump `pydantic-core` to `v2.20.1`, `pydantic-extra-types` to `v2.9.0` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9832](https://togithub.com/pydantic/pydantic/pull/9832)

##### Fixes

-   Fix breaking change in `to_snake` from v2.7 -> v2.8 by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9812](https://togithub.com/pydantic/pydantic/pull/9812)
-   Fix list constraint json schema application by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9818](https://togithub.com/pydantic/pydantic/pull/9818)
-   Support time duration more than 23 by [@&#8203;nix010](https://togithub.com/nix010) in [pydantic/speedate#64](https://togithub.com/pydantic/speedate/pull/64)
-   Fix millisecond fraction being handled with the wrong scale by [@&#8203;davidhewitt](https://togithub.com/davidhewitt) in [pydantic/speedate#65](https://togithub.com/pydantic/speedate/pull/65)
-   Handle negative fractional durations correctly by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [pydantic/speedate#71](https://togithub.com/pydantic/speedate/pull/71)

### [`v2.8.0`](https://togithub.com/pydantic/pydantic/blob/HEAD/HISTORY.md#v280-2024-07-01)

[Compare Source](https://togithub.com/pydantic/pydantic/compare/v2.7.4...v2.8.0)

[GitHub release](https://togithub.com/pydantic/pydantic/releases/tag/v2.8.0)

The code released in v2.8.0 is functionally identical to that of v2.8.0b1.

##### What's Changed

##### Packaging

-   Update citation version automatically with new releases by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9673](https://togithub.com/pydantic/pydantic/pull/9673)
-   Bump pyright to `v1.1.367` and add type checking tests for pipeline API by [@&#8203;adriangb](https://togithub.com/adriangb) in [#&#8203;9674](https://togithub.com/pydantic/pydantic/pull/9674)
-   Update `pydantic.v1` stub to `v1.10.17` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9707](https://togithub.com/pydantic/pydantic/pull/9707)
-   General package updates to prep for `v2.8.0b1` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9741](https://togithub.com/pydantic/pydantic/pull/9741)
-   Bump `pydantic-core` to `v2.20.0` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9745](https://togithub.com/pydantic/pydantic/pull/9745)
-   Add support for Python 3.13 by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9743](https://togithub.com/pydantic/pydantic/pull/9743)
-   Update `pdm` version used for `pdm.lock` to v2.16.1 by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9761](https://togithub.com/pydantic/pydantic/pull/9761)
-   Update to `ruff` `v0.4.8` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;9585](https://togithub.com/pydantic/pydantic/pull/9585)

##### New Features

-   Experimental: support `defer_build` for `TypeAdapter` by [@&#8203;MarkusSintonen](https://togithub.com/MarkusSintonen) in [#&#8203;8939](https://togithub.com/pydantic/pydantic/pull/8939)
-   Implement `deprecated` field in json schema by [@&#8203;NeevCohen](https://togithub.com/NeevCohen) in [#&#8203;9298](https://togithub.com/pydantic/pydantic/pull/9298)
-   Experimental: Add pipeline API by [@&#8203;adriangb](https://togithub.com/adriangb) in [#&#8203;9459](https://togithub.com/pydantic/pydantic/pull/9459)
-   Add support for programmatic title generation by [@&#8203;NeevCohen](https://togithub.com/NeevCohen) in [#&#8203;9183](https://togithub.com/pydantic/pydantic/pull/9183)
-   Implement `fail_fast` feature by [@&#8203;uriyyo](https://togithub.com/uriyyo) in [#&#8203;9708](https://togithub.com/pydantic/pydantic/pull/9708)
-   Add `ser_json_inf_nan='strings'` mode to produce valid JSON by [@&#8203;josh-newman](https://togithub.com/josh-newman) in [pydantic/pydantic-core#1307](https://togithub.com/pydantic/pydantic-core/pull/1307)

##### Changes

-   Add warning when "alias" is set in ignored `Annotated` field by [@&#8203;nix010](https://togithub.com/nix010) in [#&#8203;9170](https://togithub.com/pydantic/pydantic/pull/9170)
-   Support serialization of some serializable defaults in JSON schema by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9624](https://togithub.com/pydantic/pydantic/pull/9624)
-   Relax type specification for `__validators__` values in `create_model` by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [#&#8203;9697](https://togithub.com/pydantic/pydantic/pull/9697)
-   **Breaking Change:** Improve `smart` union matching logic by [@&#8203;sydney-runkle](https://togithub.com/sydney-runkle) in [pydantic/pydantic-core#1322](https://togithub.com/pydantic/pydantic-core/pull/1322)
    You can read more about our `smart` union matching logic [here](https://docs.pydantic.dev/dev/concepts/unions/#smart-mode). In some cases, if the old behavior
    is desired, you can switch to `left-to-right` mode and change the order of your `Union` members.

##### Performance

##### Internal Improvements

-   ⚡️ Speed up `_display_error_loc()` by 25% in `pydantic/v1/error_wrappers.py` by [@&#8203;misrasaurabh1](https://togithub.com/misrasaurabh1) in [#&#8203;9653](https://togithub.com/pydantic/pydantic/pull/9653)
-   ⚡️ Speed up `_get_all_json_refs()` by 34% in `pydantic/json_schema.py` by [@&#8203;misrasaurabh1](https://togithub.com/misrasaurabh1) in [#&#8203;9650](https://togithub.com/pydantic/pydantic/pull/9650)
-   ⚡️ Speed up `is_pydantic_dataclass()` by 41% in `pydantic/dataclasses.py` by [@&#8203;misrasaurabh1](https://togithub.com/misrasaurabh1) in [#&#8203;9652](https://togithub.com/pydantic/pydantic/pull/9652)
-   ⚡️ Speed up `to_snake()` by 27% in `pydantic/alias_generators.py` by [@&#8203;misrasaurabh1](https://togithub.com/misrasaurabh1) in [#&#8203;9747](https://togithub.com/pydantic/pydantic/pull/9747)
-   ⚡️ Speed up `unwrap_wrapped_function()` by 93% in `pydantic/_internal/_decorators.py` by [@&#8203;misrasaurabh1](https://togithub.com/misrasaurabh1) in [#&#8203;9727](https://togithub.com/pydantic/pydantic/pull/9727)

##### Fixes

-   Replace `__spec__.parent` with `__package__` by [@&#8203;hramezani](https://togithub.com/hramezani) in [#&#8203;9331](https://togithub.com/pydantic/pydantic/pull/9331)
-   Fix Outputted Model JSON Schema for `Sequence` type by [@&#8203;anesmemisevic](https://togithub.com/anesmemisevic) in [#&#8203;9303](https://togithub.com/pydantic/pydantic/pull/9303)
-   Fix typing of `_frame_depth` by [@&#8203;Viicos](https://togithub.com/Viicos) in [#&#8203;9353](https://togithub.com/pydantic/pydantic/pull/9353)
-   Make `ImportString` json schema compatible by [@&#8203;amitschang](https://togithub.com/am

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 4am on the first day of the month" (UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://togithub.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40NDAuNyIsInVwZGF0ZWRJblZlciI6IjM3LjQ0MC43IiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImF1dG9tZXJnZSJdfQ==-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants