Skip to content

Commit 722ad02

Browse files
committed
use the drs experiments endpoint
1 parent cc4290c commit 722ad02

File tree

1 file changed

+20
-25
lines changed

1 file changed

+20
-25
lines changed

htsget_server/htsget_operations.py

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,9 @@ def get_experiment(id_=None):
246246

247247
async def get_multiple_experiments():
248248
req = await connexion.request.json()
249-
return _get_experiments(req["experiments"]), 200
250-
249+
if "experiments" in req:
250+
return _get_experiments(req["experiments"]), 200
251+
return _get_experiments(None), 200
251252

252253
def get_program_experiments(program=None):
253254
headers = {
@@ -310,15 +311,21 @@ def get_pysam_obj(object_id, headers=None):
310311

311312
def _get_experiments(experiments):
312313
result = []
313-
experiments_by_program = {}
314-
for experiment in experiments:
315-
res, status_code = _get_experiment(experiment)
316-
if status_code == 200:
314+
headers = {
315+
"X-Service-Token": create_service_token()
316+
}
317+
if experiments is None:
318+
resp = requests.post(f"{os.getenv("DRS_URL")}/ga4gh/drs/v1/experiments", headers=headers, json={})
319+
else:
320+
resp = requests.post(f"{os.getenv("DRS_URL")}/ga4gh/drs/v1/experiments", headers=headers, json={"submitter_sample_ids": experiments})
321+
if resp.status_code == 200:
322+
experiments_by_program = {}
323+
for res in resp.json():
317324
if res["program"] not in experiments_by_program:
318325
experiments_by_program[res["program"]] = []
319326
experiments_by_program[res["program"]].append(res)
320-
for program in experiments_by_program.keys():
321-
result.extend(experiments_by_program[program])
327+
for program in experiments_by_program.keys():
328+
result.extend(experiments_by_program[program])
322329
return result
323330

324331

@@ -335,24 +342,12 @@ def _get_experiment(id_=None):
335342
headers = {
336343
"X-Service-Token": create_service_token()
337344
}
338-
resp = requests.get(url=f"{os.getenv("DRS_URL")}/ga4gh/drs/v1/objects/{id_}", headers=headers)
345+
resp = requests.post(f"{os.getenv("DRS_URL")}/ga4gh/drs/v1/experiments", headers=headers, json={"submitter_sample_ids": [id_]})
346+
339347
if resp.status_code == 200:
340-
experiment_drs_obj = resp.json()
341-
if experiment_drs_obj is not None and "contents" in experiment_drs_obj and experiment_drs_obj["description"] in ["wgs", "wts"]:
342-
if experiment_drs_obj["description"] == "wgs":
343-
result["genomes"].append(experiment_drs_obj["id"])
344-
elif experiment_drs_obj["description"] == "wts":
345-
result["transcriptomes"].append(experiment_drs_obj["id"])
346-
result["program"] = experiment_drs_obj["program"]
347-
for contents_obj in experiment_drs_obj["contents"]:
348-
drs_obj = _describe_drs_object(contents_obj["id"])
349-
if drs_obj is not None and "type" in drs_obj:
350-
if drs_obj["type"] == "variant":
351-
result["variants"].append(drs_obj["name"])
352-
elif drs_obj["type"] == "read":
353-
result["reads"].append(drs_obj["name"])
354-
return result, 200
355-
return f"{id_} is not an Experiment", 404
348+
if len(resp.json()) == 0:
349+
return f"{id_} is not an Experiment", 404
350+
return resp.json(), 200
356351
return resp.text, resp.status_code
357352

358353

0 commit comments

Comments
 (0)