Source code for baguette.middlewares.errors

import traceback

from ..httpexceptions import HTTPException, InternalServerError
from ..middleware import Middleware
from ..request import Request
from ..responses import Response, make_error_response


[docs]class ErrorMiddleware(Middleware): """Middleware to handle errors in request handling. Can be :exc:`~baguette.httpexceptions.HTTPException` or other exceptions. If :attr:`app.config.debug <baguette.Config.default_headers>` and the HTTP status code is higher than 500, then the error traceback is included. """ async def __call__(self, request: Request) -> Response: try: return await self.next(request) except HTTPException as http_exception: return make_error_response( http_exception, type_=self.config.error_response_type, include_description=self.config.error_include_description, traceback="".join( traceback.format_tb(http_exception.__traceback__) ) if self.config.debug and http_exception.status_code >= 500 else None, ) except Exception as exception: traceback.print_exc() http_exception = InternalServerError() return make_error_response( http_exception, type_=self.config.error_response_type, include_description=self.config.error_include_description, traceback="".join(traceback.format_tb(exception.__traceback__)) if self.config.debug else None, )