From 09bba353aeb229d85365c28e7c7d844fa0e4c154 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Wed, 8 Oct 2025 10:40:09 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Update=20getting=20model?= =?UTF-8?q?=20types=20from=20annotations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fastapi/_compat/v2.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/fastapi/_compat/v2.py b/fastapi/_compat/v2.py index b000679a5..eb5543fc9 100644 --- a/fastapi/_compat/v2.py +++ b/fastapi/_compat/v2.py @@ -399,13 +399,14 @@ def get_flat_models_from_model( def get_flat_models_from_annotation( - annotation: Any, known_models: Union[TypeModelSet, None] = None + annotation: Any, known_models: TypeModelSet ) -> TypeModelSet: - known_models = known_models or set() origin = get_origin(annotation) if origin is not None: for arg in get_args(annotation): if lenient_issubclass(arg, (BaseModel, Enum)) and arg not in known_models: + if arg in known_models: + continue known_models.add(arg) if lenient_issubclass(arg, BaseModel): get_flat_models_from_model(arg, known_models=known_models) @@ -425,6 +426,8 @@ def get_flat_models_from_field( get_flat_models_from_model(field_type, known_models=known_models) elif lenient_issubclass(field_type, Enum): known_models.add(field_type) + else: + get_flat_models_from_annotation(field_type, known_models=known_models) return known_models