Skip to content

Commit 86ae339

Browse files
committed
Support for EmailMessage.extra_headers and transactional option
Relates to #159 EmailMessage.extra_headers land in custom_headers transmission param, and X-MSYS-API if present and has options.transactional == True will translate onto transactional transmission param.
1 parent c2a25aa commit 86ae339

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

AUTHORS.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@ Patches and suggestions
2121
- `@gnarvaja <https://github.com/gnarvaja>`_
2222
- `@pegler <https://github.com/pegler>`_
2323
- `@puttu <https://github.com/puttu>`_
24+
- Janusz Skonieczny `@wooyek <https://github.com/wooyek>`_
2425
- ADD YOURSELF HERE (and link to your github page)

sparkpost/django/message.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,4 +90,12 @@ def __init__(self, message):
9090
if hasattr(message, 'campaign'):
9191
formatted['campaign'] = message.campaign
9292

93+
if message.extra_headers:
94+
formatted['custom_headers'] = message.extra_headers
95+
if 'X-MSYS-API' in message.extra_headers:
96+
import json
97+
msys_api = json.loads(message.extra_headers['X-MSYS-API'])
98+
if msys_api and msys_api.get('options', {}).get('transactional', False): # noqa: E501
99+
formatted['transactional'] = True
100+
93101
super(SparkPostMessage, self).__init__(formatted)

test/django/test_message.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,3 +228,30 @@ def test_reply_to():
228228

229229
assert message(reply_to=['replyone@example.com',
230230
'replytwo@example.com']) == expected
231+
232+
233+
def test_extra_headers():
234+
email_message = EmailMessage(**base_options)
235+
email_message.extra_headers['FOO'] = 'bar'
236+
237+
actual = SparkPostMessage(email_message)
238+
expected = dict(
239+
custom_headers={'FOO': 'bar'},
240+
)
241+
expected.update(base_expected)
242+
assert actual == expected
243+
244+
245+
def test_transactional():
246+
email_message = EmailMessage(**base_options)
247+
import json
248+
msys_api = json.dumps({'options': {'transactional': True}})
249+
email_message.extra_headers['X-MSYS-API'] = msys_api
250+
251+
actual = SparkPostMessage(email_message)
252+
expected = dict(
253+
custom_headers={'X-MSYS-API': msys_api},
254+
transactional=True,
255+
)
256+
expected.update(base_expected)
257+
assert actual == expected

0 commit comments

Comments
 (0)