mirror of
https://github.com/coddingtonbear/django-mailbox.git
synced 2026-07-10 06:48:19 +02:00
Modernize syntax, drop Python<3, drop Django<1.11
This commit is contained in:
parent
d114008645
commit
84c99afa03
42 changed files with 176 additions and 330 deletions
|
|
@ -2,8 +2,6 @@ import email
|
|||
import os.path
|
||||
import time
|
||||
|
||||
import six
|
||||
|
||||
from django.conf import settings
|
||||
from django.test import TestCase
|
||||
|
||||
|
|
@ -57,7 +55,7 @@ class EmailMessageTestCase(TestCase):
|
|||
settings.EMAIL_HOST_USER = self.test_account
|
||||
settings.EMAIL_HOST_PASSWORD = self.test_password
|
||||
settings.EMAIL_USE_TLS = True
|
||||
super(EmailMessageTestCase, self).setUp()
|
||||
super().setUp()
|
||||
|
||||
def _get_new_messages(self, mailbox, condition=None):
|
||||
start_time = time.time()
|
||||
|
|
@ -70,8 +68,7 @@ class EmailMessageTestCase(TestCase):
|
|||
# check if generator contains at least one element
|
||||
message = next(messages)
|
||||
yield message
|
||||
for message in messages:
|
||||
yield message
|
||||
yield from messages
|
||||
return
|
||||
|
||||
except StopIteration:
|
||||
|
|
@ -92,10 +89,7 @@ class EmailMessageTestCase(TestCase):
|
|||
|
||||
def _get_email_object(self, name):
|
||||
copy = self._get_email_as_text(name)
|
||||
if six.PY3:
|
||||
return email.message_from_bytes(copy)
|
||||
else:
|
||||
return email.message_from_string(copy)
|
||||
return email.message_from_bytes(copy)
|
||||
|
||||
def _headers_identical(self, left, right, header=None):
|
||||
""" Check if headers are (close enough to) identical.
|
||||
|
|
@ -131,7 +125,7 @@ class EmailMessageTestCase(TestCase):
|
|||
raise AssertionError("Extra header '%s'" % key)
|
||||
if not self._headers_identical(right[key], value, header=key):
|
||||
raise AssertionError(
|
||||
"Header '%s' unequal:\n%s\n%s" % (
|
||||
"Header '{}' unequal:\n{}\n{}".format(
|
||||
key,
|
||||
repr(value),
|
||||
repr(right[key]),
|
||||
|
|
@ -144,7 +138,7 @@ class EmailMessageTestCase(TestCase):
|
|||
raise AssertionError("Extra header '%s'" % key)
|
||||
if not self._headers_identical(left[key], value, header=key):
|
||||
raise AssertionError(
|
||||
"Header '%s' unequal:\n%s\n%s" % (
|
||||
"Header '{}' unequal:\n{}\n{}".format(
|
||||
key,
|
||||
repr(value),
|
||||
repr(right[key]),
|
||||
|
|
@ -175,7 +169,7 @@ class EmailMessageTestCase(TestCase):
|
|||
|
||||
def _raise_mismatched(self, left, right):
|
||||
raise AssertionError(
|
||||
"Message payloads do not match:\n%s\n%s" % (
|
||||
"Message payloads do not match:\n{}\n{}".format(
|
||||
left.as_string(),
|
||||
right.as_string()
|
||||
)
|
||||
|
|
@ -183,7 +177,7 @@ class EmailMessageTestCase(TestCase):
|
|||
|
||||
def assertEqual(self, left, right): # noqa: N802
|
||||
if not isinstance(left, email.message.Message):
|
||||
return super(EmailMessageTestCase, self).assertEqual(left, right)
|
||||
return super().assertEqual(left, right)
|
||||
return self.compare_email_objects(left, right)
|
||||
|
||||
def tearDown(self):
|
||||
|
|
@ -194,4 +188,4 @@ class EmailMessageTestCase(TestCase):
|
|||
models.TEXT_STORED_MIMETYPES = self._TEXT_STORED_MIMETYPES
|
||||
|
||||
self.mailbox.delete()
|
||||
super(EmailMessageTestCase, self).tearDown()
|
||||
super().tearDown()
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
import os
|
||||
import uuid
|
||||
|
||||
from six.moves.urllib import parse
|
||||
from urllib import parse
|
||||
|
||||
from django.core.mail import EmailMultiAlternatives
|
||||
|
||||
|
|
@ -14,7 +13,7 @@ __all__ = ['TestImap']
|
|||
|
||||
class TestImap(EmailMessageTestCase):
|
||||
def setUp(self):
|
||||
super(TestImap, self).setUp()
|
||||
super().setUp()
|
||||
|
||||
self.test_imap_server = (
|
||||
os.environ.get('EMAIL_IMAP_SERVER')
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import copy
|
||||
|
||||
import mock
|
||||
from unittest import mock
|
||||
|
||||
from django_mailbox import models, utils
|
||||
from django_mailbox.models import Message
|
||||
|
|
|
|||
|
|
@ -3,8 +3,7 @@ import os.path
|
|||
import sys
|
||||
|
||||
import copy
|
||||
import mock
|
||||
import six
|
||||
from unittest import mock
|
||||
|
||||
from django_mailbox.models import Mailbox, Message
|
||||
from django_mailbox.utils import convert_header_to_unicode
|
||||
|
|
@ -54,18 +53,18 @@ class TestProcessEmail(EmailMessageTestCase):
|
|||
|
||||
attachments = msg.attachments.order_by('pk').all()
|
||||
self.assertEqual(
|
||||
u'\u041f\u0430\u043a\u0435\u0442 \u043f\u0440\u0435\u0434\u043b'
|
||||
u'\u043e\u0436\u0435\u043d\u0438\u0439 HSE Career Fair 8 \u0430'
|
||||
u'\u043f\u0440\u0435\u043b\u044f 2016.pdf',
|
||||
'\u041f\u0430\u043a\u0435\u0442 \u043f\u0440\u0435\u0434\u043b'
|
||||
'\u043e\u0436\u0435\u043d\u0438\u0439 HSE Career Fair 8 \u0430'
|
||||
'\u043f\u0440\u0435\u043b\u044f 2016.pdf',
|
||||
attachments[0].get_filename()
|
||||
)
|
||||
self.assertEqual(
|
||||
u'\u0412\u0435\u0434\u043e\u043c\u043e\u0441\u0442\u0438.pdf',
|
||||
'\u0412\u0435\u0434\u043e\u043c\u043e\u0441\u0442\u0438.pdf',
|
||||
attachments[1].get_filename()
|
||||
)
|
||||
self.assertEqual(
|
||||
u'\u041f\u0430\u043a\u0435\u0442 \u043f\u0440\u0435\u0434\u043b'
|
||||
u'\u043e\u0436\u0435\u043d\u0438\u0439 2016.pptx',
|
||||
'\u041f\u0430\u043a\u0435\u0442 \u043f\u0440\u0435\u0434\u043b'
|
||||
'\u043e\u0436\u0435\u043d\u0438\u0439 2016.pptx',
|
||||
attachments[2].get_filename()
|
||||
)
|
||||
|
||||
|
|
@ -89,33 +88,6 @@ class TestProcessEmail(EmailMessageTestCase):
|
|||
'heart.png',
|
||||
)
|
||||
|
||||
def test_message_with_not_decoded_attachment_header(self):
|
||||
if sys.version_info > (3, 0):
|
||||
self.skipTest(
|
||||
"This test is only relevant on Python 2.x."
|
||||
)
|
||||
|
||||
email_object = self._get_email_object(
|
||||
'message_with_not_decoded_attachment_header.eml',
|
||||
)
|
||||
|
||||
mailbox = Mailbox.objects.create()
|
||||
msg = mailbox.process_incoming_message(email_object)
|
||||
|
||||
expected_count = 1
|
||||
actual_count = msg.attachments.count()
|
||||
|
||||
self.assertEqual(
|
||||
expected_count,
|
||||
actual_count,
|
||||
)
|
||||
|
||||
attachment = msg.attachments.all()[0]
|
||||
self.assertEqual(
|
||||
attachment.get_filename(),
|
||||
u'\xc3\xb0\xcc\x9eo\xce\xb2\xcc\x9ele.png',
|
||||
)
|
||||
|
||||
def test_message_with_utf8_attachment_header(self):
|
||||
""" Ensure that we properly handle UTF-8 encoded attachment
|
||||
|
||||
|
|
@ -138,13 +110,13 @@ class TestProcessEmail(EmailMessageTestCase):
|
|||
attachment = msg.attachments.all()[0]
|
||||
self.assertEqual(
|
||||
attachment.get_filename(),
|
||||
u'pi\u0142kochwyty.jpg'
|
||||
'pi\u0142kochwyty.jpg'
|
||||
)
|
||||
|
||||
attachment = msg.attachments.all()[1]
|
||||
self.assertEqual(
|
||||
attachment.get_filename(),
|
||||
u'odpowied\u017a Burmistrza.jpg'
|
||||
'odpowied\u017a Burmistrza.jpg'
|
||||
)
|
||||
|
||||
def test_message_get_text_body(self):
|
||||
|
|
@ -187,7 +159,7 @@ class TestProcessEmail(EmailMessageTestCase):
|
|||
'messages/generic_message.eml'
|
||||
)
|
||||
) as f:
|
||||
unicode_body = six.u(f.read())
|
||||
unicode_body = f.read()
|
||||
|
||||
message = Message()
|
||||
message.body = unicode_body
|
||||
|
|
@ -281,10 +253,8 @@ class TestProcessEmail(EmailMessageTestCase):
|
|||
|
||||
msg = self.mailbox.process_incoming_message(email_object)
|
||||
|
||||
expected_text = six.u(
|
||||
'This message contains funny UTF16 characters like this one: '
|
||||
'"\xc2\xa0" and this one "\xe2\x9c\xbf".'
|
||||
)
|
||||
expected_text = 'This message contains funny UTF16 characters ' + \
|
||||
'like this one: "\xc2\xa0" and this one "\xe2\x9c\xbf".'
|
||||
actual_text = msg.text
|
||||
|
||||
self.assertEqual(
|
||||
|
|
@ -320,14 +290,12 @@ class TestProcessEmail(EmailMessageTestCase):
|
|||
msg = self.mailbox.process_incoming_message(email_object)
|
||||
|
||||
actual_text = msg.text
|
||||
expected_body = six.u(
|
||||
'\u042d\u0442\u043e '
|
||||
'\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 '
|
||||
'\u0438\u043c\u0435\u0435\u0442 '
|
||||
'\u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d'
|
||||
'\u0443\u044e '
|
||||
expected_body = '\u042d\u0442\u043e ' + \
|
||||
'\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 ' + \
|
||||
'\u0438\u043c\u0435\u0435\u0442 ' + \
|
||||
'\u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d' + \
|
||||
'\u0443\u044e ' + \
|
||||
'\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430.'
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
actual_text,
|
||||
|
|
@ -341,23 +309,15 @@ class TestProcessEmail(EmailMessageTestCase):
|
|||
|
||||
msg = self.mailbox.process_incoming_message(email_object)
|
||||
|
||||
expected_subject = six.u(
|
||||
'\u00D3\u00E7\u00ED\u00E0\u00E9 \u00EA\u00E0\u00EA '
|
||||
'\u00E7\u00E0\u00F0\u00E0\u00E1\u00E0\u00F2\u00FB\u00E2'
|
||||
'\u00E0\u00F2\u00FC \u00EE\u00F2 1000$ \u00E2 '
|
||||
expected_subject = '\u00D3\u00E7\u00ED\u00E0\u00E9 \u00EA\u00E0\u00EA ' + \
|
||||
'\u00E7\u00E0\u00F0\u00E0\u00E1\u00E0\u00F2\u00FB\u00E2' + \
|
||||
'\u00E0\u00F2\u00FC \u00EE\u00F2 1000$ \u00E2 ' + \
|
||||
'\u00ED\u00E5\u00E4\u00E5\u00EB\u00FE!'
|
||||
)
|
||||
actual_subject = msg.subject
|
||||
self.assertEqual(actual_subject, expected_subject)
|
||||
|
||||
if sys.version_info >= (3, 3):
|
||||
# There were various bugfixes in Py3k's email module,
|
||||
# this is apparently one of them.
|
||||
expected_from = six.u('test test <mr.test32@mail.ru>')
|
||||
else:
|
||||
expected_from = six.u('test test<mr.test32@mail.ru>')
|
||||
expected_from = 'test test <mr.test32@mail.ru>'
|
||||
actual_from = msg.from_header
|
||||
|
||||
self.assertEqual(expected_from, actual_from)
|
||||
|
||||
def test_message_reply(self):
|
||||
|
|
@ -426,15 +386,15 @@ class TestProcessEmail(EmailMessageTestCase):
|
|||
|
||||
msg = self.mailbox.process_incoming_message(message)
|
||||
|
||||
actual_email_object = msg.get_email_object()
|
||||
|
||||
self.assertNotEquals(msg.eml, None)
|
||||
|
||||
self.assertTrue(msg.eml.name.endswith('.eml'))
|
||||
|
||||
with open(msg.eml.name, 'rb') as f:
|
||||
self.assertEqual(f.read(),
|
||||
self._get_email_as_text('generic_message.eml'))
|
||||
self.assertEqual(
|
||||
f.read(),
|
||||
self._get_email_as_text('generic_message.eml')
|
||||
)
|
||||
|
||||
def test_message_saving_ignored(self):
|
||||
message = self._get_email_object('generic_message.eml')
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
from distutils.version import LooseVersion
|
||||
import mock
|
||||
from unittest import mock
|
||||
|
||||
from django.core.management import call_command, CommandError
|
||||
from django.test import TestCase
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
import mock
|
||||
import six
|
||||
from unittest import mock
|
||||
|
||||
from django.test.utils import override_settings
|
||||
|
||||
|
|
@ -9,24 +8,22 @@ from django_mailbox.transports import ImapTransport, Pop3Transport
|
|||
FAKE_UID_SEARCH_ANSWER = (
|
||||
'OK',
|
||||
[
|
||||
six.b(
|
||||
'18 19 20 21 22 23 24 25 26 27 28 29 '
|
||||
'30 31 32 33 34 35 36 37 38 39 40 41 42 43 44'
|
||||
)
|
||||
b'18 19 20 21 22 23 24 25 26 27 28 29 ' +
|
||||
b'30 31 32 33 34 35 36 37 38 39 40 41 42 43 44'
|
||||
]
|
||||
)
|
||||
FAKE_UID_FETCH_SIZES = (
|
||||
'OK',
|
||||
[
|
||||
six.b('1 (UID 18 RFC822.SIZE 58070000000)'),
|
||||
six.b('2 (UID 19 RFC822.SIZE 2593)')
|
||||
b'1 (UID 18 RFC822.SIZE 58070000000)',
|
||||
b'2 (UID 19 RFC822.SIZE 2593)'
|
||||
]
|
||||
)
|
||||
FAKE_UID_FETCH_MSG = (
|
||||
'OK',
|
||||
[
|
||||
(
|
||||
six.b('1 (UID 18 RFC822 {5807}'),
|
||||
b'1 (UID 18 RFC822 {5807}',
|
||||
get_email_as_text('generic_message.eml')
|
||||
),
|
||||
]
|
||||
|
|
@ -34,13 +31,13 @@ FAKE_UID_FETCH_MSG = (
|
|||
FAKE_UID_COPY_MSG = (
|
||||
'OK',
|
||||
[
|
||||
six.b('[COPYUID 1 2 2] (Success)')
|
||||
b'[COPYUID 1 2 2] (Success)'
|
||||
]
|
||||
)
|
||||
FAKE_LIST_ARCHIVE_FOLDERS_ANSWERS = (
|
||||
'OK',
|
||||
[
|
||||
six.b('(\\HasNoChildren \\All) "/" "[Gmail]/All Mail"')
|
||||
b'(\\HasNoChildren \\All) "/" "[Gmail]/All Mail"'
|
||||
]
|
||||
)
|
||||
|
||||
|
|
@ -66,12 +63,12 @@ class IMAPTestCase(EmailMessageTestCase):
|
|||
self.imap_server = mock.Mock()
|
||||
self.imap_server.uid = imap_server_uid_method
|
||||
self.imap_server.list = imap_server_list_method
|
||||
super(IMAPTestCase, self).setUp()
|
||||
super().setUp()
|
||||
|
||||
|
||||
class TestImapTransport(IMAPTestCase):
|
||||
def setUp(self):
|
||||
super(TestImapTransport, self).setUp()
|
||||
super().setUp()
|
||||
self.arbitrary_hostname = 'one.two.three'
|
||||
self.arbitrary_port = 100
|
||||
self.ssl = False
|
||||
|
|
@ -92,7 +89,7 @@ class TestImapTransport(IMAPTestCase):
|
|||
|
||||
class TestImapArchivedTransport(TestImapTransport):
|
||||
def setUp(self):
|
||||
super(TestImapArchivedTransport, self).setUp()
|
||||
super().setUp()
|
||||
self.archive = 'Archive'
|
||||
self.transport = ImapTransport(
|
||||
self.arbitrary_hostname,
|
||||
|
|
@ -107,7 +104,7 @@ class TestMaxSizeImapTransport(TestImapTransport):
|
|||
|
||||
@override_settings(DJANGO_MAILBOX_MAX_MESSAGE_SIZE=5807)
|
||||
def setUp(self):
|
||||
super(TestMaxSizeImapTransport, self).setUp()
|
||||
super().setUp()
|
||||
|
||||
self.transport = ImapTransport(
|
||||
self.arbitrary_hostname,
|
||||
|
|
@ -142,7 +139,7 @@ class TestPop3Transport(EmailMessageTestCase):
|
|||
self.ssl
|
||||
)
|
||||
self.transport.server = None
|
||||
super(TestPop3Transport, self).setUp()
|
||||
super().setUp()
|
||||
|
||||
def test_get_email_message(self):
|
||||
with mock.patch.object(self.transport, 'server') as server:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue