10259: Workaround for spurious "job_order" on command line. --no-wait returns
authorPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 13 Oct 2016 14:36:30 +0000 (10:36 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 13 Oct 2016 14:36:30 +0000 (10:36 -0400)
pipeline uuid.

sdk/cwl/arvados_cwl/__init__.py
sdk/cwl/arvados_cwl/arvjob.py
sdk/cwl/tests/test_submit.py

index c90f8902684304b400cc7ece97068a8e6b094000..57b1bc11a343da782bffeb2e49661001bc8bcc5e 100644 (file)
@@ -289,7 +289,7 @@ class ArvCwlRunner(object):
             logger.info("Pipeline instance %s", self.pipeline["uuid"])
 
         if runnerjob and not kwargs.get("wait"):
-            runnerjob.run()
+            runnerjob.run(wait=kwargs.get("wait"))
             return runnerjob.uuid
 
         self.poll_api = arvados.api('v1')
index 8b6642f1d04078c4d4c65c7529d7ab266a371cbf..52504100864fbf41a8bad7ad144417b9c88999e1 100644 (file)
@@ -234,6 +234,12 @@ class RunnerJob(Runner):
 
         workflowmapper = super(RunnerJob, self).arvados_job_spec(dry_run=dry_run, pull_image=pull_image, **kwargs)
 
+        # Need to filter this out, gets added by cwltool when providing
+        # parameters on the command line, and arv-run-pipeline-instance doesn't
+        # like it.
+        if "job_order" in self.job_order:
+            del self.job_order["job_order"]
+
         self.job_order["cwl:tool"] = workflowmapper.mapper(self.tool.tool["id"]).target[5:]
         if self.output_name:
             self.job_order["arv:output_name"] = self.output_name
@@ -258,6 +264,10 @@ class RunnerJob(Runner):
                 "state": "RunningOnServer"}).execute(num_retries=self.arvrunner.num_retries)
         logger.info("Created pipeline %s", self.arvrunner.pipeline["uuid"])
 
+        if kwargs.get("wait") is False:
+            self.uuid = self.arvrunner.pipeline["uuid"]
+            return
+
         job = None
         while not job:
             time.sleep(2)
@@ -270,7 +280,7 @@ class RunnerJob(Runner):
         self.arvrunner.processes[self.uuid] = self
 
         if job["state"] in ("Complete", "Failed", "Cancelled"):
-            self.done(response)
+            self.done(job)
 
 
 class RunnerTemplate(object):
index f5fe2c0e00cb34235a208520c507de95ad9b7085..7c8659a18786f9eeb9299996e78dd21a581733d4 100644 (file)
@@ -135,7 +135,8 @@ def stubs(func):
             }
         }
         stubs.pipeline_create = copy.deepcopy(stubs.expect_pipeline_instance)
-        stubs.pipeline_create["uuid"] = "zzzzz-d1hrv-zzzzzzzzzzzzzzz"
+        stubs.expect_pipeline_uuid = "zzzzz-d1hrv-zzzzzzzzzzzzzzz"
+        stubs.pipeline_create["uuid"] = stubs.expect_pipeline_uuid
         stubs.pipeline_with_job = copy.deepcopy(stubs.pipeline_create)
         stubs.pipeline_with_job["components"]["cwl-runner"]["job"] = {
             "uuid": "zzzzz-8i9sb-zzzzzzzzzzzzzzz",
@@ -229,7 +230,7 @@ class TestSubmit(unittest.TestCase):
         stubs.api.pipeline_instances().create.assert_called_with(
             body=expect_pipeline)
         self.assertEqual(capture_stdout.getvalue(),
-                         stubs.expect_job_uuid + '\n')
+                         stubs.expect_pipeline_uuid + '\n')
 
     @mock.patch("time.sleep")
     @stubs