nikhil_staging / lilac /router_utils.py
nsthorat's picture
Push
56cce61
raw
history blame
No virus
892 Bytes
"""Utils for routers."""
import traceback
from typing import Callable
from fastapi import HTTPException, Request, Response
from fastapi.routing import APIRoute
class RouteErrorHandler(APIRoute):
"""Custom APIRoute that handles application errors and exceptions."""
def get_route_handler(self) -> Callable:
"""Get the route handler."""
original_route_handler = super().get_route_handler()
async def custom_route_handler(request: Request) -> Response:
try:
return await original_route_handler(request)
except Exception as ex:
if isinstance(ex, HTTPException):
raise ex
print('Route error:', request.url)
print(ex)
print(traceback.format_exc())
# wrap error into pretty 500 exception
raise HTTPException(status_code=500, detail=traceback.format_exc()) from ex
return custom_route_handler