summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukeJones123 <95484041+LukeJones123@users.noreply.github.com>2023-02-28 16:04:19 +0000
committerGitHub <noreply@github.com>2023-02-28 16:04:19 +0000
commit30f452163784369571b2d1b478eaae8427461623 (patch)
tree51921b32226d2096201c234f6b0e265641cdc54e
parent893dbd6ea7dfb67c85ecb3cc30fc43b764d62a1c (diff)
Bugfix/timeout and sleep (#53)
* Client.status uses timeout & no final sleep * Result update and delete use timeout
-rw-r--r--cdsapi/api.py52
1 files changed, 25 insertions, 27 deletions
diff --git a/cdsapi/api.py b/cdsapi/api.py
index 0211856..47dce4f 100644
--- a/cdsapi/api.py
+++ b/cdsapi/api.py
@@ -204,7 +204,8 @@ class Result(object):
task_url = "%s/tasks/%s" % (self._url, request_id)
self.debug("GET %s", task_url)
- result = self.robust(self.session.get)(task_url, verify=self.verify)
+ result = self.robust(self.session.get)(task_url, verify=self.verify,
+ timeout=self.timeout)
result.raise_for_status()
self.reply = result.json()
@@ -218,7 +219,8 @@ class Result(object):
task_url = "%s/tasks/%s" % (self._url, rid)
self.debug("DELETE %s", task_url)
- delete = self.session.delete(task_url, verify=self.verify)
+ delete = self.session.delete(task_url, verify=self.verify,
+ timeout=self.timeout)
self.debug("DELETE returns %s %s", delete.status_code, delete.reason)
try:
@@ -389,7 +391,7 @@ class Client(object):
def status(self, context=None):
url = "%s/status.json" % (self.url,)
- r = self.session.get(url, verify=self.verify)
+ r = self.session.get(url, verify=self.verify, timeout=self.timeout)
r.raise_for_status()
return r.json()
@@ -607,40 +609,36 @@ class Client(object):
def wrapped(*args, **kwargs):
tries = 0
- while tries < self.retry_max:
+ while True:
+
+ txt = "Error"
try:
- r = call(*args, **kwargs)
+ resp = call(*args, **kwargs)
except (
requests.exceptions.ConnectionError,
requests.exceptions.ReadTimeout,
) as e:
- r = None
- self.warning(
- "Recovering from connection error [%s], attemps %s of %s",
- e,
- tries,
- self.retry_max,
- )
-
- if r is not None:
- if not retriable(r.status_code, r.reason):
- return r
+ resp = None
+ txt = f"Connection error: [{e}]"
+
+ if resp is not None:
+ if not retriable(resp.status_code, resp.reason):
+ break
try:
- self.warning(r.json()["reason"])
+ self.warning(resp.json()["reason"])
except Exception:
pass
- self.warning(
- "Recovering from HTTP error [%s %s], attemps %s of %s",
- r.status_code,
- r.reason,
- tries,
- self.retry_max,
- )
+ txt = f"HTTP error: [{resp.status_code} {resp.reason}]"
tries += 1
+ self.warning(txt + f". Attempt {tries} of {self.retry_max}.")
+ if tries < self.retry_max:
+ self.warning(f"Retrying in {self.sleep_max} seconds")
+ time.sleep(self.sleep_max)
+ self.info("Retrying now...")
+ else:
+ raise Exception('Could not connect')
- self.warning("Retrying in %s seconds", self.sleep_max)
- time.sleep(self.sleep_max)
- self.info("Retrying now...")
+ return resp
return wrapped