""" Payment-related exceptions for the atomic payment architecture """ class PaymentException(Exception): """Base class for payment-related exceptions""" pass class PaymentVerificationRequired(PaymentException): """Exception raised when payment verification is required before proceeding""" def __init__(self, message: str = "Payment verification required", setup_intent_id: str = None, client_secret: str = None): self.message = message self.setup_intent_id = setup_intent_id self.client_secret = client_secret super().__init__(message) class ThreeDSAuthenticationRequired(PaymentException): """Exception raised when 3DS authentication is required""" def __init__(self, setup_intent_id: str, client_secret: str, action_type: str, **kwargs): self.setup_intent_id = setup_intent_id self.client_secret = client_secret self.action_type = action_type self.extra_data = kwargs message = f"3DS authentication required (action: {action_type})" super().__init__(message) class PaymentMethodInvalid(PaymentException): """Exception raised when payment method is invalid""" def __init__(self, message: str = "Payment method is invalid"): super().__init__(message) class PaymentFailed(PaymentException): """Exception raised when payment fails""" def __init__(self, message: str = "Payment failed"): super().__init__(message) class SubscriptionCreationFailed(PaymentException): """Exception raised when subscription creation fails""" def __init__(self, message: str = "Subscription creation failed"): super().__init__(message) class PaymentProviderError(PaymentException): """Exception raised when there's an error with the payment provider""" def __init__(self, message: str = "Payment provider error"): super().__init__(message) class PaymentVerificationError(PaymentException): """Exception raised when payment verification fails""" def __init__(self, message: str = "Payment verification failed"): super().__init__(message) class SetupIntentError(PaymentException): """Exception raised when SetupIntent operations fail""" def __init__(self, message: str = "SetupIntent operation failed"): super().__init__(message) class SubscriptionUpdateFailed(PaymentException): """Exception raised when subscription update fails""" def __init__(self, message: str = "Subscription update failed"): super().__init__(message) class PaymentServiceError(PaymentException): """General payment service error""" def __init__(self, message: str = "Payment service error"): super().__init__(message) class PaymentMethodError(PaymentException): """Exception raised when payment method operations fail""" def __init__(self, message: str = "Payment method operation failed"): super().__init__(message) class CustomerUpdateFailed(PaymentException): """Exception raised when customer update operations fail""" def __init__(self, message: str = "Customer update failed"): super().__init__(message)