diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py index dc5a06363..687cd42e0 100644 --- a/fastapi/dependencies/utils.py +++ b/fastapi/dependencies/utils.py @@ -499,7 +499,7 @@ def analyze_param( f" {param_name!r}" ) elif ( - isinstance(field_info, params.Param) + isinstance(field_info, (params.Param, _params_v1.Param)) and getattr(field_info, "in_", None) is None ): field_info.in_ = params.ParamTypes.query @@ -508,7 +508,7 @@ def analyze_param( field_info, param_name, ) - if isinstance(field_info, params.Form): + if isinstance(field_info, (params.Form, _params_v1.Form)): ensure_multipart_is_installed() if not field_info.alias and getattr(field_info, "convert_underscores", None): alias = param_name.replace("_", "-") @@ -527,7 +527,7 @@ def analyze_param( assert is_scalar_field(field=field), ( "Path params must be of one of the supported types" ) - elif isinstance(field_info, params.Query): + elif isinstance(field_info, (params.Query, _params_v1.Query)): assert ( is_scalar_field(field) or is_scalar_sequence_field(field) @@ -754,7 +754,7 @@ def _get_multidict_value( if ( value is None or ( - isinstance(field.field_info, params.Form) + isinstance(field.field_info, (params.Form, _params_v1.Form)) and isinstance(value, str) # For type checks and value == "" ) @@ -899,14 +899,14 @@ async def _extract_form_body( value = _get_multidict_value(field, received_body) field_info = field.field_info if ( - isinstance(field_info, params.File) + isinstance(field_info, (params.File, _params_v1.File)) and is_bytes_field(field) and isinstance(value, UploadFile) ): value = await value.read() elif ( is_bytes_sequence_field(field) - and isinstance(field_info, params.File) + and isinstance(field_info, (params.File, _params_v1.File)) and value_is_sequence(value) ): # For types @@ -1012,8 +1012,18 @@ def get_body_field( BodyFieldInfo_kwargs["default"] = None if any(isinstance(f.field_info, params.File) for f in flat_dependant.body_params): BodyFieldInfo: Type[params.Body] = params.File - elif any(isinstance(f.field_info, params.Form) for f in flat_dependant.body_params): + elif any( + isinstance(f.field_info, _params_v1.File) for f in flat_dependant.body_params + ): + BodyFieldInfo: Type[_params_v1.Body] = _params_v1.File + elif any( + isinstance(f.field_info, params.Form) for f in flat_dependant.body_params + ): BodyFieldInfo = params.Form + elif any( + isinstance(f.field_info, _params_v1.Form) for f in flat_dependant.body_params + ): + BodyFieldInfo = _params_v1.Form else: if annotation_is_pydantic_v1(BodyModel): BodyFieldInfo = _params_v1.Body # type: ignore[assignment] diff --git a/fastapi/routing.py b/fastapi/routing.py index 65f739d95..a900a0037 100644 --- a/fastapi/routing.py +++ b/fastapi/routing.py @@ -31,6 +31,7 @@ from fastapi._compat import ( _get_model_config, _model_dump, _normalize_errors, + _params_v1, lenient_issubclass, ) from fastapi.datastructures import Default, DefaultPlaceholder @@ -307,7 +308,9 @@ def get_request_handler( ) -> Callable[[Request], Coroutine[Any, Any, Response]]: assert dependant.call is not None, "dependant.call must be a function" is_coroutine = iscoroutinefunction(dependant.call) - is_body_form = body_field and isinstance(body_field.field_info, params.Form) + is_body_form = body_field and isinstance( + body_field.field_info, (params.Form, _params_v1.Form) + ) if isinstance(response_class, DefaultPlaceholder): actual_response_class: Type[Response] = response_class.value else: