Skip to content

Commit f16d533

Browse files
author
Will Trimble
committed
Use auth more, don't fail if output has status but is not asynchronous, like /metagenome
1 parent fb3149b commit f16d533

2 files changed

Lines changed: 15 additions & 11 deletions

File tree

mglib/mglib.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -123,28 +123,31 @@ def async_rest_api(url, auth=None, data=None, debug=False, delay=60):
123123
submit = obj_from_url(url, auth=auth, data=data, debug=debug)
124124
# If "status" is nor present, or if "status" is somehow not "submitted"
125125
# assume this is not an asynchronous call and it's done.
126-
if ('status' in submit) and (submit['status'] == 'done') and ('data' in submit):
126+
if ('status' in submit) and (submit['status'] != 'submitted') and ('data' in submit):
127127
return submit['data']
128128
# if not (('status' in submit) and (submit['status'] == 'submitted') and ('url' in submit)):
129129
# return submit # No status, no url and no submitted
130-
result = obj_from_url(submit['url'], debug=debug)
130+
result = obj_from_url(submit['url'], auth=auth, debug=debug)
131131
try:
132-
while result['status'] != 'done':
132+
while result['status'] == 'submitted':
133133
if debug:
134134
print("waiting %d seconds ..."%delay)
135135
time.sleep(delay)
136-
result = obj_from_url(submit['url'], debug=debug)
136+
result = obj_from_url(submit['url'], auth=auth, debug=debug)
137137
except KeyError:
138138
print("Error in response to "+url, file=sys.stderr)
139139
print("Does not contain 'status' field, likely API syntax error", file=sys.stderr)
140140
print(json.dumps(result), file=sys.stderr)
141141
sys.exit(1)
142142
except TypeError: # result isn't json, return it anyway
143143
return(result.decode("utf8"))
144-
if 'ERROR' in result['data']:
145-
sys.stderr.write("ERROR: %s\n" %result['data']['ERROR'])
146-
print(json.dumps(result), file=sys.stderr)
147-
sys.exit(1)
144+
try:
145+
if 'ERROR' in result['data']:
146+
sys.stderr.write("ERROR: %s\n" %result['data']['ERROR'])
147+
print(json.dumps(result), file=sys.stderr)
148+
sys.exit(1)
149+
except KeyError: # result doesn't have "data"
150+
return result
148151
return result['data']
149152

150153
# POST file to MG-RAST or Shock
@@ -412,7 +415,7 @@ def kbids_to_mgids(kbids):
412415
def kbid_lookup(ids, reverse=False):
413416
request = 'mg2kb' if reverse else 'kb2mg'
414417
post = json.dumps({'ids': ids}, separators=(',',':'))
415-
data = obj_from_url(API_URL+'/job/'+request, data=post)
418+
data = obj_from_url(API_URL+'/job/'+request, auth=auth, data=post)
416419
return data['data']
417420

418421
def get_auth_token(opts=None):

scripts/mg-query.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,15 @@
1313
if __name__ == '__main__':
1414
usage = "usage: %prog [options] URI"
1515
parser = ArgumentParser(usage)
16-
# parser.add_argument("-v", "--verbose", dest="verbose", action="store_true")
16+
parser.add_argument("-v", "--verbose", dest="verbose", action="store_true")
1717
parser.add_argument("-k", "--token", dest="token", type=str,
1818
help="Auth token")
1919
parser.add_argument("URI", type=str, help="URI to query")
2020

2121
opts = parser.parse_args()
2222
key = get_auth_token(opts)
23-
23+
if opts.verbose:
24+
print("KEY = {}".format(key), file=sys.stderr)
2425
# assign parameters
2526
URI = opts.URI
2627

0 commit comments

Comments
 (0)