Coverage for docs_src / custom_request_and_route / tutorial002_an_py310.py: 100%
21 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-04-06 01:24 +0000
« prev ^ index » next coverage.py v7.13.3, created at 2026-04-06 01:24 +0000
1from collections.abc import Callable 1abcde
2from typing import Annotated 1abcde
4from fastapi import Body, FastAPI, HTTPException, Request, Response 1abcde
5from fastapi.exceptions import RequestValidationError 1abcde
6from fastapi.routing import APIRoute 1abcde
9class ValidationErrorLoggingRoute(APIRoute): 1abcde
10 def get_route_handler(self) -> Callable: 1abcde
11 original_route_handler = super().get_route_handler() 1abcde
13 async def custom_route_handler(request: Request) -> Response: 1abcde
14 try: 1jfkglhmi
15 return await original_route_handler(request) 1jfkglhmi
16 except RequestValidationError as exc: 1fghi
17 body = await request.body() 1fghi
18 detail = {"errors": exc.errors(), "body": body.decode()} 1fghi
19 raise HTTPException(status_code=422, detail=detail) 1fghi
21 return custom_route_handler 1abcde
24app = FastAPI() 1abcde
25app.router.route_class = ValidationErrorLoggingRoute 1abcde
28@app.post("/") 1abcde
29async def sum_numbers(numbers: Annotated[list[int], Body()]): 1abcde
30 return sum(numbers) 1jklm