phones/exceptions.py (75 lines of code) (raw):

"""Exceptions raised by phones app""" from django.conf import settings from api.exceptions import ErrorContextType, RelayAPIException class RelaySMSException(RelayAPIException): """Base exception for SMS text issues""" ftl_id_prefix = "sms-error-" class NoPhoneLog(RelaySMSException): default_code = "no_phone_log" default_detail_template = ( "The reply feature requires Firefox Relay to keep a log of your callers" " and text senders. You can reply to future messages by enabling “Caller and" " texts log” in Settings: {account_settings_url}" ) ftl_id = "sms-error-no-phone-log" status_code = 400 def error_context(self) -> ErrorContextType: return { "account_settings_url": f"{settings.SITE_ORIGIN or ''}/accounts/settings/" } class NoPreviousSender(RelaySMSException): default_code = "no_previous_sender" default_detail = ( "Message failed to send. You can only reply to phone numbers that have sent" " you a text message." ) ftl_id = "sms-error-no-previous-sender" status_code = 400 class ShortPrefixException(RelaySMSException): """Base exception for short prefix exceptions""" status_code = 200 def __init__(self, short_prefix: str): self.short_prefix = short_prefix super().__init__() def error_context(self) -> ErrorContextType: return {"short_prefix": self.short_prefix} class FullNumberException(RelaySMSException): """Base exception for full number exceptions""" status_code = 200 def __init__(self, full_number: str): self.full_number = full_number super().__init__() def error_context(self) -> ErrorContextType: return {"full_number": self.full_number} class ShortPrefixMatchesNoSenders(ShortPrefixException): default_code = "short_prefix_matches_no_senders" default_detail_template = ( "Message failed to send. There is no phone number in this thread ending" " in {short_prefix}. Please check the number and try again." ) ftl_id = "sms-error-short-prefix-matches-no-senders" class FullNumberMatchesNoSenders(FullNumberException): default_code = "full_number_matches_no_senders" default_detail_template = ( "Message failed to send. There is no previous sender with the phone" " number {full_number}. Please check the number and try again." ) ftl_id = "sms-error-full-number-matches-no-senders" class MultipleNumberMatches(ShortPrefixException): default_code = "multiple_number_matches" default_detail_template = ( "Message failed to send. There is more than one phone number in this" " thread ending in {short_prefix}. To retry, start your message with" " the complete number." ) ftl_id = "sms-error-multiple-number-matches" class NoBodyAfterShortPrefix(ShortPrefixException): default_code = "no_body_after_short_prefix" default_detail_template = ( "Message failed to send. Please include a message after the sender identifier" " {short_prefix}." ) ftl_id = "sms-error-no-body-after-short-prefix" class NoBodyAfterFullNumber(FullNumberException): default_code = "no_body_after_full_number" default_detail_template = ( "Message failed to send. Please include a message after the phone number" " {full_number}." ) ftl_id = "sms-error-no-body-after-full-number"