Skip to content

Commit 4704dc0

Browse files
csalomsastred
authored andcommitted
TemplateAttachmentEmailMessagView: filename required if attachment is provided (#38)
1 parent 1a3f719 commit 4704dc0

File tree

2 files changed

+45
-8
lines changed

2 files changed

+45
-8
lines changed

django_yubin/messages.py

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -321,8 +321,44 @@ class TemplatedAttachmentEmailMessageView(TemplatedHTMLEmailMessageView):
321321
an attachment
322322
"""
323323

324-
def render_to_message(self, extra_context=None, attachment=None,
325-
mimetype=None, *args, **kwargs):
324+
def send(self, extra_context=None, **kwargs):
325+
"""
326+
Renders and sends an email message.
327+
328+
All keyword arguments other than ``extra_context`` are passed through
329+
as keyword arguments when constructing a new :attr:`message_class`
330+
instance for this message.
331+
332+
This method exists primarily for convenience, and the proper
333+
rendering of your message should not depend on the behavior of this
334+
method. To alter how a message is created, override
335+
:meth:``render_to_message`` instead, since that should always be
336+
called, even if a message is not sent.
337+
338+
:param extra_context: Any additional context data that will be used
339+
when rendering this message.
340+
341+
:param kwargs : mail settings
342+
from_email=None,
343+
to=None,
344+
bcc=None,
345+
connection=None,
346+
attachments=None,
347+
cc=None
348+
headers=None,
349+
filename=None,
350+
351+
:type extra_context: :class:`dict`
352+
353+
"""
354+
if kwargs.get("filename") and not kwargs.get("attachment"):
355+
raise Exception("If filename is passed, an attachment must be provided")
356+
if not kwargs.get("filename") and kwargs.get("attachment"):
357+
raise Exception("If attachment is passed, a filename must be provided")
358+
message = self.render_to_message(extra_context=extra_context, **kwargs)
359+
return message.send()
360+
361+
def render_to_message(self, extra_context=None, filename=None, attachment=None, mimetype=None, *args, **kwargs):
326362
"""
327363
Renders and returns an unsent message with the given context.
328364
@@ -341,6 +377,9 @@ def render_to_message(self, extra_context=None, attachment=None,
341377
attachments=None,
342378
cc=None
343379
headers=None,
380+
:param filename: filename (with extension) of the attachment
381+
:param attachment: attachment content
382+
:param mimetype: mimetype of attachment
344383
345384
:returns: A message instance.
346385
:rtype: :attr:`.message_class`
@@ -351,15 +390,11 @@ def render_to_message(self, extra_context=None, attachment=None,
351390

352391
if extra_context is None:
353392
extra_context = {}
354-
355393
context = self.get_context_data(**extra_context)
356394
content = self.render_html_body(context)
357395
message.attach_alternative(content, mimetype='text/html')
358-
if attachment:
359-
if type(attachment) == 'string':
360-
message.attach(filename=attachment, mimetype=mimetype)
361-
else:
362-
message.attach(content=attachment, mimetype=mimetype)
396+
if filename and attachment:
397+
message.attach(filename=filename, content=attachment, mimetype=mimetype)
363398

364399
return message
365400

tests/tests/test_messages.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,7 @@ def test_render_to_message(self):
241241
self.add_templates_to_message()
242242
attachment = os.path.join(os.path.dirname(__file__), 'files/attachment.pdf'),
243243
message = self.message.render_to_message(extra_context=self.context,
244+
filename='attachment.pdf',
244245
attachment=attachment,
245246
mimetype="application/pdf")
246247
self.assertEqual(message.subject, self.subject)
@@ -253,6 +254,7 @@ def test_send_message(self):
253254
self.add_templates_to_message()
254255
attachment = os.path.join(os.path.dirname(__file__), 'files/attachment.pdf')
255256
self.message.send(self.context,
257+
filename='attachment.pdf',
256258
attachment=attachment,
257259
mimetype="application/pdf",
258260

0 commit comments

Comments
 (0)