🐛 Make FieldInfoMetadata hashable to fix Annotated type usage in sets#1889
🐛 Make FieldInfoMetadata hashable to fix Annotated type usage in sets#1889Yuerchu wants to merge 3 commits intofastapi:mainfrom
FieldInfoMetadata hashable to fix Annotated type usage in sets#1889Conversation
…sets Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Could you please add the test that fails on |
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
Added 3 test cases in
Tests 1 and 2 fail on |
|
Not exactly what I meant) |
Instead of @dataclass(frozen=True)
class FieldInfoMetadata:
... |
Description
FieldInfoMetadatais a plain@dataclasswith implicit__eq__, which causes Python to set__hash__toNone. WhenFieldInfoMetadatainstances are used as metadata insidetyping.Annotatedtypes,Annotated.__hash__fails because it callshash((origin, metadata_tuple))and theFieldInfoMetadataelement is unhashable.This breaks FastAPI's OpenAPI schema generation in
get_definitions(), which collects field annotations into aset:Fix
Add
unsafe_hash=Trueto the@dataclassdecorator. This is safe becauseFieldInfoMetadatainstances are effectively immutable after construction — they are created once during model class definition and never mutated afterward.Reproduction
Any project using custom
Annotatedfield types withFieldInfoMetadatain the metadata (e.g. viasqlmodel_extor similar libraries) will fail to generate/openapi.jsonwith:🤖 Generated with Claude Code