From: Victorien <65306057+Viicos@users.noreply.github.com> Date: Fri, 28 Feb 2025 15:15:02 +0000 (+0100) Subject: ♻️ Update internal annotation usage for compatibilty with Pydantic 2.11 (#13314) X-Git-Tag: 0.115.10~3 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=15dd2b67d3f8763d5cd523b79a1c901c05d48bd7;p=thirdparty%2Ffastapi%2Ffastapi.git ♻️ Update internal annotation usage for compatibilty with Pydantic 2.11 (#13314) Co-authored-by: Sofie Van Landeghem Co-authored-by: svlandeg --- diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py index e2866b4889..09dd6f1b92 100644 --- a/fastapi/dependencies/utils.py +++ b/fastapi/dependencies/utils.py @@ -449,15 +449,15 @@ def analyze_param( # We might check here that `default_value is RequiredParam`, but the fact is that the same # parameter might sometimes be a path parameter and sometimes not. See # `tests/test_infer_param_optionality.py` for an example. - field_info = params.Path(annotation=use_annotation) + field_info = params.Path(annotation=type_annotation) elif is_uploadfile_or_nonable_uploadfile_annotation( type_annotation ) or is_uploadfile_sequence_annotation(type_annotation): - field_info = params.File(annotation=use_annotation, default=default_value) + field_info = params.File(annotation=type_annotation, default=default_value) elif not field_annotation_is_scalar(annotation=type_annotation): - field_info = params.Body(annotation=use_annotation, default=default_value) + field_info = params.Body(annotation=type_annotation, default=default_value) else: - field_info = params.Query(annotation=use_annotation, default=default_value) + field_info = params.Query(annotation=type_annotation, default=default_value) field = None # It's a field_info, not a dependency diff --git a/tests/test_analyze_param.py b/tests/test_analyze_param.py new file mode 100644 index 0000000000..9fd3fa6d07 --- /dev/null +++ b/tests/test_analyze_param.py @@ -0,0 +1,22 @@ +from inspect import signature + +from fastapi.dependencies.utils import ParamDetails, analyze_param +from pydantic import Field +from typing_extensions import Annotated + +from .utils import needs_pydanticv2 + + +def func(user: Annotated[int, Field(strict=True)]): ... + + +@needs_pydanticv2 +def test_analyze_param(): + result = analyze_param( + param_name="user", + annotation=signature(func).parameters["user"].annotation, + value=object(), + is_path_param=False, + ) + assert isinstance(result, ParamDetails) + assert result.field.field_info.annotation is int