mirror of
https://github.com/pacnpal/django-anymail.git
synced 2025-12-20 03:41:05 -05:00
Rename exceptions
* Change Djrill -> Mandrill in exception names * Don't re-export at package level (import from anymail.exceptions, not from anymail)
This commit is contained in:
@@ -2,28 +2,30 @@ import json
|
||||
from requests import HTTPError
|
||||
|
||||
|
||||
class DjrillError(Exception):
|
||||
"""Base class for exceptions raised by Djrill
|
||||
class AnymailError(Exception):
|
||||
"""Base class for exceptions raised by Anymail
|
||||
|
||||
Overrides __str__ to provide additional information about
|
||||
Mandrill API call and response.
|
||||
the ESP API call and response.
|
||||
"""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
"""
|
||||
Optional kwargs:
|
||||
email_message: the original EmailMessage being sent
|
||||
payload: data arg (*not* json-stringified) for the Mandrill send call
|
||||
status_code: HTTP status code of response to ESP send call
|
||||
payload: data arg (*not* json-stringified) for the ESP send call
|
||||
response: requests.Response from the send call
|
||||
"""
|
||||
self.email_message = kwargs.pop('email_message', None)
|
||||
self.payload = kwargs.pop('payload', None)
|
||||
self.status_code = kwargs.pop('status_code', None)
|
||||
if isinstance(self, HTTPError):
|
||||
# must leave response in kwargs for HTTPError
|
||||
self.response = kwargs.get('response', None)
|
||||
else:
|
||||
self.response = kwargs.pop('response', None)
|
||||
super(DjrillError, self).__init__(*args, **kwargs)
|
||||
super(AnymailError, self).__init__(*args, **kwargs)
|
||||
|
||||
def __str__(self):
|
||||
parts = [
|
||||
@@ -34,7 +36,7 @@ class DjrillError(Exception):
|
||||
return "\n".join(filter(None, parts))
|
||||
|
||||
def describe_send(self):
|
||||
"""Return a string describing the Mandrill send in self.payload, or None"""
|
||||
"""Return a string describing the ESP send in self.payload, or None"""
|
||||
if self.payload is None:
|
||||
return None
|
||||
description = "Sending a message"
|
||||
@@ -50,10 +52,10 @@ class DjrillError(Exception):
|
||||
return description
|
||||
|
||||
def describe_response(self):
|
||||
"""Return a formatted string of self.response, or None"""
|
||||
if self.response is None:
|
||||
"""Return a formatted string of self.status_code and response, or None"""
|
||||
if self.status_code is None:
|
||||
return None
|
||||
description = "Mandrill API response %d:" % self.response.status_code
|
||||
description = "ESP API response %d:" % self.status_code
|
||||
try:
|
||||
json_response = self.response.json()
|
||||
description += "\n" + json.dumps(json_response, indent=2)
|
||||
@@ -65,53 +67,56 @@ class DjrillError(Exception):
|
||||
return description
|
||||
|
||||
|
||||
class MandrillAPIError(DjrillError, HTTPError):
|
||||
"""Exception for unsuccessful response from Mandrill API."""
|
||||
class AnymailAPIError(AnymailError):
|
||||
"""Exception for unsuccessful response from ESP's API."""
|
||||
|
||||
|
||||
class AnymailRequestsAPIError(AnymailAPIError, HTTPError):
|
||||
"""Exception for unsuccessful response from a requests API."""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(MandrillAPIError, self).__init__(*args, **kwargs)
|
||||
super(AnymailRequestsAPIError, self).__init__(*args, **kwargs)
|
||||
if self.response is not None:
|
||||
self.status_code = self.response.status_code
|
||||
|
||||
|
||||
class MandrillRecipientsRefused(DjrillError):
|
||||
class AnymailRecipientsRefused(AnymailError):
|
||||
"""Exception for send where all recipients are invalid or rejected."""
|
||||
|
||||
def __init__(self, message=None, *args, **kwargs):
|
||||
if message is None:
|
||||
message = "All message recipients were rejected or invalid"
|
||||
super(MandrillRecipientsRefused, self).__init__(message, *args, **kwargs)
|
||||
super(AnymailRecipientsRefused, self).__init__(message, *args, **kwargs)
|
||||
|
||||
|
||||
class NotSupportedByMandrillError(DjrillError, ValueError):
|
||||
"""Exception for email features that Mandrill doesn't support.
|
||||
class AnymailUnsupportedFeature(AnymailError, ValueError):
|
||||
"""Exception for Anymail features that the ESP doesn't support.
|
||||
|
||||
This is typically raised when attempting to send a Django EmailMessage that
|
||||
uses options or values you might expect to work, but that are silently
|
||||
ignored by or can't be communicated to Mandrill's API. (E.g., non-HTML
|
||||
alternative parts.)
|
||||
ignored by or can't be communicated to the ESP's API.
|
||||
|
||||
It's generally *not* raised for Mandrill-specific features, like limitations
|
||||
on Mandrill tag names or restrictions on from emails. (Djrill expects
|
||||
Mandrill to return an API error for these where appropriate, and tries to
|
||||
avoid duplicating Mandrill's validation logic locally.)
|
||||
It's generally *not* raised for ESP-specific limitations, like the number
|
||||
of tags allowed on a message. (Anymail expects
|
||||
the ESP to return an API error for these where appropriate, and tries to
|
||||
avoid duplicating each ESP's validation logic locally.)
|
||||
|
||||
"""
|
||||
|
||||
|
||||
class NotSerializableForMandrillError(DjrillError, TypeError):
|
||||
"""Exception for data that Djrill doesn't know how to convert to JSON.
|
||||
class AnymailSerializationError(AnymailError, TypeError):
|
||||
"""Exception for data that Anymail can't serialize for the ESP's API.
|
||||
|
||||
This typically results from including something like a date or Decimal
|
||||
in your merge_vars (or other Mandrill-specific EmailMessage option).
|
||||
in your merge_vars.
|
||||
|
||||
"""
|
||||
# inherits from TypeError for backwards compatibility with Djrill 1.x
|
||||
# inherits from TypeError for compatibility with JSON serialization error
|
||||
|
||||
def __init__(self, message=None, orig_err=None, *args, **kwargs):
|
||||
if message is None:
|
||||
message = "Don't know how to send this data to Mandrill. " \
|
||||
message = "Don't know how to send this data to your ESP. " \
|
||||
"Try converting it to a string or number first."
|
||||
if orig_err is not None:
|
||||
message += "\n%s" % str(orig_err)
|
||||
super(NotSerializableForMandrillError, self).__init__(message, *args, **kwargs)
|
||||
super(AnymailSerializationError, self).__init__(message, *args, **kwargs)
|
||||
|
||||
Reference in New Issue
Block a user