Merge branch '9954-keep-balance-systemd' closes #9954
[arvados.git] / sdk / cwl / arvados_cwl / arvworkflow.py
1 import os
2 import json
3 import copy
4
5 from cwltool.pack import pack
6 from cwltool.load_tool import fetch_document
7 from cwltool.process import shortname
8
9 import ruamel.yaml as yaml
10
11 from .runner import upload_docker, upload_dependencies
12
13 def make_workflow(arvRunner, tool, job_order, project_uuid, update_uuid):
14     upload_docker(arvRunner, tool)
15
16     document_loader, workflowobj, uri = (tool.doc_loader, tool.doc_loader.fetch(tool.tool["id"]), tool.tool["id"])
17
18     packed = pack(document_loader, workflowobj, uri, tool.metadata)
19
20     main = [p for p in packed["$graph"] if p["id"] == "#main"][0]
21     for inp in main["inputs"]:
22         sn = shortname(inp["id"])
23         if sn in job_order:
24             inp["default"] = job_order[sn]
25
26     name = os.path.basename(tool.tool["id"])
27     upload_dependencies(arvRunner, name, document_loader,
28                         packed, uri, False)
29
30     body = {
31         "workflow": {
32             "owner_uuid": project_uuid,
33             "name": tool.tool.get("label", name),
34             "description": tool.tool.get("doc", ""),
35             "definition":yaml.safe_dump(packed)
36         }}
37
38     if update_uuid:
39         return arvRunner.api.workflows().update(uuid=update_uuid, body=body).execute(num_retries=arvRunner.num_retries)["uuid"]
40     else:
41         return arvRunner.api.workflows().create(body=body).execute(num_retries=arvRunner.num_retries)["uuid"]