import logging from fansifter_common.adapters.sendgrid.exceptions import SendGridClientError from fansifter_common.adapters.stripo.exceptions import StripoClientError from fansifter_common.api.error_handlers import register_defaults from fastapi import FastAPI from starlette.requests import Request from starlette.responses import JSONResponse, Response logger = logging.getLogger(__name__) async def sendgrid_client_error_handler( request: Request, # noqa: ARG001 exc: SendGridClientError, ) -> Response: logger.error("SendGrid client error: %s", exc, extra=exc.log_extra) return JSONResponse( content={ "code": exc.code, "message": exc.message, }, status_code=exc.status_code, ) async def stripo_client_error_handler( request: Request, # noqa: ARG001 exc: StripoClientError, ) -> Response: return JSONResponse( content={ "code": exc.code, "message": exc.message, }, status_code=exc.status_code, ) def register(app: FastAPI) -> None: register_defaults(app) app.add_exception_handler(SendGridClientError, sendgrid_client_error_handler) # ty: ignore[invalid-argument-type] app.add_exception_handler(StripoClientError, stripo_client_error_handler) # ty: ignore[invalid-argument-type]