From 43a24502519096cdfec5e952551d563ce77effc8 Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Wed, 6 Dec 2023 10:52:26 -0800 Subject: [PATCH] fix: Handle non-json response (#133) * Handle non-json response * Export SeamAPIException * Use .get to get error meta --- seamapi/__init__.py | 1 + seamapi/seam.py | 13 +++++-------- seamapi/types.py | 16 +++++++++------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/seamapi/__init__.py b/seamapi/__init__.py index f2a8b21..a8b89ae 100644 --- a/seamapi/__init__.py +++ b/seamapi/__init__.py @@ -2,3 +2,4 @@ # type: ignore from seamapi.seam import Seam +from seamapi.seam import SeamAPIException diff --git a/seamapi/seam.py b/seamapi/seam.py index dfa5224..420273c 100644 --- a/seamapi/seam.py +++ b/seamapi/seam.py @@ -125,13 +125,10 @@ def make_request(self, method: str, path: str, **kwargs): ) - parsed_response = response.json() - if response.status_code != 200: - raise SeamAPIException( - response.status_code, - response.headers["seam-request-id"], - parsed_response["error"], - ) + raise SeamAPIException(response) + + if "application/json" in response.headers["content-type"]: + return response.json() - return parsed_response + return response.text diff --git a/seamapi/types.py b/seamapi/types.py index 959864a..7b9b59b 100644 --- a/seamapi/types.py +++ b/seamapi/types.py @@ -22,16 +22,18 @@ class SeamAPIException(Exception): def __init__( self, - status_code: int, - request_id: str, - metadata: Optional[Dict[str, any]], + response, ): - self.status_code = status_code - self.request_id = request_id - self.metadata = metadata + self.status_code = response.status_code + self.request_id = response.headers.get("seam-request-id", None) + + self.metadata = None + if "application/json" in response.headers["content-type"]: + parsed_response = response.json() + self.metadata = parsed_response.get("error", None) super().__init__( - f"SeamAPIException: status={status_code}, request_id={request_id}, metadata={metadata}" + f"SeamAPIException: status={self.status_code}, request_id={self.request_id}, metadata={self.metadata}" )