9a649eb57ee6e2fccddcb924916747316ca19999
[arvados.git] / sdk / cwl / arvados_cwl / arvworkflow.py
1 import os
2 import json
3
4 from cwltool.pack import pack
5 from cwltool.load_tool import fetch_document
6 from cwltool.process import shortname
7
8 from .runner import upload_docker, upload_dependencies
9
10 def make_workflow(arvRunner, tool, job_order, project_uuid, update_uuid):
11     upload_docker(arvRunner, tool)
12
13     document_loader, workflowobj, uri = (tool.doc_loader, tool.doc_loader.fetch(tool.tool["id"]), tool.tool["id"])
14     print workflowobj["steps"]
15     for inp in workflowobj["inputs"]:
16         sn = shortname(inp["id"])
17         if sn in job_order:
18             inp["default"] = job_order[sn]
19
20     packed = pack(document_loader, workflowobj, uri, tool.metadata)
21
22     name = os.path.basename(tool.tool["id"])
23     upload_dependencies(arvRunner, name, document_loader,
24                         packed, uri, "keep:", False)
25
26     body = {
27         "workflow": {
28             "owner_uuid": project_uuid,
29             "name": tool.tool.get("label", name),
30             "description": tool.tool.get("doc", ""),
31             "workflow":json.dumps(packed, sort_keys=True, indent=4)
32         }}
33
34     if update_uuid:
35         return arvRunner.api.workflows().update(uuid=update_uuid, body=body).execute(num_retries=arvRunner.num_retries)["uuid"]
36     else:
37         return arvRunner.api.workflows().create(body=body).execute(num_retries=arvRunner.num_retries)["uuid"]