from fansifter_common.exceptions import ( FansifterError, ObjectConflictError, ObjectNotFoundError, ) from dmp.meta.dtos import MetaUser from dmp.meta.enums import MetaUserConnectionStatus class MetaUserConnectionError(Exception): def __init__( self, user: MetaUser | None, status: MetaUserConnectionStatus, required_scopes: list[str], ) -> None: super().__init__() self.user = user self.status = status self.required_scopes = required_scopes class MetaUserConnectionNotFoundError(ObjectNotFoundError): code = "meta_user_connection_not_found" message = "Meta user connection not found" class MetaUserAdAccountNotFoundError(ObjectNotFoundError): code = "meta_user_ad_account_not_found" message = "Meta user ad account not found" class MetaAdReportingConnectionConflictError(ObjectConflictError): code = "meta_ad_reporting_connection_conflict" message = "Meta ad reporting connection conflict" class MetaAdReportingConnectionSyncingError(ObjectConflictError): code = "meta_ad_reporting_connection_syncing" message = "Meta ad reporting connection is currently syncing and cannot be updated" class MetaAdReportingConnectionNotFoundError(ObjectNotFoundError): code = "meta_ad_reporting_connection_not_found" message = "Meta ad reporting connection not found" class MetaConnectionNotFoundError(ObjectNotFoundError): code = "meta_connection_not_found" message = "Meta connection not found" class MetaAudienceNotFoundError(ObjectNotFoundError): code = "meta_audience_not_found" message = "Meta audience not found" class MetaAdAccountNotFoundError(ObjectNotFoundError): code = "meta_ad_account_not_found" message = "Meta ad account not found" class InvalidMetaAdAccountId(FansifterError): code = "invalid_meta_ad_account_id" message = "Invalid meta ad account id" status_code = 400 class MetaAdAccountPermissionsError(FansifterError): code = "meta_ad_account_permissions_error" message = "Meta ad account permissions error" status_code = 403 class MetaAdAccountTermsOfServiceError(FansifterError): code = "meta_ad_account_terms_of_service_error" status_code = 451 additional_properties = (("accept_terms_url", str),) def __init__(self, ad_account_external_id: str) -> None: super().__init__() self.accept_terms_url = ( f"https://business.facebook.com/ads/manage/customaudiences/tos/" f"?act={ad_account_external_id.removeprefix('act_')}" ) self.message = ( "To create or edit a saved audience with an uploaded customer list, " f"please agree to the Custom Audience terms at {self.accept_terms_url}." )