mirror of
https://github.com/pacnpal/django-anymail.git
synced 2025-12-20 11:51:05 -05:00
Cleanup: add reprs for AnymailStatus, AnymailRecipientStatus
This commit is contained in:
@@ -88,6 +88,10 @@ class AnymailRecipientStatus:
|
|||||||
self.message_id = message_id # ESP message id
|
self.message_id = message_id # ESP message id
|
||||||
self.status = status # one of ANYMAIL_STATUSES, or None for not yet sent to ESP
|
self.status = status # one of ANYMAIL_STATUSES, or None for not yet sent to ESP
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return "AnymailRecipientStatus({message_id!r}, {status!r})".format(
|
||||||
|
message_id=self.message_id, status=self.status)
|
||||||
|
|
||||||
|
|
||||||
class AnymailStatus:
|
class AnymailStatus:
|
||||||
"""Information about an EmailMessage's send status for all recipients"""
|
"""Information about an EmailMessage's send status for all recipients"""
|
||||||
@@ -98,6 +102,21 @@ class AnymailStatus:
|
|||||||
self.recipients = {} # per-recipient: { email: AnymailRecipientStatus, ... }
|
self.recipients = {} # per-recipient: { email: AnymailRecipientStatus, ... }
|
||||||
self.esp_response = None
|
self.esp_response = None
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
def _repr(o):
|
||||||
|
if isinstance(o, set):
|
||||||
|
# force sorted order, for reproducible testing
|
||||||
|
item_reprs = [repr(item) for item in sorted(o)]
|
||||||
|
return "{%s}" % ", ".join(item_reprs)
|
||||||
|
else:
|
||||||
|
return repr(o)
|
||||||
|
details = ["status={status}".format(status=_repr(self.status))]
|
||||||
|
if self.message_id:
|
||||||
|
details.append("message_id={message_id}".format(message_id=_repr(self.message_id)))
|
||||||
|
if self.recipients:
|
||||||
|
details.append("{num_recipients} recipients".format(num_recipients=len(self.recipients)))
|
||||||
|
return "AnymailStatus<{details}>".format(details=", ".join(details))
|
||||||
|
|
||||||
def set_recipient_status(self, recipients):
|
def set_recipient_status(self, recipients):
|
||||||
self.recipients.update(recipients)
|
self.recipients.update(recipients)
|
||||||
recipient_statuses = self.recipients.values()
|
recipient_statuses = self.recipients.values()
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from django.core.mail import EmailMultiAlternatives
|
|||||||
from django.test import SimpleTestCase
|
from django.test import SimpleTestCase
|
||||||
from mock import patch
|
from mock import patch
|
||||||
|
|
||||||
from anymail.message import attach_inline_image
|
from anymail.message import AnymailRecipientStatus, AnymailStatus, attach_inline_image
|
||||||
|
|
||||||
from .utils import AnymailTestMixin, sample_image_content
|
from .utils import AnymailTestMixin, sample_image_content
|
||||||
|
|
||||||
@@ -29,3 +29,50 @@ class InlineImageTests(AnymailTestMixin, SimpleTestCase):
|
|||||||
domain="example.org")
|
domain="example.org")
|
||||||
self.assertRegex(cid, r"[\w.]+@example\.org",
|
self.assertRegex(cid, r"[\w.]+@example\.org",
|
||||||
"Content-ID should be a valid Message-ID @example.org")
|
"Content-ID should be a valid Message-ID @example.org")
|
||||||
|
|
||||||
|
|
||||||
|
class AnymailStatusTests(AnymailTestMixin, SimpleTestCase):
|
||||||
|
def test_single_recipient(self):
|
||||||
|
recipients = {
|
||||||
|
"one@example.com": AnymailRecipientStatus("12345", "sent"),
|
||||||
|
}
|
||||||
|
status = AnymailStatus()
|
||||||
|
status.set_recipient_status(recipients)
|
||||||
|
self.assertEqual(status.status, {"sent"})
|
||||||
|
self.assertEqual(status.message_id, "12345")
|
||||||
|
self.assertEqual(status.recipients, recipients)
|
||||||
|
self.assertEqual(repr(status),
|
||||||
|
"AnymailStatus<status={'sent'}, message_id='12345', 1 recipients>")
|
||||||
|
self.assertEqual(repr(status.recipients["one@example.com"]),
|
||||||
|
"AnymailRecipientStatus('12345', 'sent')")
|
||||||
|
|
||||||
|
def test_multiple_recipients(self):
|
||||||
|
recipients = {
|
||||||
|
"one@example.com": AnymailRecipientStatus("12345", "sent"),
|
||||||
|
"two@example.com": AnymailRecipientStatus("45678", "queued"),
|
||||||
|
}
|
||||||
|
status = AnymailStatus()
|
||||||
|
status.set_recipient_status(recipients)
|
||||||
|
self.assertEqual(status.status, {"queued", "sent"})
|
||||||
|
self.assertEqual(status.message_id, {"12345", "45678"})
|
||||||
|
self.assertEqual(status.recipients, recipients)
|
||||||
|
self.assertEqual(repr(status),
|
||||||
|
"AnymailStatus<status={'queued', 'sent'}, message_id={'12345', '45678'}, 2 recipients>")
|
||||||
|
|
||||||
|
def test_multiple_recipients_same_message_id(self):
|
||||||
|
# status.message_id collapses when it's the same for all recipients
|
||||||
|
recipients = {
|
||||||
|
"one@example.com": AnymailRecipientStatus("12345", "sent"),
|
||||||
|
"two@example.com": AnymailRecipientStatus("12345", "queued"),
|
||||||
|
}
|
||||||
|
status = AnymailStatus()
|
||||||
|
status.set_recipient_status(recipients)
|
||||||
|
self.assertEqual(status.message_id, "12345")
|
||||||
|
self.assertEqual(repr(status),
|
||||||
|
"AnymailStatus<status={'queued', 'sent'}, message_id='12345', 2 recipients>")
|
||||||
|
|
||||||
|
def test_none(self):
|
||||||
|
status = AnymailStatus()
|
||||||
|
self.assertIsNone(status.status)
|
||||||
|
self.assertIsNone(status.message_id)
|
||||||
|
self.assertEqual(repr(status), "AnymailStatus<status=None>")
|
||||||
|
|||||||
Reference in New Issue
Block a user