emails/exceptions.py (71 lines of code) (raw):

"""Exceptions raised by emails app""" from django.conf import settings from api.exceptions import ErrorContextType, RelayAPIException class CannotMakeAddressException(RelayAPIException): """Base exception for RelayAddress or DomainAddress creation failure.""" class AccountIsPausedException(CannotMakeAddressException): default_code = "account_is_paused" default_detail = "Your account is on pause." ftl_id = "api-error-account-is-paused" status_code = 403 class AccountIsInactiveException(CannotMakeAddressException): default_code = "account_is_inactive" default_detail = "Your account is not active." ftl_id = "api-error-account-is-inactive" status_code = 403 class RelayAddrFreeTierLimitException(CannotMakeAddressException): default_code = "free_tier_limit" default_detail_template = ( "You’ve used all {free_tier_limit} email masks included with your free account." " You can reuse an existing mask, but using a unique mask for each account is" " the most secure option." ) ftl_id = "api-error-free-tier-limit" status_code = 403 def __init__(self, free_tier_limit: int | None = None): self.free_tier_limit = free_tier_limit or settings.MAX_NUM_FREE_ALIASES super().__init__() def error_context(self) -> ErrorContextType: return {"free_tier_limit": self.free_tier_limit} class DomainAddrFreeTierException(CannotMakeAddressException): default_code = "free_tier_no_subdomain_masks" default_detail = ( "Your free account does not include custom subdomains for masks." " To create custom masks, upgrade to Relay Premium." ) ftl_id = "api-error-free-tier-no-subdomain-masks" status_code = 403 class DomainAddrNeedSubdomainException(CannotMakeAddressException): default_code = "need_subdomain" default_detail = "Please select a subdomain before creating a custom email address." ftl_id = "api-error-need-subdomain" status_code = 400 class DomainAddrUpdateException(CannotMakeAddressException): """Exception raised when attempting to edit an existing domain address field.""" default_code = "address_not_editable" default_detail = "You cannot edit an existing domain address field." ftl_id = "api-error-address-not-editable" status_code = 400 class DomainAddrUnavailableException(CannotMakeAddressException): default_code = "address_unavailable" default_detail_template = ( "“{unavailable_address}” could not be created." " Please try again with a different mask name." ) ftl_id = "api-error-address-unavailable" status_code = 400 def __init__(self, unavailable_address: str): self.unavailable_address = unavailable_address super().__init__() def error_context(self) -> ErrorContextType: return {"unavailable_address": self.unavailable_address} class DomainAddrDuplicateException(CannotMakeAddressException): default_code = "duplicate_address" default_detail_template = ( "“{duplicate_address}” already exists." " Please try again with a different mask name." ) ftl_id = "api-error-duplicate-address" status_code = 409 def __init__(self, duplicate_address: str): self.duplicate_address = duplicate_address super().__init__() def error_context(self) -> ErrorContextType: return {"duplicate_address": self.duplicate_address}