fastapi/docs_src/handling_errors/tutorial008_py310.py

53 lines
1.2 KiB
Python

from fastapi import APIRouter, FastAPI, Request
from fastapi.responses import JSONResponse
class UnicornException(Exception):
def __init__(self, name: str):
self.name = name
app = FastAPI()
@app.exception_handler(UnicornException)
async def global_unicorn_exception_handler(request: Request, exc: UnicornException):
return JSONResponse(
status_code=418,
content={"message": f"Global handler: {exc.name} did something."},
)
magic_router = APIRouter(prefix="/magic")
@magic_router.get("/unicorns/{name}")
async def read_magic_unicorn(name: str):
if name == "yolo":
raise UnicornException(name=name)
return {"unicorn_name": name}
def custom_unicorn_handler(request: Request, exc: UnicornException):
return JSONResponse(
status_code=418,
content={"message": f"Special handler: {exc.name} did something magical!"},
)
special_router = APIRouter(
prefix="/special",
exception_handlers={UnicornException: custom_unicorn_handler},
)
@special_router.get("/unicorns/{name}")
async def read_special_unicorn(name: str):
if name == "yolo":
raise UnicornException(name=name)
return {"unicorn_name": name}
app.include_router(magic_router)
app.include_router(special_router)