8653: Fix tests.
[arvados.git] / sdk / cwl / arvados_cwl / __init__.py
index 61fa07e53e76523d04312eed6ad2ec7efac8f397..1740a900096f2ee41d79fdc3560847c778ca1250 100644 (file)
@@ -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: