X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/1d5f5f8f44f64f91a5d6ff8785a5863b707515fe..5cd2757a79e7be7ed00156a69191893c3bb7e1c6:/sdk/cwl/arvados_cwl/runner.py diff --git a/sdk/cwl/arvados_cwl/runner.py b/sdk/cwl/arvados_cwl/runner.py index 6f157db3c6..a1142544f5 100644 --- a/sdk/cwl/arvados_cwl/runner.py +++ b/sdk/cwl/arvados_cwl/runner.py @@ -9,9 +9,11 @@ from cStringIO import StringIO import cwltool.draft2tool from cwltool.draft2tool import CommandLineTool import cwltool.workflow -from cwltool.process import get_feature, scandeps, UnsupportedRequirement, normalizeFilesDirs +from cwltool.process import get_feature, scandeps, UnsupportedRequirement, normalizeFilesDirs, shortname from cwltool.load_tool import fetch_document from cwltool.pathmapper import adjustFileObjs, adjustDirObjs +from cwltool.utils import aslist +from cwltool.builder import substitute import arvados.collection import ruamel.yaml as yaml @@ -108,6 +110,9 @@ def upload_docker(arvrunner, tool): if isinstance(tool, CommandLineTool): (docker_req, docker_is_req) = get_feature(tool, "DockerRequirement") if docker_req: + if docker_req.get("dockerOutputDirectory"): + # TODO: can be supported by containers API, but not jobs API. + raise UnsupportedRequirement("Option 'dockerOutputDirectory' of DockerRequirement not supported.") arv_docker_get_image(arvrunner.api, docker_req, True, arvrunner.project_uuid) elif isinstance(tool, cwltool.workflow.Workflow): for s in tool.steps: @@ -116,6 +121,19 @@ def upload_docker(arvrunner, tool): def upload_instance(arvrunner, name, tool, job_order): upload_docker(arvrunner, tool) + for t in tool.tool["inputs"]: + def setSecondary(fileobj): + if isinstance(fileobj, dict) and fileobj.get("class") == "File": + if "secondaryFiles" not in fileobj: + fileobj["secondaryFiles"] = [{"location": substitute(fileobj["location"], sf), "class": "File"} for sf in t["secondaryFiles"]] + + if isinstance(fileobj, list): + for e in fileobj: + setSecondary(e) + + if shortname(t["id"]) in job_order and t.get("secondaryFiles"): + setSecondary(job_order[shortname(t["id"])]) + workflowmapper = upload_dependencies(arvrunner, name, tool.doc_loader,