lqs
d20566fe07
Some checks failed
Test / lint (push) Has been cancelled
Test / test (pydantic-v1, 3.10) (push) Has been cancelled
Test / test (pydantic-v1, 3.11) (push) Has been cancelled
Test / test (pydantic-v1, 3.12) (push) Has been cancelled
Test / test (pydantic-v1, 3.8) (push) Has been cancelled
Test / test (pydantic-v1, 3.9) (push) Has been cancelled
Test / test (pydantic-v2, 3.10) (push) Has been cancelled
Test / test (pydantic-v2, 3.11) (push) Has been cancelled
Test / test (pydantic-v2, 3.12) (push) Has been cancelled
Test / test (pydantic-v2, 3.8) (push) Has been cancelled
Test / test (pydantic-v2, 3.9) (push) Has been cancelled
Test / coverage-combine (push) Has been cancelled
Test / check (push) Has been cancelled
Issue Manager / issue-manager (push) Has been cancelled
Label Approved / label-approved (push) Has been cancelled
30 lines
932 B
Python
30 lines
932 B
Python
from typing import Callable, List
|
|
|
|
from fastapi import Body, FastAPI, HTTPException, Request, Response
|
|
from fastapi.exceptions import RequestValidationError
|
|
from fastapi.routing import APIRoute
|
|
|
|
|
|
class ValidationErrorLoggingRoute(APIRoute):
|
|
def get_route_handler(self) -> Callable:
|
|
original_route_handler = super().get_route_handler()
|
|
|
|
async def custom_route_handler(request: Request) -> Response:
|
|
try:
|
|
return await original_route_handler(request)
|
|
except RequestValidationError as exc:
|
|
body = await request.body()
|
|
detail = {"errors": exc.errors(), "body": body.decode()}
|
|
raise HTTPException(status_code=422, detail=detail)
|
|
|
|
return custom_route_handler
|
|
|
|
|
|
app = FastAPI()
|
|
app.router.route_class = ValidationErrorLoggingRoute
|
|
|
|
|
|
@app.post("/")
|
|
async def sum_numbers(numbers: List[int] = Body()):
|
|
return sum(numbers)
|