99 ResourceFoundError ,
1010 UnauthorizedError ,
1111 ServerError ,
12- TokenValidationError
12+ BadRequestError ,
13+ TokenValidationError ,
14+ ConflictError
1315)
1416
1517SQS_ARN = os .getenv ("SQS_ARN" )
@@ -54,24 +56,8 @@ def subscribe_notification(self) -> dict | None:
5456
5557 if response .status_code in (200 , 201 ):
5658 return response .json ()
57- elif response .status_code == 409 :
58- msg = "SQS Queue Already Subscribed, can't re-subscribe"
59- raise UnhandledResponseError (response = response .json (), message = msg )
60- elif response .status_code == 401 :
61- msg = "SQS Queue Already Subscribed, can't re-subscribe"
62- raise TokenValidationError (response = response .json (), message = msg )
63- elif response .status_code == 400 :
64- msg = "Resource Type provided for this is not correct"
65- raise ResourceFoundError (response = response .json (), message = msg )
66- elif response .status_code == 403 :
67- msg = "You don't have the right permissions for this request"
68- raise UnauthorizedError (response = response .json (), message = msg )
69- elif response .status_code == 500 :
70- msg = "Internal Server Error"
71- raise ServerError (response = response .json (), message = msg )
7259 else :
73- msg = f"Unhandled error: { response .status_code } - { response .text } "
74- raise UnhandledResponseError (response = response .json (), message = msg )
60+ MnsService .handle_response (response )
7561
7662 def get_subscription (self ) -> dict | None :
7763 response = requests .get (MNS_URL , headers = self .request_headers )
@@ -80,30 +66,16 @@ def get_subscription(self) -> dict | None:
8066
8167 if response .status_code == 200 :
8268 bundle = response .json ()
83- # Assume a FHIR Bundle with 'entry' list
8469 for entry in bundle .get ("entry" , []):
8570 resource = entry .get ("resource" , entry )
8671 print (f"get resource sub: { resource } " )
8772 logging .debug (f"get resource sub: { resource } " )
8873 channel = resource .get ("channel" , {})
8974 if channel .get ("endpoint" ) == SQS_ARN :
90- return resource # Found a matching subscription
91- return None # No subscription for this SQS ARN
92- elif response .status_code == 401 :
93- msg = "Token validation failed for the request"
94- raise TokenValidationError (response = response .json (), message = msg )
95- elif response .status_code == 400 :
96- msg = "Bad request: Resource type or parameters incorrect"
97- raise ResourceFoundError (response = response .json (), message = msg )
98- elif response .status_code == 403 :
99- msg = "You don't have the right permissions for this request"
100- raise UnauthorizedError (response = response .json (), message = msg )
101- elif response .status_code == 500 :
102- msg = "Internal Server Error"
103- raise ServerError (response = response .json (), message = msg )
75+ return resource
76+ return None
10477 else :
105- msg = f"Unhandled error: { response .status_code } - { response .text } "
106- raise UnhandledResponseError (response = response .json (), message = msg )
78+ MnsService .handle_response (response )
10779
10880 def check_subscription (self ) -> dict :
10981 """
@@ -130,20 +102,12 @@ def delete_subscription(self, subscription_id: str) -> bool:
130102 if response .status_code in (200 , 204 ):
131103 logging .info (f"Deleted subscription { subscription_id } " )
132104 return True
133- elif response .status_code == 401 :
134- raise TokenValidationError (response = response .json (), message = "Token validation failed for the request" )
135- elif response .status_code == 404 :
136- raise ResourceFoundError (response = response .json (), message = f"Subscription { subscription_id } not found" )
137- elif response .status_code == 403 :
138- raise UnauthorizedError (response = response .json (), message = "No permission to delete subscription" )
139- elif response .status_code == 500 :
140- raise ServerError (response = response .json (), message = "Internal Server Error" )
141105 else :
142- raise UnhandledResponseError ( response = response . json (), message = f"Unhandled error: { response . status_code } " )
106+ MnsService . handle_response ( response )
143107
144108 def check_delete_subcription (self ):
145109 try :
146- resource = self .get_subscription () # Get the full resource dict
110+ resource = self .get_subscription ()
147111 if not resource :
148112 return "No matching subscription found to delete."
149113
@@ -154,5 +118,20 @@ def check_delete_subcription(self):
154118 self .delete_subscription (subscription_id )
155119 return "Subscription successfully deleted"
156120 except Exception as e :
157- # Optionally log the exception here
158121 return f"Error deleting subscription: { str (e )} "
122+
123+ @staticmethod
124+ def handle_response (response ):
125+ error_mapping = {
126+ 401 : (TokenValidationError , "Token validation failed for the request" ),
127+ 400 : (BadRequestError , "Bad request: Resource type or parameters incorrect" ),
128+ 403 : (UnauthorizedError , "You don't have the right permissions for this request" ),
129+ 500 : (ServerError , "Internal Server Error" ),
130+ 404 : (ResourceFoundError , "Subscription or Resource not found" ),
131+ 409 : (ConflictError , "SQS Queue Already Subscribed, can't re-subscribe" )
132+ }
133+ exception_class , error_message = error_mapping .get (
134+ response .status_code ,
135+ (UnhandledResponseError , f"Unhandled error: { response .status_code } " ))
136+
137+ raise exception_class (response = response .json (), message = error_message )
0 commit comments