summaryrefslogtreecommitdiff
path: root/cdsapi
diff options
context:
space:
mode:
authorBaudouin Raoult <baudouin.raoult@ecmwf.int>2018-05-11 20:39:20 +0100
committerBaudouin Raoult <baudouin.raoult@ecmwf.int>2018-05-11 20:39:20 +0100
commit8d86d0bb128a3734985196ea7514e4c53055ad12 (patch)
treee072dd13f512d89df12e83d0c13e59f0fd03d1e7 /cdsapi
parented35ba155ff359c362d581fa53f5b11289e9a531 (diff)
api
Diffstat (limited to 'cdsapi')
-rw-r--r--cdsapi/api.py24
1 files changed, 19 insertions, 5 deletions
diff --git a/cdsapi/api.py b/cdsapi/api.py
index 61664e6..915bd47 100644
--- a/cdsapi/api.py
+++ b/cdsapi/api.py
@@ -14,6 +14,14 @@ def bytes_to_string(n):
return "%g%s" % (int(n * 10 + 0.5) / 10.0, u[i])
+def robust(call):
+
+ def wrapped(*args, **kwargs):
+ return call(*args, **kwargs)
+
+ return wrapped
+
+
class Client(object):
def __init__(self,
@@ -73,7 +81,7 @@ class Client(object):
if local_filename is None:
local_filename = url.split('/')[-1]
- r = requests.get(url, stream=True, verify=self.verify)
+ r = robust(requests.get)(url, stream=True, verify=self.verify)
total = 0
with open(local_filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=1024):
@@ -90,11 +98,14 @@ class Client(object):
session.auth = tuple(self.api_key.split(':', 2))
self._trace("POST %s %s" % (url, json.dumps(request)))
- result = session.post(url, json=request, verify=self.verify)
+ result = robust(session.post)(url, json=request, verify=self.verify)
+ reply = {}
+ print(result)
try:
reply = result.json()
result.raise_for_status()
+ reply = result.json()
except Exception:
if 'message' in reply:
error = reply['message']
@@ -122,7 +133,7 @@ class Client(object):
self._download(reply['location'], int(reply['content_length']), target)
else:
self._trace("HEAD %s" % (reply['location'],))
- metadata = session.head(reply['location'], verify=self.verify)
+ metadata = robust(session.head)(reply['location'], verify=self.verify)
metadata.raise_for_status()
self._trace(metadata.headers)
@@ -133,7 +144,10 @@ class Client(object):
self._trace("DELETE %s" % (task_url,))
delete = session.delete(task_url, verify=self.verify)
self._trace("DELETE returns %s %s" % (delete.status_code, delete.reason))
- delete.raise_for_status()
+ try:
+ delete.raise_for_status()
+ except Exception:
+ self._warning("DELETE %s returns %s %s" % (task_url, delete.status_code, delete.reason))
self._trace("Done")
return
@@ -153,7 +167,7 @@ class Client(object):
task_url = "%s/tasks/%s" % (self.end_point, rid)
self._trace("GET %s" % (task_url,))
- result = session.get(task_url, verify=self.verify)
+ result = robust(session.get)(task_url, verify=self.verify)
result.raise_for_status()
reply = result.json()
continue