X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/c8d9a898cde654b53200bda0b0ef8b406dd71739..08cc91f0493dd8dfe27046faf02c2c907e50443e:/sdk/cwl/arvados_cwl/__init__.py diff --git a/sdk/cwl/arvados_cwl/__init__.py b/sdk/cwl/arvados_cwl/__init__.py index 61fa07e53e..1740a90009 100644 --- a/sdk/cwl/arvados_cwl/__init__.py +++ b/sdk/cwl/arvados_cwl/__init__.py @@ -24,8 +24,9 @@ import pkg_resources # part of setuptools import re import sys import threading -from schema_salad.ref_resolver import Loader +from cwltool.load_tool import fetch_document from cwltool.builder import Builder +import urlparse from cwltool.process import shortname, get_feature, adjustFiles, adjustFileObjs, scandeps from arvados.api import OrderedJsonModel @@ -67,8 +68,8 @@ class CollectionFsAccess(cwltool.process.StdFsAccess): """Implement the cwltool FsAccess interface for Arvados Collections.""" def __init__(self, basedir): + super(CollectionFsAccess, self).__init__(basedir) self.collections = {} - self.basedir = basedir def get_collection(self, path): p = path.split("/") @@ -343,11 +344,11 @@ class RunnerJob(object): files.add(path) return path - document_loader = Loader({"cwl": "https://w3id.org/cwl/cwl#", "id": "@id"}) + document_loader, workflowobj, uri = fetch_document(self.tool.tool["id"]) def loadref(b, u): - return document_loader.resolve_ref(u, base_url=b)[0] + return document_loader.fetch(urlparse.urljoin(b, u)) - sc = scandeps("", self.tool.tool, + sc = scandeps(uri, workflowobj, set(("$import", "run")), set(("$include", "$schemas", "path")), loadref) @@ -575,8 +576,8 @@ class ArvadosCommandTool(CommandLineTool): def makeJobRunner(self): return ArvadosJob(self.arvrunner) - def makePathMapper(self, reffiles, input_basedir, **kwargs): - return ArvPathMapper(self.arvrunner, reffiles, input_basedir, + def makePathMapper(self, reffiles, **kwargs): + return ArvPathMapper(self.arvrunner, reffiles, kwargs["basedir"], "$(task.keep)/%s", "$(task.keep)/%s/%s", **kwargs) @@ -752,13 +753,15 @@ def arg_parser(): # type: () -> argparse.ArgumentParser parser = argparse.ArgumentParser(description='Arvados executor for Common Workflow Language') parser.add_argument("--conformance-test", action="store_true") - parser.add_argument("--basedir", type=str) + parser.add_argument("--basedir", type=str, + help="Base directory used to resolve relative references in the input, default to directory of input object file or current directory (if inputs piped/provided on command line).") parser.add_argument("--outdir", type=str, default=os.path.abspath('.'), help="Output directory, default current directory") parser.add_argument("--eval-timeout", - help="Time to wait for a Javascript expression to evaluate before giving an error.", - type=float) + help="Time to wait for a Javascript expression to evaluate before giving an error, default 20s.", + type=float, + default=20) parser.add_argument("--version", action="store_true", help="Print version and exit") exgroup = parser.add_mutually_exclusive_group() @@ -776,7 +779,7 @@ def arg_parser(): # type: () -> argparse.ArgumentParser default=True, dest="enable_reuse", help="") - parser.add_argument("--project-uuid", type=str, help="Project that will own the workflow jobs") + parser.add_argument("--project-uuid", type=str, help="Project that will own the workflow jobs, if not provided, will go to home project.") parser.add_argument("--ignore-docker-for-reuse", action="store_true", help="Ignore Docker image version when deciding whether to reuse past jobs.", default=False) @@ -804,7 +807,7 @@ def main(args, stdout, stderr, api_client=None): job_order_object = None arvargs = parser.parse_args(args) - if arvargs.create_template: + if arvargs.create_template and not arvargs.job_order: job_order_object = ({}, "") try: