Skip to content
Open
41 changes: 4 additions & 37 deletions lambdas/mns_subscription/src/mns_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,7 @@

from common.authentication import AppRestrictedAuth
from common.models.errors import (
ResourceNotFoundError,
UnhandledResponseError,
)
from models.errors import (
BadRequestError,
ConflictError,
ServerError,
TokenValidationError,
UnauthorizedError,
raise_error_response,
)

SQS_ARN = os.getenv("SQS_ARN")
Expand Down Expand Up @@ -61,7 +53,7 @@ def subscribe_notification(self) -> dict | None:
if response.status_code in (200, 201):
return response.json()
else:
MnsService.raise_error_response(response)
raise_error_response(response)

def get_subscription(self) -> dict | None:
response = requests.get(MNS_URL, headers=self.request_headers, timeout=10)
Expand All @@ -79,7 +71,7 @@ def get_subscription(self) -> dict | None:
return resource
return None
else:
MnsService.raise_error_response(response)
raise_error_response(response)

def check_subscription(self) -> dict:
"""
Expand Down Expand Up @@ -107,7 +99,7 @@ def delete_subscription(self, subscription_id: str) -> str:
logging.info(f"Deleted subscription {subscription_id}")
return "Subscription Successfully Deleted..."
else:
MnsService.raise_error_response(response)
raise_error_response(response)

def check_delete_subscription(self):
try:
Expand All @@ -123,28 +115,3 @@ def check_delete_subscription(self):
return "Subscription successfully deleted"
except Exception as e:
return f"Error deleting subscription: {str(e)}"

@staticmethod
def raise_error_response(response):
error_mapping = {
401: (TokenValidationError, "Token validation failed for the request"),
400: (
BadRequestError,
"Bad request: Resource type or parameters incorrect",
),
403: (
UnauthorizedError,
"You don't have the right permissions for this request",
),
500: (ServerError, "Internal Server Error"),
404: (ResourceNotFoundError, "Subscription or Resource not found"),
409: (ConflictError, "SQS Queue Already Subscribed, can't re-subscribe"),
}
exception_class, error_message = error_mapping.get(
response.status_code,
(UnhandledResponseError, f"Unhandled error: {response.status_code}"),
)

if response.status_code == 404:
raise exception_class(resource_type=response.json(), resource_id=error_message)
raise exception_class(response=response.json(), message=error_message)
99 changes: 0 additions & 99 deletions lambdas/mns_subscription/src/models/errors.py

This file was deleted.

100 changes: 0 additions & 100 deletions lambdas/mns_subscription/tests/test_errors.py

This file was deleted.

29 changes: 14 additions & 15 deletions lambdas/mns_subscription/tests/test_mns_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,15 @@

from common.authentication import AppRestrictedAuth
from common.models.errors import (
ResourceNotFoundError,
UnhandledResponseError,
)
from mns_service import MNS_URL, MnsService
from models.errors import (
BadRequestError,
ForbiddenError,
ResourceNotFoundError,
ServerError,
TokenValidationError,
UnauthorizedError,
UnhandledResponseError,
raise_error_response,
)
from mns_service import MNS_URL, MnsService

SQS_ARN = "arn:aws:sqs:eu-west-2:123456789012:my-queue"

Expand Down Expand Up @@ -64,7 +63,7 @@ def test_not_found_subscription(self, mock_post):

with self.assertRaises(ResourceNotFoundError) as context:
service.subscribe_notification()
self.assertIn("Subscription or Resource not found", str(context.exception))
self.assertIn("Resource not found", str(context.exception))

@patch("mns_service.requests.post")
def test_unhandled_error(self, mock_post):
Expand Down Expand Up @@ -171,7 +170,7 @@ def test_delete_subscription_403(self, mock_delete):
mock_delete.return_value = mock_response

service = MnsService(self.authenticator)
with self.assertRaises(UnauthorizedError):
with self.assertRaises(ForbiddenError):
service.delete_subscription("sub-id-123")

@patch("mns_service.requests.delete")
Expand Down Expand Up @@ -255,26 +254,26 @@ def mock_response(self, status_code, json_data=None):
def test_404_resource_found_error(self):
resp = self.mock_response(404, {"resource": "Not found"})
with self.assertRaises(ResourceNotFoundError) as context:
MnsService.raise_error_response(resp)
self.assertIn("Subscription or Resource not found", str(context.exception))
self.assertEqual(context.exception.resource_id, "Subscription or Resource not found")
raise_error_response(resp)
self.assertIn("Resource not found", str(context.exception))
self.assertEqual(context.exception.resource_id, "Resource not found")
self.assertEqual(context.exception.resource_type, {"resource": "Not found"})

def test_400_bad_request_error(self):
resp = self.mock_response(400, {"resource": "Invalid"})
with self.assertRaises(BadRequestError) as context:
MnsService.raise_error_response(resp)
self.assertIn("Bad request: Resource type or parameters incorrect", str(context.exception))
raise_error_response(resp)
self.assertIn("Bad request", str(context.exception))
self.assertEqual(
context.exception.message,
"Bad request: Resource type or parameters incorrect",
"Bad request",
)
self.assertEqual(context.exception.response, {"resource": "Invalid"})

def test_unhandled_status_code(self):
resp = self.mock_response(418, {"resource": 1234})
with self.assertRaises(UnhandledResponseError) as context:
MnsService.raise_error_response(resp)
raise_error_response(resp)
self.assertIn("Unhandled error: 418", str(context.exception))
self.assertEqual(context.exception.response, {"resource": 1234})

Expand Down
1 change: 1 addition & 0 deletions lambdas/shared/src/common/models/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ class Constants:

COMPLETED_STATUS = "completed"
REINSTATED_RECORD_STATUS = "reinstated"
RETRYABLE_STATUS_CODES = {429, 500, 502, 503, 504}


class Urls:
Expand Down
Loading