Skip to content

Commit 5cf0eb9

Browse files
committed
ee
1 parent b9310b3 commit 5cf0eb9

File tree

2 files changed

+23
-15
lines changed

2 files changed

+23
-15
lines changed

backend/notifications/tasks.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
from celery.exceptions import MaxRetriesExceededError
12
import logging
3+
import smtplib
24
from uuid import uuid4
35
from notifications.models import SentEmail
46
from django.db import transaction
@@ -11,7 +13,6 @@
1113

1214
@app.task(
1315
bind=True,
14-
autoretry_for=(Exception,),
1516
retry_backoff=5,
1617
max_retries=5,
1718
)
@@ -34,18 +35,28 @@ def send_pending_email(self, sent_email_id: int):
3435
if not sent_email:
3536
return
3637

37-
email_backend_connection = get_connection()
38+
try:
39+
email_backend_connection = get_connection()
3840

39-
if self.request.retries > self.max_retries:
41+
message_id = send_email(sent_email, email_backend_connection)
42+
sent_email.mark_as_sent(message_id)
43+
except smtplib.SMTPException as e:
44+
try:
45+
raise self.retry(e)
46+
except MaxRetriesExceededError:
47+
sent_email.mark_as_failed()
48+
logger.error(
49+
"Failed to send email sent_email_id=%s",
50+
sent_email.id,
51+
)
52+
return
53+
except Exception as e:
4054
sent_email.mark_as_failed()
4155
logger.error(
4256
"Failed to send email sent_email_id=%s",
4357
sent_email.id,
4458
)
45-
return
46-
47-
message_id = send_email(sent_email, email_backend_connection)
48-
sent_email.mark_as_sent(message_id)
59+
raise e
4960

5061
logger.info(
5162
"Email sent_email_id=%s sent with message_id=%s",

backend/notifications/tests/test_tasks.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from unittest import mock
1+
import smtplib
22
from unittest.mock import patch
33
import time_machine
44
from django.core import mail
@@ -83,19 +83,16 @@ def test_send_pending_email_handles_failures(mocker):
8383
def _side_effect(*args, **kwargs):
8484
if _side_effect.counter == 0:
8585
_side_effect.counter = 1
86-
raise ValueError("test")
86+
raise smtplib.SMTPException("test")
8787

8888
return original_method(pending_email_1, *args, **kwargs)
8989

9090
_side_effect.counter = 0
9191

92-
mocker.patch("notifications.tasks.SentEmail.mark_as_sent", side_effect=_side_effect)
92+
mocker.patch("notifications.tasks.send_email", side_effect=_side_effect)
9393

94-
with time_machine.travel("2021-01-01 12:00Z", tick=False), mock.patch(
95-
"celery.app.task.Task.request"
96-
) as mock_task_request:
97-
mock_task_request.retries = 10
98-
send_pending_email(pending_email_1.id)
94+
with time_machine.travel("2021-01-01 12:00Z", tick=False):
95+
send_pending_email.apply(kwargs={"sent_email_id": pending_email_1.id})
9996

10097
pending_email_1.refresh_from_db()
10198

0 commit comments

Comments
 (0)