Skip to content

Commit

Permalink
Merge pull request #238 from Duke-GCB/237-email-template-strsplit
Browse files Browse the repository at this point in the history
Add strsplit email template filters
  • Loading branch information
johnbradley authored Jun 16, 2020
2 parents 3eb1d69 + 319044c commit eab2c42
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 2 deletions.
15 changes: 13 additions & 2 deletions switchboard/mailer.py
Original file line number Diff line number Diff line change
Expand Up @@ -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])
Empty file.
16 changes: 16 additions & 0 deletions switchboard/templatetags/emailfilters.py
Original file line number Diff line number Diff line change
@@ -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 ''
19 changes: 19 additions & 0 deletions switchboard/tests_mailer.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

0 comments on commit eab2c42

Please sign in to comment.