from fansifter_common.api.error_handlers import register_defaults from fastapi import FastAPI from starlette.requests import Request from starlette.responses import JSONResponse, Response from dmp.adapters.fivetran.exceptions import FivetranClientError from dmp.adapters.meta.exceptions import FacebookClientError async def facebook_client_error_handler( request: Request, # noqa: ARG001 exc: FacebookClientError, ) -> Response: return JSONResponse( content={ "code": "facebook_client_error", "message": exc.message, "fb_error": exc.fb_error_data, }, status_code=exc.status_code, ) async def fivetran_client_error_handler( request: Request, # noqa: ARG001 exc: FivetranClientError, ) -> 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(FacebookClientError, facebook_client_error_handler) # ty: ignore[invalid-argument-type] app.add_exception_handler(FivetranClientError, fivetran_client_error_handler) # ty: ignore[invalid-argument-type]