From 4c7a1a7f1f4d1eaf0060b7dc6eba3155b8e56e55 Mon Sep 17 00:00:00 2001 From: Roman Prykhodchenko Date: Thu, 6 Apr 2017 13:36:10 +0200 Subject: [PATCH] Do not mute KeyErrors in chm subscriber (#3007) --- src/ralph/operations/changemanagement/exceptions.py | 2 ++ src/ralph/operations/changemanagement/jira.py | 3 ++- src/ralph/operations/changemanagement/subscribtions.py | 6 +++--- src/ralph/operations/tests/test_event_receiver.py | 10 ++++++++++ src/ralph/operations/tests/test_jira_processor.py | 5 +++-- 5 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 src/ralph/operations/changemanagement/exceptions.py diff --git a/src/ralph/operations/changemanagement/exceptions.py b/src/ralph/operations/changemanagement/exceptions.py new file mode 100644 index 0000000000..5a475e7ab3 --- /dev/null +++ b/src/ralph/operations/changemanagement/exceptions.py @@ -0,0 +1,2 @@ +class IgnoreOperation(Exception): + message = 'Ignoring the opertaion.' diff --git a/src/ralph/operations/changemanagement/jira.py b/src/ralph/operations/changemanagement/jira.py index 509a67a1f2..b46fad2ea4 100644 --- a/src/ralph/operations/changemanagement/jira.py +++ b/src/ralph/operations/changemanagement/jira.py @@ -4,6 +4,7 @@ from dateutil.parser import parse as parse_datetime from django.conf import settings +from ralph.operations.changemanagement.exceptions import IgnoreOperation from ralph.operations.models import OperationStatus @@ -42,7 +43,7 @@ def get_operation_status(event_data): 'Received an operation with unexpected ' 'status: {}. Please check the settings.'.format(status_str) ) - raise + raise IgnoreOperation() def get_operation_name(event_data): diff --git a/src/ralph/operations/changemanagement/subscribtions.py b/src/ralph/operations/changemanagement/subscribtions.py index 9e7c6f46dc..8868e152fb 100644 --- a/src/ralph/operations/changemanagement/subscribtions.py +++ b/src/ralph/operations/changemanagement/subscribtions.py @@ -7,6 +7,7 @@ from django.db import transaction from ralph.assets.models import BaseObject +from ralph.operations.changemanagement.exceptions import IgnoreOperation from ralph.operations.models import Operation, OperationType @@ -107,9 +108,8 @@ def receive_chm_event(event_data): if base_object_loader is not None else None ) ) - except KeyError: - # Silence already logged errors. - pass + except IgnoreOperation as e: + logger.warning(e.message) except Exception as e: logger.exception( 'Encountered an unexpected failure while handling a change ' diff --git a/src/ralph/operations/tests/test_event_receiver.py b/src/ralph/operations/tests/test_event_receiver.py index b012625267..6d647eaf9f 100644 --- a/src/ralph/operations/tests/test_event_receiver.py +++ b/src/ralph/operations/tests/test_event_receiver.py @@ -1,6 +1,8 @@ import json from os import path +from unittest import mock +from ralph.operations.changemanagement.exceptions import IgnoreOperation from ralph.operations.changemanagement.subscribtions import receive_chm_event from ralph.operations.models import Operation, OperationStatus from ralph.tests import RalphTestCase @@ -49,6 +51,14 @@ def test_no_record_created_unknown_operation_type(self): with self.assertRaises(Operation.DoesNotExist): Operation.objects.get(ticket_id='SOMEPROJ-42') + @mock.patch('ralph.operations.changemanagement.jira.get_ticket_id', + side_effect=IgnoreOperation()) + def test_no_record_created_when_IgnoreOperation_is_rised(self, m_get): + receive_chm_event(self.jira_event) + + with self.assertRaises(Operation.DoesNotExist): + Operation.objects.get(ticket_id='SOMEPROJ-42') + def test_no_record_created_unknown_operation_status(self): self.jira_event['issue']['fields']['status']['name'] = 'DEADBEEF' diff --git a/src/ralph/operations/tests/test_jira_processor.py b/src/ralph/operations/tests/test_jira_processor.py index 52fd28b584..ea4926a7c0 100644 --- a/src/ralph/operations/tests/test_jira_processor.py +++ b/src/ralph/operations/tests/test_jira_processor.py @@ -3,6 +3,7 @@ from os import path from ralph.operations.changemanagement import jira +from ralph.operations.changemanagement.exceptions import IgnoreOperation from ralph.operations.models import OperationStatus from ralph.tests import RalphTestCase @@ -74,8 +75,8 @@ def test_get_operation_status(self): jira.get_operation_status(self.jira_event) ) - def test_get_operation_status_bad_status_raises_KeyError(self): + def test_get_operation_status_bad_status_raises_IgnoreOperation(self): self.jira_event['issue']['fields']['status']['name'] = 'DEADBEEF' - with self.assertRaises(KeyError): + with self.assertRaises(IgnoreOperation): jira.get_operation_status(self.jira_event)