From 7179734a088f58c3352b5ced0c62789775dbaadd Mon Sep 17 00:00:00 2001 From: William Hector Date: Tue, 14 Jul 2015 05:57:12 +0100 Subject: [PATCH] Allow global_merge_vars to be merged in with the per message dict, with keys in the latter taking precedent. Update the docs accordingly. --- AUTHORS.txt | 1 + djrill/mail/backends/djrill.py | 11 ++++++++--- djrill/tests/test_mandrill_send.py | 12 +++++++++++- docs/usage/sending_mail.rst | 8 ++++++++ 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index b774736..d83829f 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -17,3 +17,4 @@ Sameer Al-Sakran Kyle Gibson Wes Winham nikolay-saskovets +William Hector diff --git a/djrill/mail/backends/djrill.py b/djrill/mail/backends/djrill.py index 66969b3..da233ca 100644 --- a/djrill/mail/backends/djrill.py +++ b/djrill/mail/backends/djrill.py @@ -285,12 +285,17 @@ def _add_mandrill_options(self, message, msg_dict): # Allow simple python dicts in place of Mandrill # [{name:name, value:value},...] arrays... + + # Allow merge of global and per message global_merge_var, the former taking precedent + global_merge_vars = {} if 'global_merge_vars' in self.global_settings: - msg_dict['global_merge_vars'] = self._expand_merge_vars( - self.global_settings['global_merge_vars']) + global_merge_vars.update(self.global_settings['global_merge_vars']) if hasattr(message, 'global_merge_vars'): + global_merge_vars.update(message.global_merge_vars) + if global_merge_vars: msg_dict['global_merge_vars'] = \ - self._expand_merge_vars(message.global_merge_vars) + self._expand_merge_vars(global_merge_vars) + if hasattr(message, 'merge_vars'): # For testing reproducibility, we sort the recipients msg_dict['merge_vars'] = [ diff --git a/djrill/tests/test_mandrill_send.py b/djrill/tests/test_mandrill_send.py index f547010..80cabc5 100644 --- a/djrill/tests/test_mandrill_send.py +++ b/djrill/tests/test_mandrill_send.py @@ -650,11 +650,21 @@ def test_global_options_override_tracking(self): self.assertEqual(data['message']['url_strip_qs'], False) def test_global_merge(self): + # Test that global settings merge in self.message.global_merge_vars = {'GREETING': "Hello"} self.message.send() data = self.get_api_call_data() self.assertEqual(data['message']['global_merge_vars'], - [{'name': "GREETING", 'content': "Hello"}]) + [{'name': "GREETING", 'content': "Hello"}, + {'name': 'TEST', 'content': 'djrill'}]) + + def test_global_merge_overwrite(self): + # Test that global merge settings are overwritten + self.message.global_merge_vars = {'TEST': "Hello"} + self.message.send() + data = self.get_api_call_data() + self.assertEqual(data['message']['global_merge_vars'], + [{'name': 'TEST', 'content': 'Hello'}]) @override_settings(EMAIL_BACKEND="djrill.mail.backends.djrill.DjrillBackend") diff --git a/docs/usage/sending_mail.rst b/docs/usage/sending_mail.rst index a7e51c0..deca0dd 100644 --- a/docs/usage/sending_mail.rst +++ b/docs/usage/sending_mail.rst @@ -118,6 +118,10 @@ using :setting:`MANDRILL_SETTINGS`. For Example:: 'track_opens': True, } +.. note:: + ``merge_vars`` and ``recipient_metadata`` cannot be set globally. ``global_merge_vars`` is merged + (see :attribute:`global_merge_vars`) + .. These attributes are in the same order as they appear in the Mandrill API docs... .. attribute:: important @@ -211,6 +215,10 @@ using :setting:`MANDRILL_SETTINGS`. For Example:: Merge data must be strings or other JSON-serializable types. (See :ref:`formatting-merge-data` for details.) + .. note:: + + If using :setting:`MANDRILL_SETTINGS` then the message ``dict`` will be merged and overwrite any duplicates. + .. attribute:: merge_vars ``dict``: per-recipient merge variables (most useful with :ref:`mandrill-templates`). The keys