66import base64
77import json
88import string
9+ import time
910import random
1011import hashlib
1112import 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
178179def 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,47 @@ 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 :
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+ except OSError as error :
216+ sys .stderr .write ("ERROR with post_file\n " )
200217 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 " )
218+ if not res :
219+ sys .stderr .write ("ERROR: no results returned for %s\n " % (filename ))
220+ # sys.exit(1)
221+ else :
222+ obj = json .loads (res .content .decode ("utf8" ))
223+ if debug :
224+ print (json .dumps (obj ))
225+ if obj is None :
226+ sys .stderr .write ("ERROR: return structure not valid json format\n " )
227+ else :
228+ success = True
229+ # increase counter
230+ if not success :
231+ counter += 1
232+ time .sleep (counter * sleep )
211233 return (obj )
212234
213235# safe handling of stdout for piping
0 commit comments