diff --git a/sdk/lusid/rest.py b/sdk/lusid/rest.py index 24ef96424a7..fa06f801a37 100644 --- a/sdk/lusid/rest.py +++ b/sdk/lusid/rest.py @@ -108,7 +108,7 @@ def __init__(self, configuration, pools_size=4, maxsize=None): def request(self, method, url, query_params=None, headers=None, body=None, post_params=None, _preload_content=True, - _request_timeout=None): + _request_timeout=None, retries=3): """Perform requests. :param method: http request method @@ -126,7 +126,11 @@ def request(self, method, url, query_params=None, headers=None, number provided, it will be total request timeout. It can also be a pair (tuple) of (connection, read) timeouts. + :param retries: times to reattempt the request if transient errors are + encountered (HTTP Error 502) """ + argument_cache = locals() + method = method.upper() assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT', 'PATCH', 'OPTIONS'] @@ -221,6 +225,12 @@ def request(self, method, url, query_params=None, headers=None, # log response body logger.debug("response body: %s", r.data) + if retries and (r.status in {502}): + logger.debug("Temporary HTTP Error %s encountered, trying again", r.status) + argument_cache["retries"] -= 1 + del argument_cache["self"] + return self.request(**argument_cache) + if not 200 <= r.status <= 299: raise ApiException(http_resp=r) @@ -289,4 +299,4 @@ def PATCH(self, url, headers=None, query_params=None, post_params=None, post_params=post_params, _preload_content=_preload_content, _request_timeout=_request_timeout, - body=body) \ No newline at end of file + body=body)