diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py index d71b53f2d..d5b8bd748 100644 --- a/fastapi/dependencies/utils.py +++ b/fastapi/dependencies/utils.py @@ -1,5 +1,5 @@ -import dataclasses import collections +import dataclasses import inspect import re import sys @@ -23,7 +23,7 @@ from typing import ( ) import anyio -from fastapi import params +from fastapi import params, temp_pydantic_v1_params from fastapi._compat import ( PYDANTIC_V2, ModelField, @@ -80,8 +80,6 @@ from starlette.responses import Response from starlette.websockets import WebSocket from typing_extensions import Annotated, Literal, get_args, get_origin -from .. import temp_pydantic_v1_params - multipart_not_installed_error = ( 'Form data requires "python-multipart" to be installed. \n' 'You can install "python-multipart" with: \n\n' @@ -762,12 +760,16 @@ class ParameterCodec: @staticmethod def decode( - field_info: params.Param, + field_info: Union[params.Param, temp_pydantic_v1_params.Param], received_params: Union[Mapping[str, Any], QueryParams, Headers], field: ModelField, ) -> Dict[str, Any]: fn: Callable[ - [params.Param, Union[Mapping[str, Any], QueryParams, Headers], ModelField], + [ + Union[params.Param, temp_pydantic_v1_params.Param], + Union[Mapping[str, Any], QueryParams, Headers], + ModelField, + ], Dict[str, Any], ] fn = getattr(ParameterCodec, f"decode_{field_info.style}") @@ -775,7 +777,7 @@ class ParameterCodec: @staticmethod def decode_deepObject( - field_info: params.Param, + field_info: Union[params.Param, temp_pydantic_v1_params.Param], received_params: Union[Mapping[str, Any], QueryParams, Headers], field: ModelField, ) -> Dict[str, Any]: diff --git a/fastapi/temp_pydantic_v1_params.py b/fastapi/temp_pydantic_v1_params.py index e41d71230..e8fe30e2c 100644 --- a/fastapi/temp_pydantic_v1_params.py +++ b/fastapi/temp_pydantic_v1_params.py @@ -59,6 +59,8 @@ class Param(FieldInfo): # type: ignore[misc] deprecated: Union[deprecated, str, bool, None] = None, include_in_schema: bool = True, json_schema_extra: Union[Dict[str, Any], None] = None, + style: str = _Unset, + explode: bool = _Unset, **extra: Any, ): if example is not _Unset: @@ -107,6 +109,8 @@ class Param(FieldInfo): # type: ignore[misc] use_kwargs = {k: v for k, v in kwargs.items() if v is not _Unset} super().__init__(**use_kwargs) + self.style = style + self.explode = explode def __repr__(self) -> str: return f"{self.__class__.__name__}({self.default})"