From c7da66beab7ba802e8599ea46af04f6c01393ca3 Mon Sep 17 00:00:00 2001 From: kornel Date: Thu, 8 Aug 2019 09:44:17 +0200 Subject: [PATCH 1/3] Support for default reply_to email --- emailtemplates/email.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/emailtemplates/email.py b/emailtemplates/email.py index ef2c13a..dc7fef8 100644 --- a/emailtemplates/email.py +++ b/emailtemplates/email.py @@ -13,7 +13,6 @@ from .models import now, EmailTemplate from .registry import email_templates - logger = logging.getLogger(__name__) @@ -27,6 +26,7 @@ class EmailFromTemplate(object): Site Admins should know given template context. Site Admins should be familiar with Django Template System. """ + def __init__(self, name="", from_email=settings.DEFAULT_FROM_EMAIL, language=settings.LANGUAGE_CODE, subject="", template_class=EmailTemplate, registry_validation=True, template_object=None): @@ -119,6 +119,11 @@ def render_message(self): self.message = message def get_message_object(self, send_to, attachment_paths, *args, **kwargs): + if kwargs.get('reply_to') is None: + defaut_reply_to_email = getattr(settings, 'DEFAULT_REPLY_TO_EMAIL', None) + if defaut_reply_to_email: + kwargs['reply_to'] = [defaut_reply_to_email] + msg = EmailMessage(self.subject, self.message, self.from_email, send_to, *args, **kwargs) if attachment_paths: for path in attachment_paths: From 325dbd4282a02b8fe9c54fcb3b3b3f94391ed4f9 Mon Sep 17 00:00:00 2001 From: kornel Date: Thu, 8 Aug 2019 12:49:53 +0200 Subject: [PATCH 2/3] Tests for default reply_to email --- emailtemplates/email.py | 8 +++---- emailtemplates/tests/__init__.py | 5 ---- emailtemplates/tests/test_email.py | 23 +++++++++++++++---- .../tests/test_template_registry.py | 6 ++--- 4 files changed, 26 insertions(+), 16 deletions(-) diff --git a/emailtemplates/email.py b/emailtemplates/email.py index dc7fef8..ec49dd8 100644 --- a/emailtemplates/email.py +++ b/emailtemplates/email.py @@ -119,10 +119,10 @@ def render_message(self): self.message = message def get_message_object(self, send_to, attachment_paths, *args, **kwargs): - if kwargs.get('reply_to') is None: - defaut_reply_to_email = getattr(settings, 'DEFAULT_REPLY_TO_EMAIL', None) - if defaut_reply_to_email: - kwargs['reply_to'] = [defaut_reply_to_email] + + reply_to = kwargs.get('reply_to', getattr(settings, 'DEFAULT_REPLY_TO_EMAIL', None)) + if reply_to and type(reply_to) == str: + kwargs['reply_to'] = [reply_to] msg = EmailMessage(self.subject, self.message, self.from_email, send_to, *args, **kwargs) if attachment_paths: diff --git a/emailtemplates/tests/__init__.py b/emailtemplates/tests/__init__.py index d3c9cd9..bca5f67 100644 --- a/emailtemplates/tests/__init__.py +++ b/emailtemplates/tests/__init__.py @@ -1,6 +1 @@ # encoding: utf-8 -from test_helpers import * -from test_email import * -from test_template_registry import * -from test_models import * - diff --git a/emailtemplates/tests/test_email.py b/emailtemplates/tests/test_email.py index 24183cf..d940bd6 100644 --- a/emailtemplates/tests/test_email.py +++ b/emailtemplates/tests/test_email.py @@ -4,7 +4,7 @@ from django.conf import settings from django.core import mail -from django.test import TestCase +from django.test import TestCase, override_settings from django.utils.html import escape from mock import Mock @@ -16,7 +16,10 @@ class CheckEmail(TestCase): - def check_email_was_sent(self, eft, to): + def check_email_was_sent(self, eft, to, reply_to=None): + if reply_to is None: + reply_to = [] + self.assertTrue(len(mail.outbox) > 0) msg = mail.outbox[0] self.assertTrue(settings.DEFAULT_FROM_EMAIL in msg.from_email) @@ -25,6 +28,7 @@ def check_email_was_sent(self, eft, to): self.assertEqual(msg.body, eft.message) self.assertTrue('Message-Id' in msg.message()) self.assertEqual(msg.to, to) + self.assertEqual(msg.reply_to, reply_to) class EmailFromTemplateTest(CheckEmail): @@ -34,7 +38,17 @@ def setUp(self): email_logger.warning = Mock() self.attachment_filepath = os.path.join(os.path.dirname(__file__), 'data', 'example_file.txt') + @override_settings(DEFAULT_REPLY_TO_EMAIL='hello@hello.pl') def test_empty_object(self): + eft = EmailFromTemplate(registry_validation=False) + self.assertTrue(isinstance(eft, object)) + eft.render_message() + to = ['to@example.com'] + eft.send_email(to) + self.check_email_was_sent(eft, to, reply_to=['hello@hello.pl']) + + @override_settings(DEFAULT_REPLY_TO_EMAIL=None) + def test_empty_object_with_empty_reply_to(self): eft = EmailFromTemplate(registry_validation=False) self.assertTrue(isinstance(eft, object)) eft.render_message() @@ -84,9 +98,10 @@ def setUp(self): email_logger.debug = Mock() def test_support_database_template(self): - eft = EmailFromTemplate(name='support_respond.html', language=self.language, registry_validation=False) + template_name = 'support_respond.html' + eft = EmailFromTemplate(name=template_name, language=self.language, registry_validation=False) eft.get_object() - email_logger.debug.assert_called_with(substr("Got template")) + email_logger.debug.assert_called_with('Got template %s from database', template_name) self.assertEqual(eft.template_source, 'database') eft.render_message() to = ['tester1@example.com', 'tester2@example.com'] diff --git a/emailtemplates/tests/test_template_registry.py b/emailtemplates/tests/test_template_registry.py index 65b9afc..942458f 100644 --- a/emailtemplates/tests/test_template_registry.py +++ b/emailtemplates/tests/test_template_registry.py @@ -41,7 +41,7 @@ def test_context_description(self): def test_as_form_help_text(self): item = RegistrationItem('hello_template.html', help_text=u'Hello template', help_context={'username': u'Name of user in hello expression'}) - self.assertEqual(unicode, type(item.as_form_help_text())) + self.assertEqual(str, type(item.as_form_help_text())) self.assertIn("USAGE", item.as_form_help_text()) self.assertIn("CONTEXT", item.as_form_help_text()) @@ -52,7 +52,7 @@ def test_as_form_choice(self): def test_safe_defaults(self): item = RegistrationItem('hello_template.html') - self.assertEqual(unicode, type(item.help_text)) + self.assertEqual(str, type(item.help_text)) self.assertEqual(dict, type(item.help_context)) self.assertEqual(tuple, type(item.as_form_choice())) @@ -112,7 +112,7 @@ def test_registration_items(self): template_registry = EmailTemplateRegistry() template_registry.register('hello_template.html', help_text=u'Hello template', help_context={'username': u'Name of user in hello expression'}) - items = template_registry.registration_items() + items = list(template_registry.registration_items()) self.assertEqual(1, len(items)) self.assertEqual('hello_template.html', items[0].path) From 5da7e79f210413ed0f6b4626de0acf161df23a49 Mon Sep 17 00:00:00 2001 From: kornel Date: Thu, 8 Aug 2019 13:52:49 +0200 Subject: [PATCH 3/3] Back to previous version and change version to 1.1.3. --- README.rst | 3 +++ emailtemplates/email.py | 8 ++++---- setup.py | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/README.rst b/README.rst index dcf16dd..8659b35 100644 --- a/README.rst +++ b/README.rst @@ -15,6 +15,9 @@ Assumptions Changelog ========= +1.1.3 +----- +* Adding support for DEFAULT_REPLY_TO_EMAIL in django settings. 1.1.2 ----- diff --git a/emailtemplates/email.py b/emailtemplates/email.py index ec49dd8..dc7fef8 100644 --- a/emailtemplates/email.py +++ b/emailtemplates/email.py @@ -119,10 +119,10 @@ def render_message(self): self.message = message def get_message_object(self, send_to, attachment_paths, *args, **kwargs): - - reply_to = kwargs.get('reply_to', getattr(settings, 'DEFAULT_REPLY_TO_EMAIL', None)) - if reply_to and type(reply_to) == str: - kwargs['reply_to'] = [reply_to] + if kwargs.get('reply_to') is None: + defaut_reply_to_email = getattr(settings, 'DEFAULT_REPLY_TO_EMAIL', None) + if defaut_reply_to_email: + kwargs['reply_to'] = [defaut_reply_to_email] msg = EmailMessage(self.subject, self.message, self.from_email, send_to, *args, **kwargs) if attachment_paths: diff --git a/setup.py b/setup.py index f9542e7..8198428 100644 --- a/setup.py +++ b/setup.py @@ -16,7 +16,7 @@ setup( name='django-emailtemplates', - version='1.1.2', + version='1.1.3', packages=find_packages(), include_package_data=True, license='MIT License',