From 4e91ce19b19dc1514009bb075a6b9cf2777edc84 Mon Sep 17 00:00:00 2001 From: uzairr Date: Tue, 30 Jan 2018 14:16:48 +0500 Subject: [PATCH] Handle Exception in getting cookies from Sailthru In order to send email, cookies are required from Sailthru, ocassionally, celery task fails possibly because of request timeout that ultimately fails login.To avoid it,generic exception handler is added so that login will not fail in future. LEARNER-3465 --- lms/djangoapps/email_marketing/signals.py | 3 +++ .../email_marketing/tests/test_signals.py | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/lms/djangoapps/email_marketing/signals.py b/lms/djangoapps/email_marketing/signals.py index af4d0ad7af..27e5fd3eb3 100644 --- a/lms/djangoapps/email_marketing/signals.py +++ b/lms/djangoapps/email_marketing/signals.py @@ -97,6 +97,9 @@ def add_email_marketing_cookies(sender, response=None, user=None, except SailthruClientError as exc: log.error("Exception attempting to obtain cookie from Sailthru: %s", unicode(exc)) return response + except Exception: + log.error("Exception Connecting to celery task for %s", user.email) + return response if not cookie: log.error("No cookie returned attempting to obtain cookie from Sailthru for %s", user.email) diff --git a/lms/djangoapps/email_marketing/tests/test_signals.py b/lms/djangoapps/email_marketing/tests/test_signals.py index ca34b3f4dc..1196a9c793 100644 --- a/lms/djangoapps/email_marketing/tests/test_signals.py +++ b/lms/djangoapps/email_marketing/tests/test_signals.py @@ -195,6 +195,21 @@ class EmailMarketingTests(TestCase): self.assertEquals(userparms['vars']['activated'], 1) self.assertEquals(userparms['lists']['new list'], 1) + @patch('lms.djangoapps.email_marketing.signals.get_email_cookies_via_sailthru.delay') + def test_drop_cookie_task_error(self, mock_email_cookies): + """ + Tests that task error is handled + """ + mock_email_cookies.return_value = {} + mock_email_cookies.get.side_effect = Exception + with LogCapture(LOGGER_NAME, level=logging.INFO) as logger: + add_email_marketing_cookies(None, response=None, user=self.user) + logger.check(( + LOGGER_NAME, 'ERROR', 'Exception Connecting to celery task for {}'.format( + self.user.email + ) + )) + @patch('email_marketing.tasks.log.error') @patch('email_marketing.tasks.SailthruClient.api_post') @patch('email_marketing.tasks.SailthruClient.api_get')