From 293bf7ad89c837d6a2ee9e08443c00703172d953 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Wed, 1 Aug 2018 11:14:52 -0700 Subject: helper: replace email_as_* with email builtins Python 3.3 added a new feature to the email module, policies (https://docs.python.org/3.5/library/email.policy.html). Policy objects allow precise control over how numerous features work when converting to and from str or bytes. With the `email.policy.SMTP` the behavior of email_as_bytes and email_as_string can be achieved using the builtin `.as_string()` and `.as_bytes()` methods, without custom code or the need to test it. Additionally these methods handle corner cases that we don't currently handle, such as multi-part messages with different encodings. Fixes #1257 --- tests/db/utils_test.py | 5 +++-- tests/helper_test.py | 22 ---------------------- 2 files changed, 3 insertions(+), 24 deletions(-) (limited to 'tests') diff --git a/tests/db/utils_test.py b/tests/db/utils_test.py index 23885067..7d50d888 100644 --- a/tests/db/utils_test.py +++ b/tests/db/utils_test.py @@ -8,6 +8,7 @@ import codecs import email import email.header import email.mime.application +import email.policy import io import os import os.path @@ -465,7 +466,7 @@ class TestMessageFromFile(TestCaseClassCleanup): text = b'This is some text' t = email.mime.text.MIMEText(text, 'plain', 'utf-8') _, sig = crypto.detached_signature_for( - helper.email_as_bytes(t), self.keys) + t.as_bytes(policy=email.policy.SMTP), self.keys) s = email.mime.application.MIMEApplication( sig, 'pgp-signature', email.encoders.encode_7or8bit) m = email.mime.multipart.MIMEMultipart('signed', None, [t, s]) @@ -555,7 +556,7 @@ class TestMessageFromFile(TestCaseClassCleanup): else: text = b'This is some text' t = email.mime.text.MIMEText(text, 'plain', 'utf-8') - enc = crypto.encrypt(helper.email_as_bytes(t), self.keys) + enc = crypto.encrypt(t.as_bytes(policy=email.policy.SMTP), self.keys) e = email.mime.application.MIMEApplication( enc, 'octet-stream', email.encoders.encode_7or8bit) diff --git a/tests/helper_test.py b/tests/helper_test.py index b47e5eff..b87d77af 100644 --- a/tests/helper_test.py +++ b/tests/helper_test.py @@ -383,28 +383,6 @@ class TestCallCmd(unittest.TestCase): self.assertEqual(code, 42) -class TestEmailAsString(unittest.TestCase): - - def test_empty_message(self): - message = email.message.Message() - actual = helper.email_as_string(message) - expected = '\r\n' - self.assertEqual(actual, expected) - - def test_empty_message_with_unicode_header(self): - """Test if unicode header keys can be used in an email that is - converted to string with email_as_string().""" - # This is what alot.db.envelope.Envelope.construct_mail() currently - # does: It constructs a message object and then copies all headers from - # the envelope to the message object. Some header names are stored as - # unicode in the envelope. - message = email.message.Message() - message[u'X-Unicode-Header'] = 'dummy value' - actual = helper.email_as_string(message) - expected = 'X-Unicode-Header: dummy value\r\n\r\n' - self.assertEqual(actual, expected) - - class TestShorten(unittest.TestCase): def test_lt_maxlen(self): -- cgit v1.2.3