Add task clean_connection method

This commit is contained in:
jar3b 2018-12-05 20:29:19 +03:00
parent e4044ce150
commit 51554bf80c

View File

@ -1,5 +1,6 @@
# coding: utf-8 # coding: utf-8
import smtplib import smtplib
import ssl
import time import time
from socket import error as socket_error from socket import error as socket_error
@ -21,11 +22,12 @@ class PersitentEmailConnectionTask(celery.Task):
def connection(self): def connection(self):
if self._connection is None: if self._connection is None:
self._connection = get_email_connection() self._connection = get_email_connection()
print('NEW CONN')
else:
print('OLD CONN')
return self._connection return self._connection
def clean_connection(self):
self._connection = None
@celery.task(bind=True, base=PersitentEmailConnectionTask, queue=TASK_QUEUE_NAME, acks_late=True, @celery.task(bind=True, base=PersitentEmailConnectionTask, queue=TASK_QUEUE_NAME, acks_late=True,
default_retry_delay=20, autoretry_for=(EmailTransportException,), retry_kwargs={'max_retries': 5}) default_retry_delay=20, autoretry_for=(EmailTransportException,), retry_kwargs={'max_retries': 5})
@ -40,6 +42,10 @@ def send_message(self, email):
try: try:
email.connection = self.connection email.connection = self.connection
email.send() email.send()
except (ssl.SSLError, smtplib.SMTPServerDisconnected) as e:
# nullify connection
self.clean_connection()
raise self.retry(e, countdown=1)
except (socket_error, smtplib.SMTPSenderRefused, except (socket_error, smtplib.SMTPSenderRefused,
smtplib.SMTPRecipientsRefused, smtplib.SMTPRecipientsRefused,
smtplib.SMTPDataError, smtplib.SMTPDataError,