Hi all,
Aplogies for the long message!
I am trying to execute a galaxy workflow from command-line using bioblend. The workflow invloves bwa, gatk, samtools mpileup, bcftools and works with dataset paired-end collections. The following is the script used to achieve it and I am unable to get the workflow to run
from bioblend.galaxy import GalaxyInstance
from bioblend.galaxy.histories import HistoryClient
from bioblend.galaxy.tools import ToolClient
from bioblend.galaxy.workflows import WorkflowClient
from bioblend.galaxy.datasets import DatasetClient
from bioblend.galaxy import dataset_collections as collections
import os,re
url , key = "http://#.#.#.#:9090", "c5fe47950c99c52a95c6de2542599ddb"
galaxyInstance = GalaxyInstance(url=url, key=key)
historyClient = HistoryClient(galaxyInstance)
toolClient = ToolClient(galaxyInstance)
workflowClient = WorkflowClient(galaxyInstance)
datasetClient = DatasetClient(galaxyInstance)
workflow_list = workflowClient.get_workflows()
bwa_workflow_id = [ i['id'] for i in workflow_list if i['name'].startswith('bwa') ][0] #desired workflow id
bwa_workflow_details = workflowClient.show_workflow(bwa_workflow_id) #workflow details like input, steps, etc.,
bwa_workflow_input_id = bwa_workflow_details['inputs'].keys()[0] #workflow input ids
created_history = historyClient.create_history(name='testing_bwa2bctools2')
print 'created a new history with name ' , created_history['name']
path = "/home/sphadmin/data/fastq_files/"
files = {i:os.path.join(path,i) for i in os.listdir(path) if os.path.splitext(i)[1] == '.fastq'}
hda = {i:toolClient.upload_file(files[i], created_history['id'], type='fastq',dbkey='H37Rv') for i in files}
files_dataset_id = {i:hda[i]['outputs'][0]['id'] for i in files}
print 'uploading fastq files to history'
fwd = re.compile(r'R1')
paired_list = {}
for i in files:
if fwd.search(i):
prefix, file = i.split('_R1')[0] , i
if not prefix in paired_list:
paired_list[prefix] = {}
paired_list[prefix]['forward'] = file
else:
prefix, file = i.split('_R2')[0], i
if not prefix in paired_list:
paired_list[prefix] = {}
paired_list[prefix]['reverse'] = file
paired_collection = [collections.CollectionElement(name=i,type='paired',elements=[collections.HistoryDatasetElement(name=j,id=files_dataset_id[paired_list[i][j]]) for j in paired_list[i] ]) for i in paired_list]
collectionDesc = collections.CollectionDescription(name='My collection list', type='list:paired', elements=paired_collection)
dataset_collection = historyClient.create_dataset_collection(history_id=created_history['id'], collection_description=collectionDesc)
print 'creating dataset collection in history'
data_wstep_id = {bwa_workflow_input_id: {'id': dataset_collection['id'], 'src':'hda'}}
data_wstep_index = {"0": {'id': dataset_collection['id'], 'src':'hda'}}
exec_wf = workflowClient.invoke_workflow(bwa_workflow_id, inputs=data_wstep_index,history_id=created_history['id'])
print 'submitting workflow'
I have tried using the step_id with run_workflow() and get the following error,
workflowClient.run_workflow(bwa_workflow_id, data_wstep_id, history_id=created_history['id'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/bioblend/galaxy/workflows/__init__.py", line 271, in run_workflow
return Client._post(self, payload)
File "/usr/local/lib/python2.7/dist-packages/bioblend/galaxy/client.py", line 157, in _post
files_attached=files_attached)
File "/usr/local/lib/python2.7/dist-packages/bioblend/galaxyclient.py", line 134, in make_post_request
body=r.text, status_code=r.status_code)
bioblend.ConnectionError: Unexpected HTTP status code: 500: {"err_msg": "Uncaught exception in exposed API method:", "err_code": 0}
step_order_index with invoke_workflow() does not produce any error, but workflow is executed. So 'exec_wf' returns with failed 'status'.
{u'inputs': {}, u'update_time': u'2017-05-11T09:13:31', u'uuid': u'199adb04-362a-11e7-90e9-1cc1de6d5ef4', u'history_id': u'fd767e8b7355e21a', u'state': u'failed', u'workflow_id': u'1fad1eaf5f4f1766', u'steps': [{u'update_time': u'2017-05-11T09:13:31', u'job_id': None, u'state': None, u'order_index': 0, u'action': None, u'model_class': u'WorkflowInvocationStep', u'workflow_step_id': u'a73186a6d4577bbf', u'id': u'd882ad2044776478'}], u'model_class': u'WorkflowInvocation', u'id': u'964b37715ec9bd22'}
However, If I run the workflow from UI, everything goes fine. Upon checking the invocation details of the workflow run from UI, the 'inputs' is still empty (there is no associated dataset collection id)
{u'inputs': {}, u'update_time': u'2017-05-09T03:44:31', u'uuid': u'c495fef0-3466-11e7-90e9-1cc1de6d5ef4', u'history_id': u'f158df71bb77bb86', u'state': u'scheduled', u'workflow_id': u'1fad1eaf5f4f1766', u'steps': [{u'update_time': u'2017-05-09T03:22:47', u'job_id': u'48885bbd1215db53', u'state': u'ok', u'order_index': 1, u'action': None, u'model_class': u'WorkflowInvocationStep', u'workflow_step_id': u'4df0bfb0de34905a', u'id': u'50807609e10e339d'}, {u'update_time': u'2017-05-09T03:22:47', u'job_id': None, u'state': None, u'order_index': 0, u'action': None, u'model_class': u'WorkflowInvocationStep', u'workflow_step_id': u'a73186a6d4577bbf', u'id': u'f5e1495a2ebc6080'}, {u'update_time': u'2017-05-09T03:22:47', u'job_id': u'f1cb3a6ff6a93c01', u'state': u'ok', u'order_index': 1, u'action': None, u'model_class': u'WorkflowInvocationStep', u'workflow_step_id': u'4df0bfb0de34905a', u'id': u'1d972c3873de3f79'}, {u'update_time': u'2017-05-09T03:22:50', u'job_id': u'822aeedf25d30c76', u'state': u'ok', u'order_index': 2, u'action': None, u'model_class': u'WorkflowInvocationStep', u'workflow_step_id': u'89e52cb393afc192', u'id': u'89788b3f6c8e75f4'}, {u'update_time': u'2017-05-09T03:22:50', u'job_id': u'4fb563a6a1060ab1', u'state': u'ok', u'order_index': 2, u'action': None, u'model_class': u'WorkflowInvocationStep', u'workflow_step_id': u'89e52cb393afc192', u'id': u'b4666ccc5542d171'}, {u'update_time': u'2017-05-09T03:22:53', u'job_id': u'cab68a1ccca17e68', u'state': u'ok', u'order_index': 3, u'action': None, u'model_class': u'WorkflowInvocationStep', u'workflow_step_id': u'b6b7934af4ebec63', u'id': u'3dfe330b26f78ced'}, {u'update_time': u'2017-05-09T03:22:53', u'job_id': u'bb80841fd9d212dd', u'state': u'ok', u'order_index': 3, u'action': None, u'model_class': u'WorkflowInvocationStep', u'workflow_step_id': u'b6b7934af4ebec63', u'id': u'f89ec36d748e8f90'}, {u'update_time': u'2017-05-09T03:22:57', u'job_id': u'02b1cfb59f716d61', u'state': u'ok', u'order_index': 4, u'action': None, u'model_class': u'WorkflowInvocationStep', u'workflow_step_id': u'dba3bb6dfae451b8', u'id': u'dbc267d11443f9a4'}, {u'update_time': u'2017-05-09T03:22:57', u'job_id': u'705cc5c1fdaa7d3e', u'state': u'ok', u'order_index': 4, u'action': None, u'model_class': u'WorkflowInvocationStep', u'workflow_step_id': u'dba3bb6dfae451b8', u'id': u'67ce804af6ec796b'}, {u'update_time': u'2017-05-09T03:22:59', u'job_id': u'665a42f7453c0065', u'state': u'ok', u'order_index': 5, u'action': None, u'model_class': u'WorkflowInvocationStep', u'workflow_step_id': u'5935f39e477d88b2', u'id': u'09d8568e61ebd1d9'}, {u'update_time': u'2017-05-09T03:22:59', u'job_id': u'4488b53dbfdabfab', u'state': u'ok', u'order_index': 5, u'action': None, u'model_class': u'WorkflowInvocationStep', u'workflow_step_id': u'5935f39e477d88b2', u'id': u'b3e4e0c76fe49b64'}], u'model_class': u'WorkflowInvocation', u'id': u'e89067bb68bee7a0'}
Galaxy Version 15.03 & bioblend Version 0.8.0.
Appreciate your inputs.
Thanks,
Aarthi