mirror of
https://github.com/fastapi/fastapi.git
synced 2025-12-30 17:50:39 -05:00
* 🌐 Refactor file structure to support internationalization * ✅ Update tests changed after i18n * 🔀 Merge Typer style from master * 🔧 Update MkConfig with Typer-styles * 🎨 Format mkdocs.yml with cannonical form * 🎨 Format mkdocs.yml * 🔧 Update MkDocs config * ➕ Add docs translation scripts dependencies * ✨ Add Typer scripts to handle translations * ✨ Add missing translation snippet to include * ✨ Update contributing docs, add docs for translations * 🙈 Add docs_build to gitignore * 🔧 Update scripts with new locations and docs scripts * 👷 Update docs deploy action with translations * 📝 Add note about languages not supported in the theme * ✨ Add first translation, for Spanish
30 lines
935 B
Python
30 lines
935 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)
|