Skip to content

Commit 17b40c0

Browse files
committed
Changed behavior, don't exit on failure , retry 3 time
1 parent efd469c commit 17b40c0

File tree

1 file changed

+39
-20
lines changed

1 file changed

+39
-20
lines changed

mglib/mglib.py

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import base64
77
import json
88
import string
9+
import time
910
import random
1011
import hashlib
1112
import subprocess
@@ -176,6 +177,7 @@ def async_rest_api(url, auth=None, data=None, debug=False, delay=60):
176177

177178
# POST file to MG-RAST or Shock
178179
def post_file(url, keyname, filename, data={}, auth=None, debug=False):
180+
179181
if debug:
180182
print("post_file", url)
181183
data[keyname] = (filename, open(filename, 'rb'))
@@ -187,27 +189,44 @@ def post_file(url, keyname, filename, data={}, auth=None, debug=False):
187189
print("data:\t"+repr(data))
188190
print("header:\t"+repr(header))
189191
print("url:\t"+url)
190-
try:
191-
res = requests.post(url, data=datagen, headers=header, stream=True)
192-
except HTTPError as error:
192+
193+
success = False
194+
sleep = 60
195+
maxt = 3
196+
counter = 0
197+
obj = None
198+
199+
# try maxt times
200+
while not success and counter < maxt :
193201
try:
194-
eobj = json.loads(error.read())
195-
if 'ERROR' in eobj:
196-
sys.stderr.write("ERROR (%s): %s\n" %(error.code, eobj['ERROR']))
197-
elif 'error' in eobj:
198-
sys.stderr.write("ERROR (%s): %s\n" %(error.code, eobj['error'][0]))
199-
except:
200-
sys.stderr.write("ERROR (%s): %s\n" %(error.code, error.read()))
201-
finally:
202-
sys.exit(1)
203-
if not res:
204-
sys.stderr.write("ERROR: no results returned\n")
205-
sys.exit(1)
206-
obj = json.loads(res.content.decode("utf8"))
207-
if debug:
208-
print(json.dumps(obj))
209-
if obj is None:
210-
sys.stderr.write("ERROR: return structure not valid json format\n")
202+
res = requests.post(url, data=datagen, headers=header, stream=True)
203+
except HTTPError as error:
204+
try:
205+
eobj = json.loads(error.read())
206+
if 'ERROR' in eobj:
207+
sys.stderr.write("ERROR (%s): %s\n" %(error.code, eobj['ERROR']))
208+
elif 'error' in eobj:
209+
sys.stderr.write("ERROR (%s): %s\n" %(error.code, eobj['error'][0]))
210+
except:
211+
sys.stderr.write("ERROR (%s): %s\n" %(error.code, error.read()))
212+
finally:
213+
# sys.exit(1)
214+
return None
215+
if not res:
216+
sys.stderr.write("ERROR: no results returned for %s\n"% (filename))
217+
# sys.exit(1)
218+
else:
219+
obj = json.loads(res.content.decode("utf8"))
220+
if debug:
221+
print(json.dumps(obj))
222+
if obj is None:
223+
sys.stderr.write("ERROR: return structure not valid json format\n")
224+
else:
225+
success = True
226+
# increase counter
227+
if not success :
228+
counter += 1
229+
time.sleep(counter * sleep)
211230
return(obj)
212231

213232
# safe handling of stdout for piping

0 commit comments

Comments
 (0)