File tree Expand file tree Collapse file tree 2 files changed +23
-15
lines changed
Expand file tree Collapse file tree 2 files changed +23
-15
lines changed Original file line number Diff line number Diff line change 1+ from celery .exceptions import MaxRetriesExceededError
12import logging
3+ import smtplib
24from uuid import uuid4
35from notifications .models import SentEmail
46from django .db import transaction
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" ,
Original file line number Diff line number Diff line change 1- from unittest import mock
1+ import smtplib
22from unittest .mock import patch
33import time_machine
44from 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
You can’t perform that action at this time.
0 commit comments