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