-
Notifications
You must be signed in to change notification settings - Fork 252
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
Conversation
CodSpeed Performance ReportMerging #1449 will not alter performanceComparing Summary
|
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. |
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
""" |
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" | ||
)))) |
There was a problem hiding this comment.
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 :)
There was a problem hiding this comment.
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
"""
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 [@​Viicos](https://redirect.github.com/Viicos) in [#​10358](https://redirect.github.com/pydantic/pydantic/pull/10358) - Adding notes on designing sound `Callable` discriminators by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10400](https://redirect.github.com/pydantic/pydantic/pull/10400) - Fix serialization schema generation when using `PlainValidator` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10427](https://redirect.github.com/pydantic/pydantic/pull/10427) - Fix `Union` serialization warnings by [@​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 [@​Viicos](https://redirect.github.com/Viicos) in [#​10414](https://redirect.github.com/pydantic/pydantic/pull/10414) - Fix `ZoneInfo` validation with various invalid types by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​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>
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`. ([#​273], [#​272]) [#​272]: https://redirect.github.com/lovasoa/marshmallow_dataclass/issues/272 [#​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 [@​Viicos](https://redirect.github.com/Viicos) in [#​10358](https://redirect.github.com/pydantic/pydantic/pull/10358) - Adding notes on designing sound `Callable` discriminators by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​10400](https://redirect.github.com/pydantic/pydantic/pull/10400) - Fix serialization schema generation when using `PlainValidator` by [@​Viicos](https://redirect.github.com/Viicos) in [#​10427](https://redirect.github.com/pydantic/pydantic/pull/10427) - Fix `Union` serialization warnings by [@​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 [@​Viicos](https://redirect.github.com/Viicos) in [#​10414](https://redirect.github.com/pydantic/pydantic/pull/10414) - Fix `ZoneInfo` validation with various invalid types by [@​sydney-runkle](https://redirect.github.com/sydney-runkle) in [#​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 - [@​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) - [@​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**" ([#​13300](https://redirect.github.com/astral-sh/ruff/pull/13300)) - \[`refurb`] Implement `slice-to-remove-prefix-or-suffix` (`FURB188`) ([#​13256](https://redirect.github.com/astral-sh/ruff/pull/13256)) ##### Rule changes - \[`eradicate`] Ignore script-comments with multiple end-tags (`ERA001`) ([#​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`) ([#​13293](https://redirect.github.com/astral-sh/ruff/pull/13293)) ##### Server - Add support for extensionless Python files for server ([#​13326](https://redirect.github.com/astral-sh/ruff/pull/13326)) - Fix configuration inheritance for configurations specified in the LSP settings ([#​13285](https://redirect.github.com/astral-sh/ruff/pull/13285)) ##### Bug fixes - \[`ruff`] Handle unary operators in `decimal-from-float-literal` (`RUF032`) ([#​13275](https://redirect.github.com/astral-sh/ruff/pull/13275)) ##### CLI - Only include rules with diagnostics in SARIF metadata ([#​13268](https://redirect.github.com/astral-sh/ruff/pull/13268)) ##### Playground - Add "Copy as pyproject.toml/ruff.toml" and "Paste from TOML" ([#​13328](https://redirect.github.com/astral-sh/ruff/pull/13328)) - Fix errors not shown for restored snippet on page load ([#​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 ([#​13172](https://redirect.github.com/astral-sh/ruff/pull/13172)) - \[`pydoclint`] Permit yielding `None` in `DOC402` and `DOC403` ([#​13148](https://redirect.github.com/astral-sh/ruff/pull/13148)) - \[`pylint`] Update diagnostic message for `PLW3201` ([#​13194](https://redirect.github.com/astral-sh/ruff/pull/13194)) - \[`ruff`] Implement `post-init-default` (`RUF033`) ([#​13192](https://redirect.github.com/astral-sh/ruff/pull/13192)) - \[`ruff`] Implement useless if-else (`RUF034`) ([#​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`) ([#​13162](https://redirect.github.com/astral-sh/ruff/pull/13162)) - \[`flake8-pyi`] Teach various rules that annotations might be stringized ([#​12951](https://redirect.github.com/astral-sh/ruff/pull/12951)) - \[`pylint`] Avoid `no-self-use` for `attrs`-style validators ([#​13166](https://redirect.github.com/astral-sh/ruff/pull/13166)) - \[`pylint`] Recurse into subscript subexpressions when searching for list/dict lookups (`PLR1733`, `PLR1736`) ([#​13186](https://redirect.github.com/astral-sh/ruff/pull/13186)) - \[`pyupgrade`] Detect `aiofiles.open` calls in `UP015` ([#​13173](https://redirect.github.com/astral-sh/ruff/pull/13173)) - \[`pyupgrade`] Mark `sys.version_info[0] < 3` and similar comparisons as outdated (`UP036`) ([#​13175](https://redirect.github.com/astral-sh/ruff/pull/13175)) ##### CLI - Enrich messages of SARIF results ([#​13180](https://redirect.github.com/astral-sh/ruff/pull/13180)) - Handle singular case for incompatible rules warning in `ruff format` output ([#​13212](https://redirect.github.com/astral-sh/ruff/pull/13212)) ##### Bug fixes - \[`pydocstyle`] Improve heuristics for detecting Google-style docstrings ([#​13142](https://redirect.github.com/astral-sh/ruff/pull/13142)) - \[`refurb`] Treat `sep` arguments with effects as unsafe removals (`FURB105`) ([#​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`) ([#​13104](https://redirect.github.com/astral-sh/ruff/pull/13104)) - \[`pycodestyle`] Disable `E741` in stub files (`.pyi`) ([#​13119](https://redirect.github.com/astral-sh/ruff/pull/13119)) - \[`pydoclint`] Avoid `DOC201` on explicit returns in functions that only return `None` ([#​13064](https://redirect.github.com/astral-sh/ruff/pull/13064)) ##### Rule changes - \[`flake8-async`] Disable check for `asyncio` before Python 3.11 (`ASYNC109`) ([#​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`) ([#​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`) ([#​13118](https://redirect.github.com/astral-sh/ruff/pull/13118)) - \[`flake8-pytest-style`] Improve help message for `pytest-incorrect-mark-parentheses-style` (`PT023`) ([#​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`) ([#​13089](https://redirect.github.com/astral-sh/ruff/pull/13089)) - \[`ruff`] Add `datetime.time`, `datetime.tzinfo`, and `datetime.timezone` as immutable function calls (`RUF009`) ([#​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 ([#​13105](https://redirect.github.com/astral-sh/ruff/pull/13105)) - Fix dark theme on initial page load for the Ruff playground ([#​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`) ([#​12959](https://redirect.github.com/astral-sh/ruff/pull/12959)) - \[`ruff`] Avoid `unused-async` for functions with FastAPI route decorator (`RUF029`) ([#​12938](https://redirect.github.com/astral-sh/ruff/pull/12938)) - \[`ruff`] Ignore `fstring-missing-syntax` (`RUF027`) for `fastAPI` paths ([#​12939](https://redirect.github.com/astral-sh/ruff/pull/12939)) - \[`ruff`] Implement check for Decimal called with a float literal (RUF032) ([#​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`) ([#​12944](https://redirect.github.com/astral-sh/ruff/pull/12944)) - \[`flake8-pyi`] Skip type annotations in `string-or-bytes-too-long` (`PYI053`) ([#​13002](https://redirect.github.com/astral-sh/ruff/pull/13002)) - \[`flake8-type-checking`] Always recognise relative imports as first-party ([#​12994](https://redirect.github.com/astral-sh/ruff/pull/12994)) - \[`flake8-unused-arguments`] Ignore unused arguments on stub functions (`ARG001`) ([#​12966](https://redirect.github.com/astral-sh/ruff/pull/12966)) - \[`pylint`] Ignore augmented assignment for `self-cls-assignment` (`PLW0642`) ([#​12957](https://redirect.github.com/astral-sh/ruff/pull/12957)) ##### Server - Show full context in error log messages ([#​13029](https://redirect.github.com/astral-sh/ruff/pull/13029)) ##### Bug fixes - \[`pep8-naming`] Don't flag `from` imports following conventional import names (`N817`) ([#​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`) ([#​12958](https://redirect.github.com/astral-sh/ruff/pull/12958)) ##### Documentation - Add `hyperfine` installation instructions; update `hyperfine` code samples ([#​13034](https://redirect.github.com/astral-sh/ruff/pull/13034)) - Expand note to use Ruff with other language server in Kate ([#​12806](https://redirect.github.com/astral-sh/ruff/pull/12806)) - Update example for `PT001` as per the new default behavior ([#​13019](https://redirect.github.com/astral-sh/ruff/pull/13019)) - \[`perflint`] Improve docs for `try-except-in-loop` (`PERF203`) ([#​12947](https://redirect.github.com/astral-sh/ruff/pull/12947)) - \[`pydocstyle`] Add reference to `lint.pydocstyle.ignore-decorators` setting to rule docs ([#​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`) ([#​12638](https://redirect.github.com/astral-sh/ruff/pull/12638)) ##### Rule changes - \[`pylint`] Rename `too-many-positional` to `too-many-positional-arguments` (`R0917`) ([#​12905](https://redirect.github.com/astral-sh/ruff/pull/12905)) ##### Server - Fix crash when applying "fix-all" code-action to notebook cells ([#​12929](https://redirect.github.com/astral-sh/ruff/pull/12929)) ##### Other changes - \[`flake8-naming`]: Respect import conventions (`N817`) ([#​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 ([#​12878](https://redirect.github.com/astral-sh/ruff/pull/12878)). - Detect imports in `src` layouts by default for `isort` rules ([#​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 ([#​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`) ([#​12796](https://redirect.github.com/astral-sh/ruff/pull/12796)) - \[`pyupgrade`] Show violations without auto-fix (`UP031`) ([#​11229](https://redirect.github.com/astral-sh/ruff/pull/11229)) ##### Rule changes - \[`flake8-import-conventions`] Add `xml.etree.ElementTree` to default conventions ([#​12455](https://redirect.github.com/astral-sh/ruff/pull/12455)) - \[`flake8-pytest-style`] Add a space after comma in CSV output (`PT006`) ([#​12853](https://redirect.github.com/astral-sh/ruff/pull/12853)) ##### Server - Show a message for incorrect settings ([#​12781](https://redirect.github.com/astral-sh/ruff/pull/12781)) ##### Bug fixes - \[`flake8-async`] Do not lint yield in context manager (`ASYNC100`) ([#​12896](https://redirect.github.com/astral-sh/ruff/pull/12896)) - \[`flake8-comprehensions`] Do not lint `async for` comprehensions (`C419`) ([#​12895](https://redirect.github.com/astral-sh/ruff/pull/12895)) - \[`flake8-return`] Only add return `None` at end of a function (`RET503`) ([#​11074](https://redirect.github.com/astral-sh/ruff/pull/11074)) - \[`flake8-type-checking`] Avoid treating `dataclasses.KW_ONLY` as typing-only (`TCH003`) ([#​12863](https://redirect.github.com/astral-sh/ruff/pull/12863)) - \[`pep8-naming`] Treat `type(Protocol)` et al as metaclass base (`N805`) ([#​12770](https://redirect.github.com/astral-sh/ruff/pull/12770)) - \[`pydoclint`] Don't enforce returns and yields in abstract methods (`DOC201`, `DOC202`) ([#​12771](https://redirect.github.com/astral-sh/ruff/pull/12771)) - \[`ruff`] Skip tuples with slice expressions in (`RUF031`) ([#​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`) ([#​12762](https://redirect.github.com/astral-sh/ruff/pull/12762)) - \[`ruff`] Ignore template strings passed to logging and `builtins._()` calls (`RUF027`) ([#​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`) ([#​12784](https://redirect.github.com/astral-sh/ruff/pull/12784)) - Evaluate default parameter values for a function in that function's enclosing scope ([#​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 ([#​12864](https://redirect.github.com/astral-sh/ruff/pull/12864)) - Respect `kernelspec` notebook metadata when detecting the preferred language for a Jupyter Notebook ([#​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`) ([#​12657](https://redirect.github.com/astral-sh/ruff/pull/12657)) - \[`flake8-pyi`] Add autofix for `future-annotations-in-stub` (`PYI044`) ([#​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) ([#​12740](https://redirect.github.com/astral-sh/ruff/pull/12740)) - \[`pydoclint`] Add `docstring-missing-yields` (`DOC402`) and `docstring-extraneous-yields` (`DOC403`) ([#​12538](https://redirect.github.com/astral-sh/ruff/pull/12538)) - \[`pydoclint`] Avoid `DOC201` if docstring begins with "Return", "Returns", "Yield", or "Yields" ([#​12675](https://redirect.github.com/astral-sh/ruff/pull/12675)) - \[`pydoclint`] Deduplicate collected exceptions after traversing function bodies (`DOC501`) ([#​12642](https://redirect.github.com/astral-sh/ruff/pull/12642)) - \[`pydoclint`] Ignore `DOC` errors for stub functions ([#​12651](https://redirect.github.com/astral-sh/ruff/pull/12651)) - \[`pydoclint`] Teach rules to understand reraised exceptions as being explicitly raised (`DOC501`, `DOC502`) ([#​12639](https://redirect.github.com/astral-sh/ruff/pull/12639)) - \[`ruff`] Implement `incorrectly-parenthesized-tuple-in-subscript` (`RUF031`) ([#​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 ([#​12692](https://redirect.github.com/astral-sh/ruff/pull/12692)) ##### Rule changes - \[`refurb`] Add autofix for `implicit-cwd` (`FURB177`) ([#​12708](https://redirect.github.com/astral-sh/ruff/pull/12708)) - \[`ruff`] Add autofix for `zip-instead-of-pairwise` (`RUF007`) ([#​12663](https://redirect.github.com/astral-sh/ruff/pull/12663)) - \[`tryceratops`] Add `BaseException` to `raise-vanilla-class` rule (`TRY002`) ([#​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 ([#​12725](https://redirect.github.com/astral-sh/ruff/pull/12725)) ##### CLI - Fix cache invalidation for nested `pyproject.toml` files ([#​12727](https://redirect.github.com/astral-sh/ruff/pull/12727)) ##### Bug fixes - \[`flake8-async`] Fix false positives with multiple `async with` items (`ASYNC100`) ([#​12643](https://redirect.github.com/astral-sh/ruff/pull/12643)) - \[`flake8-bandit`] Avoid false-positives for list concatenations in SQL construction (`S608`) ([#​12720](https://redirect.github.com/astral-sh/ruff/pull/12720)) - \[`flake8-bugbear`] Treat `return` as equivalent to `break` (`B909`) ([#​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`) ([#​12691](https://redirect.github.com/astral-sh/ruff/pull/12691)) - \[`flake8-simplify`] Parenthesize conditions based on precedence when merging if arms (`SIM114`) ([#​12737](https://redirect.github.com/astral-sh/ruff/pull/12737)) - \[`pydoclint`] Try both 'Raises' section styles when convention is unspecified (`DOC501`) ([#​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 ([#​12621](https://redirect.github.com/astral-sh/ruff/pull/12621)) - \[`flake8-builtins`] Implement import, lambda, and module shadowing ([#​12546](https://redirect.github.com/astral-sh/ruff/pull/12546)) - \[`pydoclint`] Add `docstring-missing-returns` (`DOC201`) and `docstring-extraneous-returns` (`DOC202`) ([#​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`) ([#​12563](https://redirect.github.com/astral-sh/ruff/pull/12563)) ##### Server - Make server panic hook more error resilient ([#​12610](https://redirect.github.com/astral-sh/ruff/pull/12610)) - Use `$/logTrace` for server trace logs in Zed and VS Code ([#​12564](https://redirect.github.com/astral-sh/ruff/pull/12564)) - Keep track of deleted cells for reorder change request ([#​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 ([#​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` ([#​12605](https://redirect.github.com/astral-sh/ruff/pull/12605)) - \[`flake8-slots`] Avoid recommending `__slots__` for classes that inherit from more than `namedtuple` ([#​12531](https://redirect.github.com/astral-sh/ruff/pull/12531)) - \[`isort`] Avoid marking required imports as unused ([#​12537](https://redirect.github.com/astral-sh/ruff/pull/12537)) - \[`isort`] Preserve trailing inline comments on import-from statements ([#​12498](https://redirect.github.com/astral-sh/ruff/pull/12498)) - \[`pycodestyle`] Add newlines before comments (`E305`) ([#​12606](https://redirect.github.com/astral-sh/ruff/pull/12606)) - \[`pycodestyle`] Don't attach comments with mismatched indents ([#​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 ([#​12569](https://redirect.github.com/astral-sh/ruff/pull/12569)) - \[`pylint`] Respect start index in `unnecessary-list-index-lookup` ([#​12603](https://redirect.github.com/astral-sh/ruff/pull/12603)) - \[`pyupgrade`] Avoid recommending no-argument super in `slots=True` dataclasses ([#​12530](https://redirect.github.com/astral-sh/ruff/pull/12530)) - \[`pyupgrade`] Use colon rather than dot formatting for integer-only types ([#​12534](https://redirect.github.com/astral-sh/ruff/pull/12534)) - Fix NFKC normalization bug when removing unused imports ([#​12571](https://redirect.github.com/astral-sh/ruff/pull/12571)) ##### Other changes - Consider more stdlib decorators to be property-like ([#​12583](https://redirect.github.com/astral-sh/ruff/pull/12583)) - Improve handling of metaclasses in various linter rules ([#​12579](https://redirect.github.com/astral-sh/ruff/pull/12579)) - Improve consistency between linter rules in determining whether a function is property ([#​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`) ([#​11579](https://redirect.github.com/astral-sh/ruff/pull/11579)) - \[`pydoclint`] Implement `docstring-missing-exception` (`DOC501`) and `docstring-extraneous-exception` (`DOC502`) ([#​11471](https://redirect.github.com/astral-sh/ruff/pull/11471)) ##### Rule changes - \[`numpy`] Fix NumPy 2.0 rule for `np.alltrue` and `np.sometrue` ([#​12473](https://redirect.github.com/astral-sh/ruff/pull/12473)) - \[`numpy`] Ignore `NPY201` inside `except` blocks for compatibility with older numpy versions ([#​12490](https://redirect.github.com/astral-sh/ruff/pull/12490)) - \[`pep8-naming`] Avoid applying `ignore-names` to `self` and `cls` function names (`N804`, `N805`) ([#​12497](https://redirect.github.com/astral-sh/ruff/pull/12497)) ##### Formatter - Fix incorrect placement of leading function comment with type params ([#​12447](https://redirect.github.com/astral-sh/ruff/pull/12447)) ##### Server - Do not bail code action resolution when a quick fix is requested ([#​12462](https://redirect.github.com/astral-sh/ruff/pull/12462)) ##### Bug fixes - Fix `Ord` implementation of `cmp_fix` ([#​12471](https://redirect.github.com/astral-sh/ruff/pull/12471)) - Raise syntax error for unparenthesized generator expression in multi-argument call ([#​12445](https://redirect.github.com/astral-sh/ruff/pull/12445)) - \[`pydoclint`] Fix panic in `DOC501` reported in [#​12428](https://redirect.github.com/astral-sh/ruff/pull/12428) ([#​12435](https://redirect.github.com/astral-sh/ruff/pull/12435)) - \[`flake8-bugbear`] Allow singleton tuples with starred expressions in `B013` ([#​12484](https://redirect.github.com/astral-sh/ruff/pull/12484)) ##### Documentation - Add Eglot setup guide for Emacs editor ([#​12426](https://redirect.github.com/astral-sh/ruff/pull/12426)) - Add note about the breaking change in `nvim-lspconfig` ([#​12507](https://redirect.github.com/astral-sh/ruff/pull/12507)) - Add note to include notebook files for native server ([#​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>
Unexpected Warning in Pydantic 2.9.2 with Discriminated Union and Overlapping Literal NamesI'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
My environment:
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. |
@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. |
Thanks. Better protection sounds helpful 👍 |
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 [@​Viicos](https://togithub.com/Viicos) in [#​10769](https://togithub.com/pydantic/pydantic/pull/10769) - Do not evaluate annotations for private fields by [@​Viicos](https://togithub.com/Viicos) in [#​10962](https://togithub.com/pydantic/pydantic/pull/10962) - Support serialization as any for `Secret` types and `Url` types by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​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 [@​Viicos](https://togithub.com/Viicos) in [#​10972](https://togithub.com/pydantic/pydantic/pull/10972) - Add hashing support for URL types by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10975](https://togithub.com/pydantic/pydantic/pull/10975) - Hide `BaseModel.__replace__` definition from type checkers by [@​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 [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10938](https://togithub.com/pydantic/pydantic/pull/10938) ##### Fixes - Use the correct frame when instantiating a parametrized `TypeAdapter` by [@​Viicos](https://togithub.com/Viicos) in [#​10893](https://togithub.com/pydantic/pydantic/pull/10893) - Relax check for validated data in `default_factory` utils by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10909](https://togithub.com/pydantic/pydantic/pull/10909) - Fix type checking issue with `model_fields` and `model_computed_fields` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10911](https://togithub.com/pydantic/pydantic/pull/10911) - Use the parent configuration during schema generation for stdlib `dataclass`es by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​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 [@​Viicos](https://togithub.com/Viicos) in [#​10929](https://togithub.com/pydantic/pydantic/pull/10929) - Fix URL constraint application by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10922](https://togithub.com/pydantic/pydantic/pull/10922) - Fix URL equality with different validation methods by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10934](https://togithub.com/pydantic/pydantic/pull/10934) - Fix JSON schema title when specified as `''` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10936](https://togithub.com/pydantic/pydantic/pull/10936) - Fix `python` mode serialization for `complex` inference by [@​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 [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10825](https://togithub.com/pydantic/pydantic/pull/10825) - Replaced pdm with uv by [@​frfahim](https://togithub.com/frfahim) in [#​10727](https://togithub.com/pydantic/pydantic/pull/10727) ##### New Features - Support `fractions.Fraction` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10318](https://togithub.com/pydantic/pydantic/pull/10318) - Support `Hashable` for json validation by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10324](https://togithub.com/pydantic/pydantic/pull/10324) - Add a `SocketPath` type for `linux` systems by [@​theunkn0wn1](https://togithub.com/theunkn0wn1) in [#​10378](https://togithub.com/pydantic/pydantic/pull/10378) - Allow arbitrary refs in JSON schema `examples` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10417](https://togithub.com/pydantic/pydantic/pull/10417) - Support `defer_build` for Pydantic dataclasses by [@​Viicos](https://togithub.com/Viicos) in [#​10313](https://togithub.com/pydantic/pydantic/pull/10313) - Adding v1 / v2 incompatibility warning for nested v1 model by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10431](https://togithub.com/pydantic/pydantic/pull/10431) - Add support for unpacked `TypedDict` to type hint variadic keyword arguments with `@validate_call` by [@​Viicos](https://togithub.com/Viicos) in [#​10416](https://togithub.com/pydantic/pydantic/pull/10416) - Support compiled patterns in `protected_namespaces` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10522](https://togithub.com/pydantic/pydantic/pull/10522) - Add support for `propertyNames` in JSON schema by [@​FlorianSW](https://togithub.com/FlorianSW) in [#​10478](https://togithub.com/pydantic/pydantic/pull/10478) - Adding `__replace__` protocol for Python 3.13+ support by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10596](https://togithub.com/pydantic/pydantic/pull/10596) - Expose public `sort` method for JSON schema generation by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10595](https://togithub.com/pydantic/pydantic/pull/10595) - Add runtime validation of `@validate_call` callable argument by [@​kc0506](https://togithub.com/kc0506) in [#​10627](https://togithub.com/pydantic/pydantic/pull/10627) - Add `experimental_allow_partial` support by [@​samuelcolvin](https://togithub.com/samuelcolvin) in [#​10748](https://togithub.com/pydantic/pydantic/pull/10748) - Support default factories taking validated data as an argument by [@​Viicos](https://togithub.com/Viicos) in [#​10678](https://togithub.com/pydantic/pydantic/pull/10678) - Allow subclassing `ValidationError` and `PydanticCustomError` by [@​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 [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10825](https://togithub.com/pydantic/pydantic/pull/10825) - Add `rebuild()` method for `TypeAdapter` and simplify `defer_build` patterns by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10537](https://togithub.com/pydantic/pydantic/pull/10537) - Improve `TypeAdapter` instance repr by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10872](https://togithub.com/pydantic/pydantic/pull/10872) ##### Changes - Don't allow customization of `SchemaGenerator` until interface is more stable by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10303](https://togithub.com/pydantic/pydantic/pull/10303) - Cleanly `defer_build` on `TypeAdapters`, removing experimental flag by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10329](https://togithub.com/pydantic/pydantic/pull/10329) - Fix `mro` of generic subclass by [@​kc0506](https://togithub.com/kc0506) in [#​10100](https://togithub.com/pydantic/pydantic/pull/10100) - Strip whitespaces on JSON Schema title generation by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10404](https://togithub.com/pydantic/pydantic/pull/10404) - Use `b64decode` and `b64encode` for `Base64Bytes` type by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10486](https://togithub.com/pydantic/pydantic/pull/10486) - Relax protected namespace config default by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10441](https://togithub.com/pydantic/pydantic/pull/10441) - Revalidate parametrized generics if instance's origin is subclass of OG class by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10666](https://togithub.com/pydantic/pydantic/pull/10666) - Warn if configuration is specified on the `@dataclass` decorator and with the `__pydantic_config__` attribute by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10406](https://togithub.com/pydantic/pydantic/pull/10406) - Recommend against using `Ellipsis` (...) with `Field` by [@​Viicos](https://togithub.com/Viicos) in [#​10661](https://togithub.com/pydantic/pydantic/pull/10661) - Migrate to subclassing instead of annotated approach for pydantic url types by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10662](https://togithub.com/pydantic/pydantic/pull/10662) - Change JSON schema generation of `Literal`s and `Enums` by [@​Viicos](https://togithub.com/Viicos) in [#​10692](https://togithub.com/pydantic/pydantic/pull/10692) - Simplify unions involving `Any` or `Never` when replacing type variables by [@​Viicos](https://togithub.com/Viicos) in [#​10338](https://togithub.com/pydantic/pydantic/pull/10338) - Do not require padding when decoding `base64` bytes by [@​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 [@​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 [@​Viicos](https://togithub.com/Viicos) in [#​10286](https://togithub.com/pydantic/pydantic/pull/10286) - Refactor namespace logic for annotations evaluation by [@​Viicos](https://togithub.com/Viicos) in [#​10530](https://togithub.com/pydantic/pydantic/pull/10530) - Improve email regexp on edge cases by [@​AlekseyLobanov](https://togithub.com/AlekseyLobanov) in [#​10601](https://togithub.com/pydantic/pydantic/pull/10601) - `CoreMetadata` refactor with an emphasis on documentation, schema build time performance, and reducing complexity by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10675](https://togithub.com/pydantic/pydantic/pull/10675) ##### Fixes - Remove guarding check on `computed_field` with `field_serializer` by [@​nix010](https://togithub.com/nix010) in [#​10390](https://togithub.com/pydantic/pydantic/pull/10390) - Fix `Predicate` issue in `v2.9.0` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10321](https://togithub.com/pydantic/pydantic/pull/10321) - Fixing `annotated-types` bound by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10327](https://togithub.com/pydantic/pydantic/pull/10327) - Turn `tzdata` install requirement into optional `timezone` dependency by [@​jakob-keller](https://togithub.com/jakob-keller) in [#​10331](https://togithub.com/pydantic/pydantic/pull/10331) - Use correct types namespace when building `namedtuple` core schemas by [@​Viicos](https://togithub.com/Viicos) in [#​10337](https://togithub.com/pydantic/pydantic/pull/10337) - Fix evaluation of stringified annotations during namespace inspection by [@​Viicos](https://togithub.com/Viicos) in [#​10347](https://togithub.com/pydantic/pydantic/pull/10347) - Fix `IncEx` type alias definition by [@​Viicos](https://togithub.com/Viicos) in [#​10339](https://togithub.com/pydantic/pydantic/pull/10339) - Do not error when trying to evaluate annotations of private attributes by [@​Viicos](https://togithub.com/Viicos) in [#​10358](https://togithub.com/pydantic/pydantic/pull/10358) - Fix nested type statement by [@​kc0506](https://togithub.com/kc0506) in [#​10369](https://togithub.com/pydantic/pydantic/pull/10369) - Improve typing of `ModelMetaclass.mro` by [@​Viicos](https://togithub.com/Viicos) in [#​10372](https://togithub.com/pydantic/pydantic/pull/10372) - Fix class access of deprecated `computed_field`s by [@​Viicos](https://togithub.com/Viicos) in [#​10391](https://togithub.com/pydantic/pydantic/pull/10391) - Make sure `inspect.iscoroutinefunction` works on coroutines decorated with `@validate_call` by [@​MovisLi](https://togithub.com/MovisLi) in [#​10374](https://togithub.com/pydantic/pydantic/pull/10374) - Fix `NameError` when using `validate_call` with PEP 695 on a class by [@​kc0506](https://togithub.com/kc0506) in [#​10380](https://togithub.com/pydantic/pydantic/pull/10380) - Fix `ZoneInfo` with various invalid types by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10408](https://togithub.com/pydantic/pydantic/pull/10408) - Fix `PydanticUserError` on empty `model_config` with annotations by [@​cdwilson](https://togithub.com/cdwilson) in [#​10412](https://togithub.com/pydantic/pydantic/pull/10412) - Fix variance issue in `_IncEx` type alias, only allow `True` by [@​Viicos](https://togithub.com/Viicos) in [#​10414](https://togithub.com/pydantic/pydantic/pull/10414) - Fix serialization schema generation when using `PlainValidator` by [@​Viicos](https://togithub.com/Viicos) in [#​10427](https://togithub.com/pydantic/pydantic/pull/10427) - Fix schema generation error when serialization schema holds references by [@​Viicos](https://togithub.com/Viicos) in [#​10444](https://togithub.com/pydantic/pydantic/pull/10444) - Inline references if possible when generating schema for `json_schema_input_type` by [@​Viicos](https://togithub.com/Viicos) in [#​10439](https://togithub.com/pydantic/pydantic/pull/10439) - Fix recursive arguments in `Representation` by [@​Viicos](https://togithub.com/Viicos) in [#​10480](https://togithub.com/pydantic/pydantic/pull/10480) - Fix representation for builtin function types by [@​kschwab](https://togithub.com/kschwab) in [#​10479](https://togithub.com/pydantic/pydantic/pull/10479) - Add python validators for decimal constraints (`max_digits` and `decimal_places`) by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10506](https://togithub.com/pydantic/pydantic/pull/10506) - Only fetch `__pydantic_core_schema__` from the current class during schema generation by [@​Viicos](https://togithub.com/Viicos) in [#​10518](https://togithub.com/pydantic/pydantic/pull/10518) - Fix `stacklevel` on deprecation warnings for `BaseModel` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10520](https://togithub.com/pydantic/pydantic/pull/10520) - Fix warning `stacklevel` in `BaseModel.__init__` by [@​Viicos](https://togithub.com/Viicos) in [#​10526](https://togithub.com/pydantic/pydantic/pull/10526) - Improve error handling for in-evaluable refs for discriminator application by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10440](https://togithub.com/pydantic/pydantic/pull/10440) - Change the signature of `ConfigWrapper.core_config` to take the title directly by [@​Viicos](https://togithub.com/Viicos) in [#​10562](https://togithub.com/pydantic/pydantic/pull/10562) - Do not use the previous config from the stack for dataclasses without config by [@​Viicos](https://togithub.com/Viicos) in [#​10576](https://togithub.com/pydantic/pydantic/pull/10576) - Fix serialization for IP types with `mode='python'` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10594](https://togithub.com/pydantic/pydantic/pull/10594) - Support constraint application for `Base64Etc` types by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10584](https://togithub.com/pydantic/pydantic/pull/10584) - Fix `validate_call` ignoring `Field` in `Annotated` by [@​kc0506](https://togithub.com/kc0506) in [#​10610](https://togithub.com/pydantic/pydantic/pull/10610) - Raise an error when `Self` is invalid by [@​kc0506](https://togithub.com/kc0506) in [#​10609](https://togithub.com/pydantic/pydantic/pull/10609) - Using `core_schema.InvalidSchema` instead of metadata injection + checks by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10523](https://togithub.com/pydantic/pydantic/pull/10523) - Tweak type alias logic by [@​kc0506](https://togithub.com/kc0506) in [#​10643](https://togithub.com/pydantic/pydantic/pull/10643) - Support usage of `type` with `typing.Self` and type aliases by [@​kc0506](https://togithub.com/kc0506) in [#​10621](https://togithub.com/pydantic/pydantic/pull/10621) - Use overloads for `Field` and `PrivateAttr` functions by [@​Viicos](https://togithub.com/Viicos) in [#​10651](https://togithub.com/pydantic/pydantic/pull/10651) - Clean up the `mypy` plugin implementation by [@​Viicos](https://togithub.com/Viicos) in [#​10669](https://togithub.com/pydantic/pydantic/pull/10669) - Properly check for `typing_extensions` variant of `TypeAliasType` by [@​Daraan](https://togithub.com/Daraan) in [#​10713](https://togithub.com/pydantic/pydantic/pull/10713) - Allow any mapping in `BaseModel.model_copy()` by [@​Viicos](https://togithub.com/Viicos) in [#​10751](https://togithub.com/pydantic/pydantic/pull/10751) - Fix `isinstance` behavior for urls by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10766](https://togithub.com/pydantic/pydantic/pull/10766) - Ensure `cached_property` can be set on Pydantic models by [@​Viicos](https://togithub.com/Viicos) in [#​10774](https://togithub.com/pydantic/pydantic/pull/10774) - Fix equality checks for primitives in literals by [@​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 [@​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 [@​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 [@​changhc](https://togithub.com/changhc) in [pydantic/pydantic-core#1524](https://togithub.com/pydantic/pydantic-core/pull/1524) - Refactor `_typing_extra` module by [@​Viicos](https://togithub.com/Viicos) in [#​10725](https://togithub.com/pydantic/pydantic/pull/10725) - Support intuitive equality for urls by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10798](https://togithub.com/pydantic/pydantic/pull/10798) - Add `bytearray` to `TypeAdapter.validate_json` signature by [@​samuelcolvin](https://togithub.com/samuelcolvin) in [#​10802](https://togithub.com/pydantic/pydantic/pull/10802) - Ensure class access of method descriptors is performed when used as a default with `Field` by [@​Viicos](https://togithub.com/Viicos) in [#​10816](https://togithub.com/pydantic/pydantic/pull/10816) - Fix circular import with `validate_call` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10807](https://togithub.com/pydantic/pydantic/pull/10807) - Fix error when using type aliases referencing other type aliases by [@​Viicos](https://togithub.com/Viicos) in [#​10809](https://togithub.com/pydantic/pydantic/pull/10809) - Fix `IncEx` type alias to be compatible with mypy by [@​Viicos](https://togithub.com/Viicos) in [#​10813](https://togithub.com/pydantic/pydantic/pull/10813) - Make `__signature__` a lazy property, do not deepcopy defaults by [@​Viicos](https://togithub.com/Viicos) in [#​10818](https://togithub.com/pydantic/pydantic/pull/10818) - Make `__signature__` lazy for dataclasses, too by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10832](https://togithub.com/pydantic/pydantic/pull/10832) - Subclass all single host url classes from `AnyUrl` to preserve behavior from v2.9 by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10856](https://togithub.com/pydantic/pydantic/pull/10856) ##### New Contributors - [@​jakob-keller](https://togithub.com/jakob-keller) made their first contribution in [#​10331](https://togithub.com/pydantic/pydantic/pull/10331) - [@​MovisLi](https://togithub.com/MovisLi) made their first contribution in [#​10374](https://togithub.com/pydantic/pydantic/pull/10374) - [@​joaopalmeiro](https://togithub.com/joaopalmeiro) made their first contribution in [#​10405](https://togithub.com/pydantic/pydantic/pull/10405) - [@​theunkn0wn1](https://togithub.com/theunkn0wn1) made their first contribution in [#​10378](https://togithub.com/pydantic/pydantic/pull/10378) - [@​cdwilson](https://togithub.com/cdwilson) made their first contribution in [#​10412](https://togithub.com/pydantic/pydantic/pull/10412) - [@​dlax](https://togithub.com/dlax) made their first contribution in [#​10421](https://togithub.com/pydantic/pydantic/pull/10421) - [@​kschwab](https://togithub.com/kschwab) made their first contribution in [#​10479](https://togithub.com/pydantic/pydantic/pull/10479) - [@​santibreo](https://togithub.com/santibreo) made their first contribution in [#​10453](https://togithub.com/pydantic/pydantic/pull/10453) - [@​FlorianSW](https://togithub.com/FlorianSW) made their first contribution in [#​10478](https://togithub.com/pydantic/pydantic/pull/10478) - [@​tkasuz](https://togithub.com/tkasuz) made their first contribution in [#​10555](https://togithub.com/pydantic/pydantic/pull/10555) - [@​AlekseyLobanov](https://togithub.com/AlekseyLobanov) made their first contribution in [#​10601](https://togithub.com/pydantic/pydantic/pull/10601) - [@​NiclasvanEyk](https://togithub.com/NiclasvanEyk) made their first contribution in [#​10667](https://togithub.com/pydantic/pydantic/pull/10667) - [@​mschoettle](https://togithub.com/mschoettle) made their first contribution in [#​10677](https://togithub.com/pydantic/pydantic/pull/10677) - [@​Daraan](https://togithub.com/Daraan) made their first contribution in [#​10713](https://togithub.com/pydantic/pydantic/pull/10713) - [@​k4nar](https://togithub.com/k4nar) made their first contribution in [#​10736](https://togithub.com/pydantic/pydantic/pull/10736) - [@​UriyaHarpeness](https://togithub.com/UriyaHarpeness) made their first contribution in [#​10740](https://togithub.com/pydantic/pydantic/pull/10740) - [@​frfahim](https://togithub.com/frfahim) made their first contribution in [#​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 [@​Viicos](https://togithub.com/Viicos) in [#​10358](https://togithub.com/pydantic/pydantic/pull/10358) - Adding notes on designing sound `Callable` discriminators by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10400](https://togithub.com/pydantic/pydantic/pull/10400) - Fix serialization schema generation when using `PlainValidator` by [@​Viicos](https://togithub.com/Viicos) in [#​10427](https://togithub.com/pydantic/pydantic/pull/10427) - Fix `Union` serialization warnings by [@​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 [@​Viicos](https://togithub.com/Viicos) in [#​10414](https://togithub.com/pydantic/pydantic/pull/10414) - Fix `ZoneInfo` validation with various invalid types by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​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 [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10321](https://togithub.com/pydantic/pydantic/pull/10321) - Fixing `annotated-types` bound to `>=0.6.0` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10327](https://togithub.com/pydantic/pydantic/pull/10327) - Turn `tzdata` install requirement into optional `timezone` dependency by [@​jakob-keller](https://togithub.com/jakob-keller) in [#​10331](https://togithub.com/pydantic/pydantic/pull/10331) - Fix `IncExc` type alias definition by [@​Viicos](https://togithub.com/Viicos) in [#​10339](https://togithub.com/pydantic/pydantic/pull/10339) - Use correct types namespace when building namedtuple core schemas by [@​Viicos](https://togithub.com/Viicos) in [#​10337](https://togithub.com/pydantic/pydantic/pull/10337) - Fix evaluation of stringified annotations during namespace inspection by [@​Viicos](https://togithub.com/Viicos) in [#​10347](https://togithub.com/pydantic/pydantic/pull/10347) - Fix tagged union serialization with alias generators by [@​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 [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9801](https://togithub.com/pydantic/pydantic/pull/9801) - Bump `pydantic-extra-types` to `v2.9.0` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9832](https://togithub.com/pydantic/pydantic/pull/9832) - Support compatibility with `pdm v2.18.1` by [@​Viicos](https://togithub.com/Viicos) in [#​10138](https://togithub.com/pydantic/pydantic/pull/10138) - Bump `v1` version stub to `v1.10.18` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10214](https://togithub.com/pydantic/pydantic/pull/10214) - Bump `pydantic-core` to `v2.23.2` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10311](https://togithub.com/pydantic/pydantic/pull/10311) ##### New Features - Add support for `ZoneInfo` by [@​Youssefares](https://togithub.com/Youssefares) in [#​9896](https://togithub.com/pydantic/pydantic/pull/9896) - Add `Config.val_json_bytes` by [@​josh-newman](https://togithub.com/josh-newman) in [#​9770](https://togithub.com/pydantic/pydantic/pull/9770) - Add DSN for Snowflake by [@​aditkumar72](https://togithub.com/aditkumar72) in [#​10128](https://togithub.com/pydantic/pydantic/pull/10128) - Support `complex` number by [@​changhc](https://togithub.com/changhc) in [#​9654](https://togithub.com/pydantic/pydantic/pull/9654) - Add support for `annotated_types.Not` by [@​aditkumar72](https://togithub.com/aditkumar72) in [#​10210](https://togithub.com/pydantic/pydantic/pull/10210) - Allow `WithJsonSchema` to inject `$ref`s w/ `http` or `https` links by [@​dAIsySHEng1](https://togithub.com/dAIsySHEng1) in [#​9863](https://togithub.com/pydantic/pydantic/pull/9863) - Allow validators to customize validation JSON schema by [@​Viicos](https://togithub.com/Viicos) in [#​10094](https://togithub.com/pydantic/pydantic/pull/10094) - Support parametrized `PathLike` types by [@​nix010](https://togithub.com/nix010) in [#​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 [@​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 [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​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 [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9979](https://togithub.com/pydantic/pydantic/pull/9979) - Move annotation compatibility errors to validation phase by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9999](https://togithub.com/pydantic/pydantic/pull/9999) - Improve runtime errors for string constraints like `pattern` for incompatible types by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10158](https://togithub.com/pydantic/pydantic/pull/10158) - Remove `'allOf'` JSON schema workarounds by [@​dpeachey](https://togithub.com/dpeachey) in [#​10029](https://togithub.com/pydantic/pydantic/pull/10029) - Remove `typed_dict_cls` data from `CoreMetadata` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10180](https://togithub.com/pydantic/pydantic/pull/10180) - Deprecate passing a dict to the `Examples` class by [@​Viicos](https://togithub.com/Viicos) in [#​10181](https://togithub.com/pydantic/pydantic/pull/10181) - Remove `initial_metadata` from internal metadata construct by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10194](https://togithub.com/pydantic/pydantic/pull/10194) - Use `re.Pattern.search` instead of `re.Pattern.match` for consistency with `rust` behavior by [@​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 [@​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 [@​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 [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10255](https://togithub.com/pydantic/pydantic/pull/10255) ##### Performance - Initial start at improving import times for modules, using caching primarily by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10009](https://togithub.com/pydantic/pydantic/pull/10009) - Using cached internal import for `BaseModel` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10013](https://togithub.com/pydantic/pydantic/pull/10013) - Simplify internal generics logic - remove generator overhead by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10059](https://togithub.com/pydantic/pydantic/pull/10059) - Remove default module globals from types namespace by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10123](https://togithub.com/pydantic/pydantic/pull/10123) - Performance boost: skip caching parent namespaces in most cases by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10113](https://togithub.com/pydantic/pydantic/pull/10113) - Update ns stack with already copied ns by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10267](https://togithub.com/pydantic/pydantic/pull/10267) ##### Minor Internal Improvements - ⚡️ Speed up `multiple_of_validator()` by 31% in `pydantic/_internal/_validators.py` by [@​misrasaurabh1](https://togithub.com/misrasaurabh1) in [#​9839](https://togithub.com/pydantic/pydantic/pull/9839) - ⚡️ Speed up `ModelPrivateAttr.__set_name__()` by 18% in `pydantic/fields.py` by [@​misrasaurabh1](https://togithub.com/misrasaurabh1) in [#​9841](https://togithub.com/pydantic/pydantic/pull/9841) - ⚡️ Speed up `dataclass()` by 7% in `pydantic/dataclasses.py` by [@​misrasaurabh1](https://togithub.com/misrasaurabh1) in [#​9843](https://togithub.com/pydantic/pydantic/pull/9843) - ⚡️ Speed up function `_field_name_for_signature` by 37% in `pydantic/_internal/_signature.py` by [@​misrasaurabh1](https://togithub.com/misrasaurabh1) in [#​9951](https://togithub.com/pydantic/pydantic/pull/9951) - ⚡️ Speed up method `GenerateSchema._unpack_refs_defs` by 26% in `pydantic/_internal/_generate_schema.py` by [@​misrasaurabh1](https://togithub.com/misrasaurabh1) in [#​9949](https://togithub.com/pydantic/pydantic/pull/9949) - ⚡️ Speed up function `apply_each_item_validators` by 100% in `pydantic/_internal/_generate_schema.py` by [@​misrasaurabh1](https://togithub.com/misrasaurabh1) in [#​9950](https://togithub.com/pydantic/pydantic/pull/9950) - ⚡️ Speed up method `ConfigWrapper.core_config` by 28% in `pydantic/_internal/_config.py` by [@​misrasaurabh1](https://togithub.com/misrasaurabh1) in [#​9953](https://togithub.com/pydantic/pydantic/pull/9953) ##### Fixes - Respect `use_enum_values` on `Literal` types by [@​kwint](https://togithub.com/kwint) in [#​9787](https://togithub.com/pydantic/pydantic/pull/9787) - Prevent type error for exotic `BaseModel/RootModel` inheritance by [@​dmontagu](https://togithub.com/dmontagu) in [#​9913](https://togithub.com/pydantic/pydantic/pull/9913) - Fix typing issue with field_validator-decorated methods by [@​dmontagu](https://togithub.com/dmontagu) in [#​9914](https://togithub.com/pydantic/pydantic/pull/9914) - Replace `str` type annotation with `Any` in validator factories in documentation on validators by [@​maximilianfellhuber](https://togithub.com/maximilianfellhuber) in [#​9885](https://togithub.com/pydantic/pydantic/pull/9885) - Fix `ComputedFieldInfo.wrapped_property` pointer when a property setter is assigned by [@​tlambert03](https://togithub.com/tlambert03) in [#​9892](https://togithub.com/pydantic/pydantic/pull/9892) - Fix recursive typing of `main.IncEnx` by [@​tlambert03](https://togithub.com/tlambert03) in [#​9924](https://togithub.com/pydantic/pydantic/pull/9924) - Allow usage of `type[Annotated[...]]` by [@​Viicos](https://togithub.com/Viicos) in [#​9932](https://togithub.com/pydantic/pydantic/pull/9932) - `mypy` plugin: handle frozen fields on a per-field basis by [@​dmontagu](https://togithub.com/dmontagu) in [#​9935](https://togithub.com/pydantic/pydantic/pull/9935) - Fix typo in `invalid-annotated-type` error code by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9948](https://togithub.com/pydantic/pydantic/pull/9948) - Simplify schema generation for `uuid`, `url`, and `ip` types by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9975](https://togithub.com/pydantic/pydantic/pull/9975) - Move `date` schemas to `_generate_schema.py` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9976](https://togithub.com/pydantic/pydantic/pull/9976) - Move `decimal.Decimal` validation to `_generate_schema.py` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9977](https://togithub.com/pydantic/pydantic/pull/9977) - Simplify IP address schema in `_std_types_schema.py` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9959](https://togithub.com/pydantic/pydantic/pull/9959) - Fix type annotations for some potentially generic `GenerateSchema.match_type` options by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9961](https://togithub.com/pydantic/pydantic/pull/9961) - Add class name to "has conflict" warnings by [@​msabramo](https://togithub.com/msabramo) in [#​9964](https://togithub.com/pydantic/pydantic/pull/9964) - Fix `dataclass` ignoring `default_factory` passed in Annotated by [@​kc0506](https://togithub.com/kc0506) in [#​9971](https://togithub.com/pydantic/pydantic/pull/9971) - Fix `Sequence` ignoring `discriminator` by [@​kc0506](https://togithub.com/kc0506) in [#​9980](https://togithub.com/pydantic/pydantic/pull/9980) - Fix typing for `IPvAnyAddress` and `IPvAnyInterface` by [@​haoyun](https://togithub.com/haoyun) in [#​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 [@​radekwlsk](https://togithub.com/radekwlsk) in [#​9938](https://togithub.com/pydantic/pydantic/pull/9938) - Apply `strict=True` to `__init__` in `mypy` plugin by [@​kc0506](https://togithub.com/kc0506) in [#​9998](https://togithub.com/pydantic/pydantic/pull/9998) - Refactor application of `deque` annotations by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10018](https://togithub.com/pydantic/pydantic/pull/10018) - Raise a better user error when failing to evaluate a forward reference by [@​Viicos](https://togithub.com/Viicos) in [#​10030](https://togithub.com/pydantic/pydantic/pull/10030) - Fix evaluation of `__pydantic_extra__` annotation in specific circumstances by [@​Viicos](https://togithub.com/Viicos) in [#​10070](https://togithub.com/pydantic/pydantic/pull/10070) - Fix `frozen` enforcement for `dataclasses` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10066](https://togithub.com/pydantic/pydantic/pull/10066) - Remove logic to handle unused `__get_pydantic_core_schema__` signature by [@​Viicos](https://togithub.com/Viicos) in [#​10075](https://togithub.com/pydantic/pydantic/pull/10075) - Use `is_annotated` consistently by [@​Viicos](https://togithub.com/Viicos) in [#​10095](https://togithub.com/pydantic/pydantic/pull/10095) - Fix `PydanticDeprecatedSince26` typo by [@​kc0506](https://togithub.com/kc0506) in [#​10101](https://togithub.com/pydantic/pydantic/pull/10101) - Improve `pyright` tests, refactor model decorators signatures by [@​Viicos](https://togithub.com/Viicos) in [#​10092](https://togithub.com/pydantic/pydantic/pull/10092) - Fix `ip` serialization logic by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10112](https://togithub.com/pydantic/pydantic/pull/10112) - Warn when frozen defined twice for `dataclasses` by [@​mochi22](https://togithub.com/mochi22) in [#​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 [@​Viicos](https://togithub.com/Viicos) in [#​10121](https://togithub.com/pydantic/pydantic/pull/10121) - Fix `ImportString` special cases by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10137](https://togithub.com/pydantic/pydantic/pull/10137) - Blacklist default globals to support exotic user code with `__` prefixed annotations by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10136](https://togithub.com/pydantic/pydantic/pull/10136) - Handle `nullable` schemas with `serialization` schema available during JSON Schema generation by [@​Viicos](https://togithub.com/Viicos) in [#​10132](https://togithub.com/pydantic/pydantic/pull/10132) - Reorganize `BaseModel` annotations by [@​kc0506](https://togithub.com/kc0506) in [#​10110](https://togithub.com/pydantic/pydantic/pull/10110) - Fix core schema simplification when serialization schemas are involved in specific scenarios by [@​Viicos](https://togithub.com/Viicos) in [#​10155](https://togithub.com/pydantic/pydantic/pull/10155) - Add support for stringified annotations when using `PrivateAttr` with `Annotated` by [@​Viicos](https://togithub.com/Viicos) in [#​10157](https://togithub.com/pydantic/pydantic/pull/10157) - Fix JSON Schema `number` type for literal and enum schemas by [@​Viicos](https://togithub.com/Viicos) in [#​10172](https://togithub.com/pydantic/pydantic/pull/10172) - Fix JSON Schema generation of fields with plain validators in serialization mode by [@​Viicos](https://togithub.com/Viicos) in [#​10167](https://togithub.com/pydantic/pydantic/pull/10167) - Fix invalid JSON Schemas being generated for functions in certain scenarios by [@​Viicos](https://togithub.com/Viicos) in [#​10188](https://togithub.com/pydantic/pydantic/pull/10188) - Make sure generated JSON Schemas are valid in tests by [@​Viicos](https://togithub.com/Viicos) in [#​10182](https://togithub.com/pydantic/pydantic/pull/10182) - Fix key error with custom serializer by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10200](https://togithub.com/pydantic/pydantic/pull/10200) - Add 'wss' for allowed schemes in NatsDsn by [@​swelborn](https://togithub.com/swelborn) in [#​10224](https://togithub.com/pydantic/pydantic/pull/10224) - Fix `Mapping` and `MutableMapping` annotations to use mapping schema instead of dict schema by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10020](https://togithub.com/pydantic/pydantic/pull/10020) - Fix JSON Schema generation for constrained dates by [@​Viicos](https://togithub.com/Viicos) in [#​10185](https://togithub.com/pydantic/pydantic/pull/10185) - Fix discriminated union bug regression when using enums by [@​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 [@​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 [@​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 [@​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 [@​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 [@​mgorny](https://togithub.com/mgorny) in [#​10241](https://togithub.com/pydantic/pydantic/pull/10241) - Fix a crash when cleaning the namespace in `ModelMetaclass` by [@​Viicos](https://togithub.com/Viicos) in [#​10242](https://togithub.com/pydantic/pydantic/pull/10242) - Fix parent namespace issue with model rebuilds by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10257](https://togithub.com/pydantic/pydantic/pull/10257) - Remove defaults filter for namespace by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10261](https://togithub.com/pydantic/pydantic/pull/10261) - Use identity instead of equality after validating model in `__init__` by [@​Viicos](https://togithub.com/Viicos) in [#​10264](https://togithub.com/pydantic/pydantic/pull/10264) - Support `BigInt` serialization for `int` subclasses by [@​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 [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10277](https://togithub.com/pydantic/pydantic/pull/10277) - Ensure `__pydantic_complete__` is set when rebuilding `dataclasses` by [@​Viicos](https://togithub.com/Viicos) in [#​10291](https://togithub.com/pydantic/pydantic/pull/10291) - Respect `schema_generator` config value in `TypeAdapter` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​10300](https://togithub.com/pydantic/pydantic/pull/10300) ##### New Contributors ##### `pydantic` - [@​kwint](https://togithub.com/kwint) made their first contribution in [#​9787](https://togithub.com/pydantic/pydantic/pull/9787) - [@​seekinginfiniteloop](https://togithub.com/seekinginfiniteloop) made their first contribution in [#​9822](https://togithub.com/pydantic/pydantic/pull/9822) - [@​a-alexander](https://togithub.com/a-alexander) made their first contribution in [#​9848](https://togithub.com/pydantic/pydantic/pull/9848) - [@​maximilianfellhuber](https://togithub.com/maximilianfellhuber) made their first contribution in [#​9885](https://togithub.com/pydantic/pydantic/pull/9885) - [@​karmaBonfire](https://togithub.com/karmaBonfire) made their first contribution in [#​9945](https://togithub.com/pydantic/pydantic/pull/9945) - [@​s-rigaud](https://togithub.com/s-rigaud) made their first contribution in [#​9958](https://togithub.com/pydantic/pydantic/pull/9958) - [@​msabramo](https://togithub.com/msabramo) made their first contribution in [#​9964](https://togithub.com/pydantic/pydantic/pull/9964) - [@​DimaCybr](https://togithub.com/DimaCybr) made their first contribution in [#​9972](https://togithub.com/pydantic/pydantic/pull/9972) - [@​kc0506](https://togithub.com/kc0506) made their first contribution in [#​9971](https://togithub.com/pydantic/pydantic/pull/9971) - [@​haoyun](https://togithub.com/haoyun) made their first contribution in [#​9990](https://togithub.com/pydantic/pydantic/pull/9990) - [@​radekwlsk](https://togithub.com/radekwlsk) made their first contribution in [#​9938](https://togithub.com/pydantic/pydantic/pull/9938) - [@​dpeachey](https://togithub.com/dpeachey) made their first contribution in [#​10029](https://togithub.com/pydantic/pydantic/pull/10029) - [@​BoxyUwU](https://togithub.com/BoxyUwU) made their first contribution in [#​10085](https://togithub.com/pydantic/pydantic/pull/10085) - [@​mochi22](https://togithub.com/mochi22) made their first contribution in [#​10082](https://togithub.com/pydantic/pydantic/pull/10082) - [@​aditkumar72](https://togithub.com/aditkumar72) made their first contribution in [#​10128](https://togithub.com/pydantic/pydantic/pull/10128) - [@​changhc](https://togithub.com/changhc) made their first contribution in [#​9654](https://togithub.com/pydantic/pydantic/pull/9654) - [@​insumanth](https://togithub.com/insumanth) made their first contribution in [#​10229](https://togithub.com/pydantic/pydantic/pull/10229) - [@​AdolfoVillalobos](https://togithub.com/AdolfoVillalobos) made their first contribution in [#​10240](https://togithub.com/pydantic/pydantic/pull/10240) - [@​bllchmbrs](https://togithub.com/bllchmbrs) made their first contribution in [#​10270](https://togithub.com/pydantic/pydantic/pull/10270) ##### `pydantic-core` - [@​kfreezen](https://togithub.com/kfreezen) made their first contribution in [pydantic/pydantic-core#1286](https://togithub.com/pydantic/pydantic-core/pull/1286) - [@​tinez](https://togithub.com/tinez) made their first contribution in [pydantic/pydantic-core#1368](https://togithub.com/pydantic/pydantic-core/pull/1368) - [@​fft001](https://togithub.com/fft001) made their first contribution in [pydantic/pydantic-core#1362](https://togithub.com/pydantic/pydantic-core/pull/1362) - [@​nix010](https://togithub.com/nix010) made their first contribution in [pydantic/pydantic-core#1349](https://togithub.com/pydantic/pydantic-core/pull/1349) - [@​BoxyUwU](https://togithub.com/BoxyUwU) made their first contribution in [pydantic/pydantic-core#1379](https://togithub.com/pydantic/pydantic-core/pull/1379) - [@​candleindark](https://togithub.com/candleindark) made their first contribution in [pydantic/pydantic-core#1404](https://togithub.com/pydantic/pydantic-core/pull/1404) - [@​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 [@​dmontagu](https://togithub.com/dmontagu) in [#​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 [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9801](https://togithub.com/pydantic/pydantic/pull/9801) - Bump `pydantic-core` to `v2.20.1`, `pydantic-extra-types` to `v2.9.0` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9832](https://togithub.com/pydantic/pydantic/pull/9832) ##### Fixes - Fix breaking change in `to_snake` from v2.7 -> v2.8 by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9812](https://togithub.com/pydantic/pydantic/pull/9812) - Fix list constraint json schema application by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9818](https://togithub.com/pydantic/pydantic/pull/9818) - Support time duration more than 23 by [@​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 [@​davidhewitt](https://togithub.com/davidhewitt) in [pydantic/speedate#65](https://togithub.com/pydantic/speedate/pull/65) - Handle negative fractional durations correctly by [@​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 [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9673](https://togithub.com/pydantic/pydantic/pull/9673) - Bump pyright to `v1.1.367` and add type checking tests for pipeline API by [@​adriangb](https://togithub.com/adriangb) in [#​9674](https://togithub.com/pydantic/pydantic/pull/9674) - Update `pydantic.v1` stub to `v1.10.17` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9707](https://togithub.com/pydantic/pydantic/pull/9707) - General package updates to prep for `v2.8.0b1` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9741](https://togithub.com/pydantic/pydantic/pull/9741) - Bump `pydantic-core` to `v2.20.0` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9745](https://togithub.com/pydantic/pydantic/pull/9745) - Add support for Python 3.13 by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9743](https://togithub.com/pydantic/pydantic/pull/9743) - Update `pdm` version used for `pdm.lock` to v2.16.1 by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9761](https://togithub.com/pydantic/pydantic/pull/9761) - Update to `ruff` `v0.4.8` by [@​Viicos](https://togithub.com/Viicos) in [#​9585](https://togithub.com/pydantic/pydantic/pull/9585) ##### New Features - Experimental: support `defer_build` for `TypeAdapter` by [@​MarkusSintonen](https://togithub.com/MarkusSintonen) in [#​8939](https://togithub.com/pydantic/pydantic/pull/8939) - Implement `deprecated` field in json schema by [@​NeevCohen](https://togithub.com/NeevCohen) in [#​9298](https://togithub.com/pydantic/pydantic/pull/9298) - Experimental: Add pipeline API by [@​adriangb](https://togithub.com/adriangb) in [#​9459](https://togithub.com/pydantic/pydantic/pull/9459) - Add support for programmatic title generation by [@​NeevCohen](https://togithub.com/NeevCohen) in [#​9183](https://togithub.com/pydantic/pydantic/pull/9183) - Implement `fail_fast` feature by [@​uriyyo](https://togithub.com/uriyyo) in [#​9708](https://togithub.com/pydantic/pydantic/pull/9708) - Add `ser_json_inf_nan='strings'` mode to produce valid JSON by [@​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 [@​nix010](https://togithub.com/nix010) in [#​9170](https://togithub.com/pydantic/pydantic/pull/9170) - Support serialization of some serializable defaults in JSON schema by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9624](https://togithub.com/pydantic/pydantic/pull/9624) - Relax type specification for `__validators__` values in `create_model` by [@​sydney-runkle](https://togithub.com/sydney-runkle) in [#​9697](https://togithub.com/pydantic/pydantic/pull/9697) - **Breaking Change:** Improve `smart` union matching logic by [@​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 [@​misrasaurabh1](https://togithub.com/misrasaurabh1) in [#​9653](https://togithub.com/pydantic/pydantic/pull/9653) - ⚡️ Speed up `_get_all_json_refs()` by 34% in `pydantic/json_schema.py` by [@​misrasaurabh1](https://togithub.com/misrasaurabh1) in [#​9650](https://togithub.com/pydantic/pydantic/pull/9650) - ⚡️ Speed up `is_pydantic_dataclass()` by 41% in `pydantic/dataclasses.py` by [@​misrasaurabh1](https://togithub.com/misrasaurabh1) in [#​9652](https://togithub.com/pydantic/pydantic/pull/9652) - ⚡️ Speed up `to_snake()` by 27% in `pydantic/alias_generators.py` by [@​misrasaurabh1](https://togithub.com/misrasaurabh1) in [#​9747](https://togithub.com/pydantic/pydantic/pull/9747) - ⚡️ Speed up `unwrap_wrapped_function()` by 93% in `pydantic/_internal/_decorators.py` by [@​misrasaurabh1](https://togithub.com/misrasaurabh1) in [#​9727](https://togithub.com/pydantic/pydantic/pull/9727) ##### Fixes - Replace `__spec__.parent` with `__package__` by [@​hramezani](https://togithub.com/hramezani) in [#​9331](https://togithub.com/pydantic/pydantic/pull/9331) - Fix Outputted Model JSON Schema for `Sequence` type by [@​anesmemisevic](https://togithub.com/anesmemisevic) in [#​9303](https://togithub.com/pydantic/pydantic/pull/9303) - Fix typing of `_frame_depth` by [@​Viicos](https://togithub.com/Viicos) in [#​9353](https://togithub.com/pydantic/pydantic/pull/9353) - Make `ImportString` json schema compatible by [@​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==-->
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.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.