diff --git a/pybit/_http_manager.py b/pybit/_http_manager.py index 71630d5..33bdf2b 100644 --- a/pybit/_http_manager.py +++ b/pybit/_http_manager.py @@ -13,7 +13,7 @@ from datetime import datetime as dt, timezone -from .exceptions import FailedRequestError, InvalidRequestError +from .exceptions import FailedRequestError, InvalidRequestError, RetryableError from . import _helpers # Requests will use simplejson if available. @@ -201,6 +201,9 @@ def _submit_request(self, method=None, path=None, query=None, auth=False): self._handle_network_error(e, retries_attempted) except JSONDecodeError as e: self._handle_json_error(e, retries_attempted) + except RetryableError as e: + self._handle_retryable_error(e.response, e.status_code, e.message, recv_window) + raise FailedRequestError( request=f"{method} {path}: {req_params}", @@ -275,8 +278,11 @@ def _handle_response(self, response, method, path, params, recv_window, retries_ error_msg = f"{s_json[ret_msg]} (ErrCode: {error_code})" if error_code in self.retry_codes: - self._handle_retryable_error(response, error_code, error_msg, recv_window) - raise Exception("Retryable error occurred, retrying...") + raise RetryableError( + response=response, + message=error_msg, + status_code=error_code + ) if error_code not in self.ignore_codes: raise InvalidRequestError( diff --git a/pybit/exceptions.py b/pybit/exceptions.py index 67aaa02..b742b22 100644 --- a/pybit/exceptions.py +++ b/pybit/exceptions.py @@ -56,3 +56,21 @@ def __init__(self, request, message, status_code, time, resp_headers): f"{message} (ErrCode: {status_code}) (ErrTime: {time})" f".\nRequest → {request}." ) + + +class RetryableError(Exception): + """ + Exception raised for retryable bybit error code + + Attributes: + response -- Response object + message -- Explanation of the error. + status_code -- The code number returned. + """ + + def __init__(self, response, message, status_code): + self.response = response + self.message = message + self.status_code = status_code + + super().__init__(f"{message} (ErrCode: {status_code})") \ No newline at end of file