From b818096198cbd7b9a3283d11fee15679947dc50f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Thu, 9 Oct 2025 14:31:55 +0200 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Update=20internal=20checks?= =?UTF-8?q?=20for=20types=20to=20include=20Pydantic=20v1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fastapi/dependencies/utils.py | 13 +++++++------ fastapi/utils.py | 6 +++++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py index e07d1ef88..dc5a06363 100644 --- a/fastapi/dependencies/utils.py +++ b/fastapi/dependencies/utils.py @@ -406,9 +406,10 @@ def analyze_param( field_info = copy_field_info( field_info=fastapi_annotation, annotation=use_annotation ) - assert ( - field_info.default is Undefined or field_info.default is RequiredParam - ), ( + assert field_info.default in { + Undefined, + v1.Undefined, + } or field_info.default in {RequiredParam, v1.RequiredParam}, ( f"`{field_info.__class__.__name__}` default value cannot be set in" f" `Annotated` for {param_name!r}. Set the default value with `=` instead." ) @@ -493,7 +494,7 @@ def analyze_param( if field_info is not None: # Handle field_info.in_ if is_path_param: - assert isinstance(field_info, params.Path), ( + assert isinstance(field_info, (params.Path, _params_v1.Path)), ( f"Cannot use `{field_info.__class__.__name__}` for path param" f" {param_name!r}" ) @@ -819,7 +820,7 @@ def request_params_to_args( if single_not_embedded_field: field_info = first_field.field_info - assert isinstance(field_info, params.Param), ( + assert isinstance(field_info, (params.Param, _params_v1.Param)), ( "Params must be subclasses of Param" ) loc: Tuple[str, ...] = (field_info.in_.value,) @@ -831,7 +832,7 @@ def request_params_to_args( for field in fields: value = _get_multidict_value(field, received_params) field_info = field.field_info - assert isinstance(field_info, params.Param), ( + assert isinstance(field_info, (params.Param, _params_v1.Param)), ( "Params must be subclasses of Param" ) loc = (field_info.in_.value, field.alias) diff --git a/fastapi/utils.py b/fastapi/utils.py index 8402d8e19..3ea9271b1 100644 --- a/fastapi/utils.py +++ b/fastapi/utils.py @@ -100,7 +100,11 @@ def create_model_field( "alias": alias, } - if annotation_is_pydantic_v1(type_) or version == "1": + if ( + annotation_is_pydantic_v1(type_) + or isinstance(field_info, v1.FieldInfo) + or version == "1" + ): try: return v1.ModelField(**v1_kwargs) # type: ignore[no-any-return] except RuntimeError: