Skip to content

Commit 12b7868

Browse files
committed
Add support for Python 3.7 and Django 2.1. Remove old code for Django < 1.3. Bump version.
1 parent 21d9399 commit 12b7868

File tree

10 files changed

+56
-80
lines changed

10 files changed

+56
-80
lines changed

README.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ You can read the package documentation at http://django-yubin.readthedocs.org/en
8181

8282
Changelog
8383
---------
84+
* 1.3.0 Allow to send emails inmediatly without being saved in database (priority «now-not-queue»). Add support for Python 3.7 and Django 2.1. Remove old code for Django < 1.3.
8485
* 1.2.0 Fix is_base64 detection. Add a «send_test_email» command to check connection parameters. New health check view. Don't open a connection if there are no messages in queue to send. Add a "date_sent" field to detect when the mail was sent.
8586
* 1.1.0 Fix attachment headers in TemplateAttachmentEmailMessagView making both "attachment" and "filename" args mandatory.
8687
* 1.0.5 Add missing paths in MANIFEST.in.

django_yubin/__init__.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,11 @@ def queue_email_message(email_message, fail_silently=False, priority=None):
115115
settings.MAILER_TEST_EMAIL)
116116

117117
if priority == constants.PRIORITY_NOW_NOT_QUEUED:
118-
if constants.EMAIL_BACKEND_SUPPORT:
119-
from django.core.mail import get_connection
120-
from django_yubin.engine import send_message
121-
connection = get_connection(backend=settings.USE_BACKEND)
122-
result = send_message(email_message, smtp_connection=connection)
123-
return (result == constants.RESULT_SENT)
124-
else:
125-
return email_message.send()
118+
from django.core.mail import get_connection
119+
from django_yubin.engine import send_message
120+
connection = get_connection(backend=settings.USE_BACKEND)
121+
result = send_message(email_message, smtp_connection=connection)
122+
return (result == constants.RESULT_SENT)
126123

127124
count = 0
128125
for to_email in email_message.recipients():

django_yubin/constants.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,3 @@
2424
}
2525

2626
PRIORITY_HEADER = 'X-Mail-Queue-Priority'
27-
28-
try:
29-
from django.core.mail import get_connection # noqa:F401
30-
EMAIL_BACKEND_SUPPORT = True
31-
except ImportError:
32-
# Django version < 1.2
33-
EMAIL_BACKEND_SUPPORT = False

