Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion workos/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@ class ConfigurationException(Exception):

# Request related exceptions
class BaseRequestException(Exception):
def __init__(self, response, message=None):
def __init__(self, response, message=None, error=None):
super(BaseRequestException, self).__init__(message)

self.error = error
self.extract_and_set_response_related_data(response)

if message is not None:
Expand All @@ -22,6 +25,18 @@ def extract_and_set_response_related_data(self, response):
headers = response.headers
self.request_id = headers.get("X-Request-ID")

def __str__(self):
message = self.message or "No message"
exception = "(message=%s" % message

if self.request_id is not None:
exception += ", request_id=%s" % self.request_id

if self.error is not None:
exception += ", error=%s" % self.error

return exception + ")"


class AuthorizationException(BaseRequestException):
pass
Expand Down
14 changes: 9 additions & 5 deletions workos/utils/request.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,17 +65,21 @@ def request(
else:
response = request_fn(url, headers=headers, json=params)

response_json = None
try:
response_json = response.json()
except ValueError:
raise ServerException(response)

status_code = response.status_code
if status_code >= 400 and status_code < 500:
if status_code == 401:
raise AuthenticationException(response)
elif status_code == 403:
raise AuthorizationException(response)
raise BadRequestException(response)
error = response_json.get("error")
raise BadRequestException(response, error=error)
elif status_code >= 500 and status_code < 600:
raise ServerException(response)

try:
return response.json()
except ValueError:
raise ServerException(response)
return response_json