From 468c1437e6ad0efcfb25c6e95fca76d215bafcd7 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci-lite[bot]" <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Date: Fri, 5 Dec 2025 21:37:31 +0000 Subject: [PATCH] =?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/applications.py | 15 +++++++++------ fastapi/dependencies/utils.py | 15 +++++++-------- fastapi/exception_handlers.py | 6 +++++- fastapi/exceptions.py | 3 ++- main.py | 6 ++---- 5 files changed, 25 insertions(+), 20 deletions(-) diff --git a/fastapi/applications.py b/fastapi/applications.py index bd6ad8988..889e14c93 100644 --- a/fastapi/applications.py +++ b/fastapi/applications.py @@ -18,11 +18,15 @@ from fastapi import routing from fastapi.datastructures import Default, DefaultPlaceholder from fastapi.exception_handlers import ( http_exception_handler, + request_entity_too_large_exception_handler, request_validation_exception_handler, websocket_request_validation_exception_handler, - request_entity_too_large_exception_handler, ) -from fastapi.exceptions import RequestValidationError, WebSocketRequestValidationError, RequestEntityTooLarge +from fastapi.exceptions import ( + RequestEntityTooLarge, + RequestValidationError, + WebSocketRequestValidationError, +) from fastapi.logger import logger from fastapi.middleware.asyncexitstack import AsyncExitStackMiddleware from fastapi.openapi.docs import ( @@ -994,10 +998,9 @@ class FastAPI(Starlette): websocket_request_validation_exception_handler, # type: ignore ) self.exception_handlers.setdefault( - RequestEntityTooLarge, - request_entity_too_large_exception_handler, - ) - + RequestEntityTooLarge, + request_entity_too_large_exception_handler, + ) self.user_middleware: List[Middleware] = ( [] if middleware is None else list(middleware) diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py index 19f3dbbca..7f63210ce 100644 --- a/fastapi/dependencies/utils.py +++ b/fastapi/dependencies/utils.py @@ -36,7 +36,6 @@ from fastapi._compat import ( get_annotation_from_field_info, get_cached_model_fields, get_missing_field_error, - is_bytes_field, is_bytes_sequence_field, is_scalar_field, is_scalar_sequence_field, @@ -883,6 +882,7 @@ def _should_embed_body_fields(fields: List[ModelField]) -> bool: from fastapi.exceptions import RequestEntityTooLarge + async def _extract_form_body( body_fields: List[ModelField], received_body: FormData, @@ -892,11 +892,10 @@ async def _extract_form_body( for field in body_fields: value = _get_multidict_value(field, received_body) field_info = field.field_info - if ( - isinstance(field_info, (params.File, temp_pydantic_v1_params.File)) - and isinstance(value, UploadFile) - ): - #If a file size limit is defined through max_size + if isinstance( + field_info, (params.File, temp_pydantic_v1_params.File) + ) and isinstance(value, UploadFile): + # If a file size limit is defined through max_size max_size = getattr(field_info, "max_size", None) if max_size is not None: CHUNK = 8192 @@ -910,8 +909,8 @@ async def _extract_form_body( total += len(chunk) if total > max_size: raise RequestEntityTooLarge( - f"Uploaded file '{field.alias}' exceeded max size={max_size} bytes" - ) + f"Uploaded file '{field.alias}' exceeded max size={max_size} bytes" + ) content.extend(chunk) value = bytes(content) else: diff --git a/fastapi/exception_handlers.py b/fastapi/exception_handlers.py index 9089658c3..dadbf2680 100644 --- a/fastapi/exception_handlers.py +++ b/fastapi/exception_handlers.py @@ -1,5 +1,8 @@ from fastapi.encoders import jsonable_encoder -from fastapi.exceptions import RequestValidationError, WebSocketRequestValidationError, RequestEntityTooLarge +from fastapi.exceptions import ( + RequestValidationError, + WebSocketRequestValidationError, +) from fastapi.utils import is_body_allowed_for_status_code from fastapi.websockets import WebSocket from starlette.exceptions import HTTPException @@ -14,6 +17,7 @@ async def request_entity_too_large_exception_handler(request, exc: Exception): content={"detail": str(exc) or "Uploaded file too large"}, ) + async def http_exception_handler(request: Request, exc: HTTPException) -> Response: headers = getattr(exc, "headers", None) if not is_body_allowed_for_status_code(exc.status_code): diff --git a/fastapi/exceptions.py b/fastapi/exceptions.py index 215cc0b72..e922ed948 100644 --- a/fastapi/exceptions.py +++ b/fastapi/exceptions.py @@ -183,7 +183,8 @@ class ResponseValidationError(ValidationException): message += f" {err}\n" return message + class RequestEntityTooLarge(Exception): """Raised when uploaded content exceeds the configured max_size.""" - pass + pass diff --git a/main.py b/main.py index 2d025ac83..970698837 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,6 @@ from typing import Union -from fastapi import FastAPI, UploadFile, File +from fastapi import FastAPI, File, UploadFile from pydantic import BaseModel app = FastAPI() @@ -30,7 +30,7 @@ def update_item(item_id: int, item: Item): @app.post("/upload") async def upload_file(file: UploadFile = File(max_size=500)): total_bytes = 0 - + # Safest: process in chunks instead of reading whole file while True: chunk = await file.read(1024 * 1024) # 1MB @@ -39,5 +39,3 @@ async def upload_file(file: UploadFile = File(max_size=500)): total_bytes += len(chunk) return {"filename": file.filename, "size": total_bytes} - -