django_yubin/engine.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
Methods here actually handle the sending of queued messages.
99
1010
"""
11+
from django.core.mail import get_connection
1112
from django.utils.encoding import smart_str
1213
from django.utils.timezone import now
1314
from django_yubin import constants, models, settings
@@ -24,11 +25,6 @@
2425

2526
logger = logging.getLogger('django_yubin.engine')
2627

27-
if constants.EMAIL_BACKEND_SUPPORT:
28-
from django.core.mail import get_connection
29-
else:
30-
from django.core.mail import SMTPConnection as get_connection
31-
logger.warn('DEPRECATION WARNING. Support for Django<1.3 would be removed')
3228

3329
LOCK_PATH = settings.LOCK_PATH or os.path.join(tempfile.gettempdir(),
3430
'send_mail')
@@ -109,10 +105,7 @@ def send_all(block_size=500, backend=None, messages=None, message_limit=0):
109105
logger.info('No messages in queue.')
110106
return
111107

112-
if constants.EMAIL_BACKEND_SUPPORT:
113-
connection = get_connection(backend=backend)
114-
else:
115-
connection = get_connection()
108+
connection = get_connection(backend=backend)
116109
blacklist = models.Blacklist.objects.values_list('email', flat=True)
117110
connection.open()
118111
for message in messages_list:

docs/install.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Installation
33
============
44

5-
An obvious prerequisite of django-yubin is Django - 1.3 is the
5+
An obvious prerequisite of django-yubin is Django - 1.9 is the
66
minimum supported version.
77

88

docs/queue.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ need to periodically tell it to clear the queue and actually send the mail.
88
The latter is done via a command extension.
99

1010

11-
Putting Mail On The Queue (Django 1.3 or higher)
11+
Putting Mail On The Queue
1212
=================================================
1313

1414
In settings.py, configure Django's EMAIL_BACKEND setting like so:

setup.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
setup(
2525
name='django-yubin',
26-
version='1.2.0',
26+
version='1.3.0',
2727
description=("A reusable Django app for composing and queueing emails "
2828
"Adds django-mailer2 + django-mailviews + others"),
2929
long_description=long_description,
@@ -52,10 +52,12 @@
5252
'Programming Language :: Python :: 3.4',
5353
'Programming Language :: Python :: 3.5',
5454
'Programming Language :: Python :: 3.6',
55+
'Programming Language :: Python :: 3.7',
5556
'Framework :: Django',
5657
'Framework :: Django :: 1.9',
5758
'Framework :: Django :: 1.10',
5859
'Framework :: Django :: 1.11',
5960
'Framework :: Django :: 2.0',
61+
'Framework :: Django :: 2.1',
6062
]
6163
)

tests/tests/test_backend.py

Lines changed: 28 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -7,79 +7,67 @@
77
from django.conf import settings as django_settings
88
from django.core import mail
99

10-
from django_yubin import models, constants, queue_email_message, settings, mail_admins, mail_managers
10+
from django_yubin import models, constants, settings, mail_admins, mail_managers
1111

1212
from .base import MailerTestCase, RFC_6532_SUPPORT
1313

1414

1515
class TestBackend(MailerTestCase):
1616
"""
1717
Backend tests for the django_yubin app.
18-
19-
For Django versions less than 1.2, these tests are still run but they just
20-
use the queue_email_message funciton rather than directly sending messages.
21-
2218
"""
2319

2420
def setUp(self):
2521
super(TestBackend, self).setUp()
26-
if constants.EMAIL_BACKEND_SUPPORT:
27-
if hasattr(django_settings, 'EMAIL_BACKEND'):
28-
self.old_email_backend = django_settings.EMAIL_BACKEND
29-
else:
30-
self.old_email_backend = None
31-
django_settings.EMAIL_BACKEND = 'django_yubin.smtp_queue.'\
32-
'EmailBackend'
22+
if hasattr(django_settings, 'EMAIL_BACKEND'):
23+
self.old_email_backend = django_settings.EMAIL_BACKEND
24+
else:
25+
self.old_email_backend = None
26+
django_settings.EMAIL_BACKEND = 'django_yubin.smtp_queue.'\
27+
'EmailBackend'
3328

3429
def tearDown(self):
3530
super(TestBackend, self).tearDown()
36-
if constants.EMAIL_BACKEND_SUPPORT:
37-
if self.old_email_backend:
38-
django_settings.EMAIL_BACKEND = self.old_email_backend
39-
else:
40-
delattr(django_settings, 'EMAIL_BACKEND')
41-
42-
def send_message(self, msg):
43-
if constants.EMAIL_BACKEND_SUPPORT:
44-
msg.send()
31+
if self.old_email_backend:
32+
django_settings.EMAIL_BACKEND = self.old_email_backend
4533
else:
46-
queue_email_message(msg)
34+
delattr(django_settings, 'EMAIL_BACKEND')
4735

4836
def testQueuedMessagePriorities(self):
4937
# now_not_queued priority message
5038
msg = mail.EmailMessage(subject='subject', body='body',
5139
from_email='[email protected]', to=['[email protected]'],
5240
headers={'X-Mail-Queue-Priority': 'now-not-queued'})
53-
self.send_message(msg)
41+
msg.send()
5442

5543
# now priority message
5644
msg = mail.EmailMessage(subject='subject', body='body',
5745
from_email='[email protected]', to=['[email protected]'],
5846
headers={'X-Mail-Queue-Priority': 'now'})
59-
self.send_message(msg)
47+
msg.send()
6048

6149
# high priority message
6250
msg = mail.EmailMessage(subject='subject', body='body',
6351
from_email='[email protected]', to=['[email protected]'],
6452
headers={'X-Mail-Queue-Priority': 'high'})
65-
self.send_message(msg)
53+
msg.send()
6654

6755
# low priority message
6856
msg = mail.EmailMessage(subject='subject', body='body',
6957
from_email='[email protected]', to=['[email protected]'],
7058
headers={'X-Mail-Queue-Priority': 'low'})
71-
self.send_message(msg)
59+
msg.send()
7260

7361
# normal priority message
7462
msg = mail.EmailMessage(subject='subject', body='body',
7563
from_email='[email protected]', to=['[email protected]'],
7664
headers={'X-Mail-Queue-Priority': 'normal'})
77-
self.send_message(msg)
65+
msg.send()
7866

7967
# normal priority message (no explicit priority header)
8068
msg = mail.EmailMessage(subject='subject', body='body',
8169
from_email='[email protected]', to=['[email protected]'])
82-
self.send_message(msg)
70+
msg.send()
8371

8472
qs = models.Message.objects.all()
8573
self.assertEqual(qs.count(), 5)
@@ -113,9 +101,9 @@ def testUnicodeQueuedMessage(self):
113101
"""
114102
from django.core.management import call_command
115103
msg = mail.EmailMessage(subject='subject', body='body',
116-
from_email=u'juan.ló[email protected]', to=['[email protected]'],
117-
headers={'X-Mail-Queue-Priority': 'normal'})
118-
self.send_message(msg)
104+
from_email=u'juan.ló[email protected]', to=['[email protected]'],
105+
headers={'X-Mail-Queue-Priority': 'normal'})
106+
msg.send()
119107
queued_messages = models.QueuedMessage.objects.all()
120108
self.assertEqual(queued_messages.count(), 1)
121109
call_command('send_mail', verbosity='0')
@@ -131,9 +119,9 @@ def testUnicodePriorityMessage(self):
131119
"""
132120
from django.core.management import call_command
133121
msg = mail.EmailMessage(subject=u'á subject', body='body',
134-
from_email=u'juan.ló[email protected]', to=[u'únñ[email protected]'],
135-
headers={'X-Mail-Queue-Priority': 'now'})
136-
self.send_message(msg)
122+
from_email=u'juan.ló[email protected]', to=[u'únñ[email protected]'],
123+
headers={'X-Mail-Queue-Priority': 'now'})
124+
msg.send()
137125
queued_messages = models.QueuedMessage.objects.all()
138126
self.assertEqual(queued_messages.count(), 1)
139127
call_command('send_mail', verbosity='0')
@@ -143,9 +131,9 @@ def testUnicodePriorityMessage(self):
143131
def testSendMessageNowPriority(self):
144132
# NOW priority message
145133
msg = mail.EmailMessage(subject='subject', body='body',
146-
from_email='[email protected]', to=['[email protected]'],
147-
headers={'X-Mail-Queue-Priority': 'now'})
148-
self.send_message(msg)
134+
from_email='[email protected]', to=['[email protected]'],
135+
headers={'X-Mail-Queue-Priority': 'now'})
136+
msg.send()
149137

150138
queued_messages = models.QueuedMessage.objects.all()
151139
self.assertEqual(queued_messages.count(), 0)
@@ -156,7 +144,7 @@ def testSendMessageTestMode(self):
156144
settings.MAILER_TEST_EMAIL = '[email protected]'
157145
msg = mail.EmailMessage(subject='subject', body='body',
158146
from_email='[email protected]', to=['[email protected]'])
159-
self.send_message(msg)
147+
msg.send()
160148

161149
queued_messages = models.QueuedMessage.objects.all()
162150

@@ -193,7 +181,6 @@ def testSendMessageManagersTestMode(self):
193181
self.assertTrue('X-Yubin-Test-Original: {}'.format(','.join(recipient_list)) in
194182
queued_messages[0].message.encoded_message)
195183

196-
197184
def testHighPriority(self):
198185
self.assertEqual(models.QueuedMessage.objects.all().count(), 0)
199186
self.assertEqual(models.Message.objects.all().count(), 0)
@@ -202,7 +189,7 @@ def testHighPriority(self):
202189
# Test with default priority
203190
msg = mail.EmailMessage(subject='subject 1', body='body',
204191
from_email='[email protected]', to=['[email protected]'])
205-
self.send_message(msg)
192+
msg.send()
206193

207194
self.assertEqual(models.Message.objects.all().count(), 1)
208195
self.assertEqual(models.QueuedMessage.objects.all().count(), 1)
@@ -212,7 +199,7 @@ def testHighPriority(self):
212199
msg = mail.EmailMessage(subject='subject 2', body='body',
213200
from_email='[email protected]', to=['[email protected]'],
214201
headers={'X-Mail-Queue-Priority': 'now'})
215-
self.send_message(msg)
202+
msg.send()
216203

217204
self.assertEqual(models.QueuedMessage.objects.all().count(), 1)
218205
self.assertEqual(models.Message.objects.all().count(), 2)

tests/tests/test_engine.py

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,12 @@ class SendMessageTest(MailerTestCase):
106106
def setUp(self):
107107
# Set EMAIL_BACKEND
108108
super(SendMessageTest, self).setUp()
109-
if constants.EMAIL_BACKEND_SUPPORT:
110-
if hasattr(django_settings, 'EMAIL_BACKEND'):
111-
self.old_email_backend = django_settings.EMAIL_BACKEND
112-
else:
113-
self.old_email_backend = None
114-
django_settings.EMAIL_BACKEND = 'django.core.mail.backends.smtp.' \
115-
'EmailBackend'
109+
if hasattr(django_settings, 'EMAIL_BACKEND'):
110+
self.old_email_backend = django_settings.EMAIL_BACKEND
111+
else:
112+
self.old_email_backend = None
113+
django_settings.EMAIL_BACKEND = 'django.core.mail.backends.smtp.' \
114+
'EmailBackend'
116115

117116
# Create somewhere to store the log debug output.
118117
self.output = StringIO()
@@ -130,11 +129,10 @@ def setUp(self):
130129
def tearDown(self):
131130
# Restore EMAIL_BACKEND
132131
super(SendMessageTest, self).tearDown()
133-
if constants.EMAIL_BACKEND_SUPPORT:
134-
if self.old_email_backend:
135-
django_settings.EMAIL_BACKEND = self.old_email_backend
136-
else:
137-
delattr(django_settings, 'EMAIL_BACKEND')
132+
if self.old_email_backend:
133+
django_settings.EMAIL_BACKEND = self.old_email_backend
134+
else:
135+
delattr(django_settings, 'EMAIL_BACKEND')
138136

139137
# Remove the log handler.
140138
logger = logging.getLogger('django_yubin')

tox.ini

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ envlist =
1313
py34-dj20
1414
py35-dj20
1515
py36-dj20
16+
py37-dj20
17+
py35-dj21
18+
py36-dj21
19+
py37-dj21
1620
skip_missing_interpreters = true
1721

1822

@@ -24,6 +28,7 @@ deps =
2428
dj110: Django>=1.10,<1.11
2529
dj111: Django>=1.11,<2.0
2630
dj20: Django>=2.0,<2.1
31+
dj21: Django>=2.1,<2.2
2732
commands=
2833
coverage run --rcfile={toxinidir}/.coveragerc {toxinidir}/setup.py test
2934
coverage report --omit=*test*

0 commit comments

Comments
 (0)