mirror of
https://github.com/pacnpal/django-anymail.git
synced 2025-12-20 11:51:05 -05:00
Allow kwargs overrides for (nearly) all settings
* Update utils.get_anymail_setting to support kwargs override of django.conf.settings values * Use the updated version everywhere * Switch from ImproperlyConfigured to AnymailConfigurationError exception (anticipates feature_wehooks change) Closes #12
This commit is contained in:
@@ -17,12 +17,15 @@ class AnymailBaseBackend(BaseEmailBackend):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(AnymailBaseBackend, self).__init__(*args, **kwargs)
|
||||
|
||||
self.ignore_unsupported_features = get_anymail_setting("IGNORE_UNSUPPORTED_FEATURES", False)
|
||||
self.ignore_recipient_status = get_anymail_setting("IGNORE_RECIPIENT_STATUS", False)
|
||||
self.ignore_unsupported_features = get_anymail_setting('ignore_unsupported_features',
|
||||
kwargs=kwargs, default=False)
|
||||
self.ignore_recipient_status = get_anymail_setting('ignore_recipient_status',
|
||||
kwargs=kwargs, default=False)
|
||||
|
||||
# Merge SEND_DEFAULTS and <esp_name>_SEND_DEFAULTS settings
|
||||
send_defaults = get_anymail_setting("SEND_DEFAULTS", {})
|
||||
esp_send_defaults = get_anymail_setting("%s_SEND_DEFAULTS" % self.esp_name.upper(), None)
|
||||
send_defaults = get_anymail_setting('send_defaults', default={}) # but not from kwargs
|
||||
esp_send_defaults = get_anymail_setting('send_defaults', esp_name=self.esp_name,
|
||||
kwargs=kwargs, default=None)
|
||||
if esp_send_defaults is not None:
|
||||
send_defaults = send_defaults.copy()
|
||||
send_defaults.update(esp_send_defaults)
|
||||
|
||||
@@ -14,8 +14,10 @@ class MailgunBackend(AnymailRequestsBackend):
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
"""Init options from Django settings"""
|
||||
self.api_key = get_anymail_setting('MAILGUN_API_KEY', allow_bare=True)
|
||||
api_url = get_anymail_setting("MAILGUN_API_URL", "https://api.mailgun.net/v3")
|
||||
esp_name = self.esp_name
|
||||
self.api_key = get_anymail_setting('api_key', esp_name=esp_name, kwargs=kwargs, allow_bare=True)
|
||||
api_url = get_anymail_setting('api_url', esp_name=esp_name, kwargs=kwargs,
|
||||
default="https://api.mailgun.net/v3")
|
||||
if not api_url.endswith("/"):
|
||||
api_url += "/"
|
||||
super(MailgunBackend, self).__init__(api_url, **kwargs)
|
||||
|
||||
@@ -14,8 +14,10 @@ class MandrillBackend(AnymailRequestsBackend):
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
"""Init options from Django settings"""
|
||||
self.api_key = get_anymail_setting('MANDRILL_API_KEY', allow_bare=True)
|
||||
api_url = get_anymail_setting("MANDRILL_API_URL", "https://mandrillapp.com/api/1.0")
|
||||
esp_name = self.esp_name
|
||||
self.api_key = get_anymail_setting('api_key', esp_name=esp_name, kwargs=kwargs, allow_bare=True)
|
||||
api_url = get_anymail_setting('api_url', esp_name=esp_name, kwargs=kwargs,
|
||||
default="https://mandrillapp.com/api/1.0")
|
||||
if not api_url.endswith("/"):
|
||||
api_url += "/"
|
||||
super(MandrillBackend, self).__init__(api_url, **kwargs)
|
||||
|
||||
@@ -14,8 +14,10 @@ class PostmarkBackend(AnymailRequestsBackend):
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
"""Init options from Django settings"""
|
||||
self.server_token = get_anymail_setting('POSTMARK_SERVER_TOKEN', allow_bare=True)
|
||||
api_url = get_anymail_setting("POSTMARK_API_URL", "https://api.postmarkapp.com/")
|
||||
esp_name = self.esp_name
|
||||
self.server_token = get_anymail_setting('server_token', esp_name=esp_name, kwargs=kwargs, allow_bare=True)
|
||||
api_url = get_anymail_setting('api_url', esp_name=esp_name, kwargs=kwargs,
|
||||
default="https://api.postmarkapp.com/")
|
||||
if not api_url.endswith("/"):
|
||||
api_url += "/"
|
||||
super(PostmarkBackend, self).__init__(api_url, **kwargs)
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
from email.utils import unquote
|
||||
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.core.mail import make_msgid
|
||||
from requests.structures import CaseInsensitiveDict
|
||||
|
||||
from ..exceptions import AnymailRequestsAPIError
|
||||
from ..exceptions import AnymailConfigurationError, AnymailRequestsAPIError
|
||||
from ..message import AnymailRecipientStatus
|
||||
from ..utils import get_anymail_setting, timestamp
|
||||
|
||||
@@ -19,19 +18,25 @@ class SendGridBackend(AnymailRequestsBackend):
|
||||
def __init__(self, **kwargs):
|
||||
"""Init options from Django settings"""
|
||||
# Auth requires *either* SENDGRID_API_KEY or SENDGRID_USERNAME+SENDGRID_PASSWORD
|
||||
self.api_key = get_anymail_setting('SENDGRID_API_KEY', default=None, allow_bare=True)
|
||||
self.username = get_anymail_setting('SENDGRID_USERNAME', default=None, allow_bare=True)
|
||||
self.password = get_anymail_setting('SENDGRID_PASSWORD', default=None, allow_bare=True)
|
||||
if self.api_key is None and self.username is None and self.password is None:
|
||||
raise ImproperlyConfigured(
|
||||
esp_name = self.esp_name
|
||||
self.api_key = get_anymail_setting('api_key', esp_name=esp_name, kwargs=kwargs,
|
||||
default=None, allow_bare=True)
|
||||
self.username = get_anymail_setting('username', esp_name=esp_name, kwargs=kwargs,
|
||||
default=None, allow_bare=True)
|
||||
self.password = get_anymail_setting('password', esp_name=esp_name, kwargs=kwargs,
|
||||
default=None, allow_bare=True)
|
||||
if self.api_key is None and (self.username is None or self.password is None):
|
||||
raise AnymailConfigurationError(
|
||||
"You must set either SENDGRID_API_KEY or both SENDGRID_USERNAME and "
|
||||
"SENDGRID_PASSWORD in your Django ANYMAIL settings."
|
||||
)
|
||||
|
||||
self.generate_message_id = get_anymail_setting('SENDGRID_GENERATE_MESSAGE_ID', default=True)
|
||||
self.generate_message_id = get_anymail_setting('generate_message_id', esp_name=esp_name,
|
||||
kwargs=kwargs, default=True)
|
||||
|
||||
# This is SendGrid's Web API v2 (because the Web API v3 doesn't support sending)
|
||||
api_url = get_anymail_setting("SENDGRID_API_URL", "https://api.sendgrid.com/api/")
|
||||
api_url = get_anymail_setting('api_url', esp_name=esp_name, kwargs=kwargs,
|
||||
default="https://api.sendgrid.com/api/")
|
||||
if not api_url.endswith("/"):
|
||||
api_url += "/"
|
||||
super(SendGridBackend, self).__init__(api_url, **kwargs)
|
||||
|
||||
Reference in New Issue
Block a user