From 57189fe0b1b9818f062a77c0ed8b0344d6e1d6e0 Mon Sep 17 00:00:00 2001 From: John Bradley Date: Mon, 15 Jun 2020 13:39:50 -0400 Subject: [PATCH 1/2] add strsplit email template filter Adds strsplit and listidx template filters. Fixes #237 --- switchboard/mailer.py | 15 +++++++++++++-- switchboard/tests_mailer.py | 19 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/switchboard/mailer.py b/switchboard/mailer.py index 1ff0ab60..e76ed43a 100644 --- a/switchboard/mailer.py +++ b/switchboard/mailer.py @@ -3,13 +3,24 @@ from django.utils.safestring import mark_safe from django.conf import settings +LOAD_EMAIL_FILTERS = '{% load emailfilters %}' + + +def template_with_email_filters(template_string): + """ + Create a template that will load our email filters + :param template_string: str + :return: Template + """ + return Template('{}{}'.format(LOAD_EMAIL_FILTERS, template_string)) + def generate_message(reply_to_email, rcpt_email, cc_email, template_subject, template_body, context): # Mark the fields in context as safe, since we're not outputting HTML for k in context: context[k] = mark_safe(context[k]) - subject = Template(template_subject).render(Context(context)) - body = Template(template_body).render(Context(context)) + subject = template_with_email_filters(template_subject).render(Context(context)) + body = template_with_email_filters(template_body).render(Context(context)) from_email = settings.EMAIL_FROM_ADDRESS cc_email_list = [cc_email] if cc_email else [] return EmailMessage(subject, body, from_email, [rcpt_email], cc=cc_email_list, reply_to=[reply_to_email]) diff --git a/switchboard/tests_mailer.py b/switchboard/tests_mailer.py index 3e6cc785..6d2a659f 100644 --- a/switchboard/tests_mailer.py +++ b/switchboard/tests_mailer.py @@ -42,3 +42,22 @@ def test_generate_message_no_escape(self): } message = generate_message(self.reply_to_email, self.rcpt_email, self.cc_email, self.subject, template_text, context) self.assertIn("message I don't want this", message.body) + + def test_generate_message_strsplit(self): + template_text = 'message {{ message | strsplit:"_" | listidx:1 }}' + context = { + 'message': "This_that_other", + } + message = generate_message(self.reply_to_email, self.rcpt_email, self.cc_email, self.subject, template_text, context) + self.assertEqual("message that", message.body) + + context = { + 'message': "one_two_three_four", + } + message = generate_message(self.reply_to_email, self.rcpt_email, self.cc_email, self.subject, template_text, context) + self.assertEqual("message two", message.body) + context = { + 'message': "one", + } + message = generate_message(self.reply_to_email, self.rcpt_email, self.cc_email, self.subject, template_text, context) + self.assertEqual("message ", message.body) From 319044c2edf136b70db281af194528267fd9688e Mon Sep 17 00:00:00 2001 From: John Bradley Date: Mon, 15 Jun 2020 13:47:27 -0400 Subject: [PATCH 2/2] commit email filters --- switchboard/templatetags/__init__.py | 0 switchboard/templatetags/emailfilters.py | 16 ++++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 switchboard/templatetags/__init__.py create mode 100644 switchboard/templatetags/emailfilters.py diff --git a/switchboard/templatetags/__init__.py b/switchboard/templatetags/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/switchboard/templatetags/emailfilters.py b/switchboard/templatetags/emailfilters.py new file mode 100644 index 00000000..78b1a2f6 --- /dev/null +++ b/switchboard/templatetags/emailfilters.py @@ -0,0 +1,16 @@ +from django import template +from django.template.defaultfilters import stringfilter + +register = template.Library() + +@register.filter +@stringfilter +def strsplit(value, sep=None): + return value.split(sep) + +@register.filter +def listidx(value, idx=0): + try: + return value[idx] + except IndexError: + return ''