Skip to content

Commit c037ca1

Browse files
[v2.0.3] Handling 503 Response Code (#32)
1 parent d551b05 commit c037ca1

File tree

4 files changed

+12
-5
lines changed

4 files changed

+12
-5
lines changed

README.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,8 @@ as a `ScaleException` parent type and child exceptions:
322322
- ``ScaleResourceNotFound``: 404 - Not Found -- The requested resource doesn't exist.
323323
- ``ScaleDuplicateTask``: 409 - Conflict -- The provided idempotency key or unique_id is already in use for a different request.
324324
- ``ScaleTooManyRequests``: 429 - Too Many Requests -- Too many requests hit the API too quickly.
325-
- ``ScaleInternalError``: 500 - Internal Server Error -- We had a problem with our server. Try again later
325+
- ``ScaleInternalError``: 500 - Internal Server Error -- We had a problem with our server. Try again later.
326+
- ``ScaleServiceUnavailable``: 503 - Server Timeout From Request Queueing -- Try again later.
326327
- ``ScaleTimeoutError``: 504 - Server Timeout Error -- Try again later.
327328

328329
Check out `Scale's API documentation <https://docs.scale.com/reference#errors>`_ for more details.

scaleapi/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
__version__ = "2.0.2"
1+
__version__ = "2.0.3"
22
__package_name__ = "scaleapi"

scaleapi/api.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# Parameters for HTTP retry
1313
HTTP_TOTAL_RETRIES = 3 # Number of total retries
1414
HTTP_RETRY_BACKOFF_FACTOR = 2 # Wait 1, 2, 4 seconds between retries
15-
HTTP_STATUS_FORCE_LIST = [429, 500, 504] # Status codes to force retry
15+
HTTP_STATUS_FORCE_LIST = [429, 500, 503, 504] # Status codes to force retry
1616
HTTP_RETRY_ALLOWED_METHODS = frozenset({"GET", "POST"})
1717

1818

@@ -68,7 +68,6 @@ def _http_request(
6868
@staticmethod
6969
def _raise_on_respose(res: Response):
7070

71-
message = ""
7271
try:
7372
message = res.json().get("error", res.text)
7473
except ValueError:
@@ -78,7 +77,7 @@ def _raise_on_respose(res: Response):
7877
exception = ExceptionMap[res.status_code]
7978
raise exception(message)
8079
except KeyError as err:
81-
raise ScaleException(message) from err
80+
raise ScaleException(message, res.status_code) from err
8281

8382
def _api_request(
8483
self, method, endpoint, headers=None, auth=None, params=None, body=None

scaleapi/exceptions.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,12 @@ class ScaleInternalError(ScaleException):
6969
code = 500
7070

7171

72+
class ScaleServiceUnavailable(ScaleException):
73+
"""503 - Server Timeout From Request Queueing -- Try again later."""
74+
75+
code = 503
76+
77+
7278
class ScaleTimeoutError(ScaleException):
7379
"""504 - Server Timeout Error -- Try again later."""
7480

@@ -84,4 +90,5 @@ class ScaleTimeoutError(ScaleException):
8490
ScaleTooManyRequests.code: ScaleTooManyRequests,
8591
ScaleInternalError.code: ScaleInternalError,
8692
ScaleTimeoutError.code: ScaleTimeoutError,
93+
ScaleServiceUnavailable.code: ScaleServiceUnavailable,
8794
}

0 commit comments

Comments
 (0)