From 5b11c6dc1891e8012eed99a7e959eb692aaae4cb Mon Sep 17 00:00:00 2001 From: Evgeny Bokshitsky Date: Sun, 26 Oct 2025 21:28:49 +0400 Subject: [PATCH 1/6] =?UTF-8?q?=F0=9F=94=A8=20remove=20unused=20variable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fastapi/routing.py | 1 - 1 file changed, 1 deletion(-) diff --git a/fastapi/routing.py b/fastapi/routing.py index 9ca2f46732..093fc9a593 100644 --- a/fastapi/routing.py +++ b/fastapi/routing.py @@ -337,7 +337,6 @@ def get_request_handler( raise http_error from e # Solve dependencies and run path operation function, auto-closing dependencies - errors: list[Any] = [] async_exit_stack = request.scope.get("fastapi_inner_astack") assert isinstance(async_exit_stack, AsyncExitStack), ( "fastapi_inner_astack not found in request scope" From 6b99c52c8970315772825c614548f8d6a270fafd Mon Sep 17 00:00:00 2001 From: Evgeny Bokshitsky Date: Sun, 26 Oct 2025 21:34:23 +0400 Subject: [PATCH 2/6] =?UTF-8?q?=F0=9F=94=A8=20simplify=20code,=20use=20les?= =?UTF-8?q?s=20nesting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fastapi/routing.py | 82 ++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 43 deletions(-) diff --git a/fastapi/routing.py b/fastapi/routing.py index 093fc9a593..0432bdbcc0 100644 --- a/fastapi/routing.py +++ b/fastapi/routing.py @@ -350,53 +350,49 @@ def get_request_handler( embed_body_fields=embed_body_fields, ) errors = solved_result.errors - if not errors: - raw_response = await run_endpoint_function( - dependant=dependant, - values=solved_result.values, - is_coroutine=is_coroutine, - ) - if isinstance(raw_response, Response): - if raw_response.background is None: - raw_response.background = solved_result.background_tasks - response = raw_response - else: - response_args: dict[str, Any] = { - "background": solved_result.background_tasks - } - # If status_code was set, use it, otherwise use the default from the - # response class, in the case of redirect it's 307 - current_status_code = ( - status_code if status_code else solved_result.response.status_code - ) - if current_status_code is not None: - response_args["status_code"] = current_status_code - if solved_result.response.status_code: - response_args["status_code"] = solved_result.response.status_code - content = await serialize_response( - field=response_field, - response_content=raw_response, - include=response_model_include, - exclude=response_model_exclude, - by_alias=response_model_by_alias, - exclude_unset=response_model_exclude_unset, - exclude_defaults=response_model_exclude_defaults, - exclude_none=response_model_exclude_none, - is_coroutine=is_coroutine, - endpoint_ctx=endpoint_ctx, - ) - response = actual_response_class(content, **response_args) - if not is_body_allowed_for_status_code(response.status_code): - response.body = b"" - response.headers.raw.extend(solved_result.response.headers.raw) if errors: - validation_error = RequestValidationError( + raise RequestValidationError( errors, body=body, endpoint_ctx=endpoint_ctx ) - raise validation_error - # Return response - assert response + raw_response = await run_endpoint_function( + dependant=dependant, + values=solved_result.values, + is_coroutine=is_coroutine, + ) + if isinstance(raw_response, Response): + if raw_response.background is None: + raw_response.background = solved_result.background_tasks + return raw_response + + response_args: Dict[str, Any] = { + "background": solved_result.background_tasks + } + # If status_code was set, use it, otherwise use the default from the + # response class, in the case of redirect it's 307 + current_status_code = ( + status_code if status_code else solved_result.response.status_code + ) + if current_status_code is not None: + response_args["status_code"] = current_status_code + if solved_result.response.status_code: + response_args["status_code"] = solved_result.response.status_code + content = await serialize_response( + field=response_field, + response_content=raw_response, + include=response_model_include, + exclude=response_model_exclude, + by_alias=response_model_by_alias, + exclude_unset=response_model_exclude_unset, + exclude_defaults=response_model_exclude_defaults, + exclude_none=response_model_exclude_none, + is_coroutine=is_coroutine, + endpoint_ctx=endpoint_ctx, + ) + response = actual_response_class(content, **response_args) + if not is_body_allowed_for_status_code(response.status_code): + response.body = b"" + response.headers.raw.extend(solved_result.response.headers.raw) return response return app From 325d0d817dcb870c0afe00be31dd19c5ec955498 Mon Sep 17 00:00:00 2001 From: Evgeny Bokshitsky Date: Sun, 26 Oct 2025 21:49:39 +0400 Subject: [PATCH 3/6] =?UTF-8?q?=F0=9F=94=A8=20rewrite=20status=5Fcode=20se?= =?UTF-8?q?lect=20logic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fastapi/routing.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/fastapi/routing.py b/fastapi/routing.py index 0432bdbcc0..488796ff25 100644 --- a/fastapi/routing.py +++ b/fastapi/routing.py @@ -370,13 +370,10 @@ def get_request_handler( } # If status_code was set, use it, otherwise use the default from the # response class, in the case of redirect it's 307 - current_status_code = ( - status_code if status_code else solved_result.response.status_code - ) - if current_status_code is not None: - response_args["status_code"] = current_status_code if solved_result.response.status_code: response_args["status_code"] = solved_result.response.status_code + elif status_code is not None: + response_args["status_code"] = status_code content = await serialize_response( field=response_field, response_content=raw_response, From 27b7ad009d48fb2920e04524fee0063a031b4ebb Mon Sep 17 00:00:00 2001 From: Evgeny Bokshitsky Date: Sun, 26 Oct 2025 22:22:32 +0400 Subject: [PATCH 4/6] =?UTF-8?q?=F0=9F=94=A8=20remove=20unused=20"response"?= =?UTF-8?q?=20variable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fastapi/routing.py | 1 - 1 file changed, 1 deletion(-) diff --git a/fastapi/routing.py b/fastapi/routing.py index 488796ff25..1eba16b597 100644 --- a/fastapi/routing.py +++ b/fastapi/routing.py @@ -269,7 +269,6 @@ def get_request_handler( actual_response_class = response_class async def app(request: Request) -> Response: - response: Union[Response, None] = None file_stack = request.scope.get("fastapi_middleware_astack") assert isinstance(file_stack, AsyncExitStack), ( "fastapi_middleware_astack not found in request scope" From 56e3ec5ed7bfff1b88694ca2a0591e3815e466e7 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci-lite[bot]" <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Date: Sat, 27 Dec 2025 19:46:40 +0000 Subject: [PATCH 5/6] =?UTF-8?q?=F0=9F=8E=A8=20Auto=20format?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fastapi/routing.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/fastapi/routing.py b/fastapi/routing.py index 1eba16b597..6f6d4aac2d 100644 --- a/fastapi/routing.py +++ b/fastapi/routing.py @@ -350,9 +350,7 @@ def get_request_handler( ) errors = solved_result.errors if errors: - raise RequestValidationError( - errors, body=body, endpoint_ctx=endpoint_ctx - ) + raise RequestValidationError(errors, body=body, endpoint_ctx=endpoint_ctx) raw_response = await run_endpoint_function( dependant=dependant, @@ -364,9 +362,7 @@ def get_request_handler( raw_response.background = solved_result.background_tasks return raw_response - response_args: Dict[str, Any] = { - "background": solved_result.background_tasks - } + response_args: Dict[str, Any] = {"background": solved_result.background_tasks} # If status_code was set, use it, otherwise use the default from the # response class, in the case of redirect it's 307 if solved_result.response.status_code: From 0a116bd8723407b9897d8b0cd4c68cf5b037378b Mon Sep 17 00:00:00 2001 From: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com> Date: Thu, 8 Jan 2026 12:54:04 +0100 Subject: [PATCH 6/6] Fix `Dict` -> `dict` --- fastapi/routing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fastapi/routing.py b/fastapi/routing.py index 6f6d4aac2d..dc05f38d30 100644 --- a/fastapi/routing.py +++ b/fastapi/routing.py @@ -362,7 +362,7 @@ def get_request_handler( raw_response.background = solved_result.background_tasks return raw_response - response_args: Dict[str, Any] = {"background": solved_result.background_tasks} + response_args: dict[str, Any] = {"background": solved_result.background_tasks} # If status_code was set, use it, otherwise use the default from the # response class, in the case of redirect it's 307 if solved_result.response.status_code: