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
"""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("/")
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)
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)
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()
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)
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: