10812: Improve check that already packed workflow collection exists with same
authorPeter Amstutz <peter.amstutz@curoverse.com>
Wed, 11 Jan 2017 21:33:11 +0000 (16:33 -0500)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Mon, 23 Jan 2017 15:31:15 +0000 (10:31 -0500)
PDH and similar name.  Don't crash when registering pipeline template that has
array inputs.

sdk/cwl/arvados_cwl/__init__.py
sdk/cwl/arvados_cwl/arvcontainer.py
sdk/cwl/arvados_cwl/arvjob.py

index 02eca644d30eee769d38cfe083ae513f4b5f49e8..e9c6bf19179142b83e77aa9309b50a9937d7b7ce 100644 (file)
@@ -28,7 +28,7 @@ from arvados.errors import ApiError
 
 from .arvcontainer import ArvadosContainer, RunnerContainer
 from .arvjob import ArvadosJob, RunnerJob, RunnerTemplate
-from. runner import Runner, upload_docker, upload_job_order, upload_workflow_deps
+from. runner import Runner, upload_docker, upload_job_order, upload_workflow_deps, upload_dependencies
 from .arvtool import ArvadosCommandTool
 from .arvworkflow import ArvadosWorkflow, upload_workflow
 from .fsaccess import CollectionFsAccess, CollectionFetcher, collectionResolver
index 117eff47dde84cfe3b5fbe543b87d7ab4aacede0..235e9b8dfac00d7c73e4072222f8c79068f0a181 100644 (file)
@@ -236,7 +236,7 @@ class RunnerContainer(Runner):
             workflowpath = "/var/lib/cwl/workflow.json#main"
             container_req["mounts"]["/var/lib/cwl/workflow.json"] = {
                 "kind": "json",
-                "json": packed
+                "content": packed
             }
             if self.tool.tool.get("id", "").startswith("arvwf:"):
                 container_req["properties"]["template_uuid"] = self.tool.tool["id"][6:33]
index 30056c7c61a8a251ccf3383bc170e25225522190..fc387711846f1e10580651eac2af2ffffa5a0144 100644 (file)
@@ -241,9 +241,11 @@ class RunnerJob(Runner):
         with collection.open("workflow.cwl", "w") as f:
             f.write(yaml.round_trip_dump(packed))
 
-        exists = self.arvrunner.api.collections().list(filters=[["owner_uuid", "=", self.arvrunner.project_uuid],
-                                                 ["portable_data_hash", "=", collection.portable_data_hash()],
-                                                 ["name", "like", self.name+"%"]]).execute(num_retries=self.arvrunner.num_retries)
+        filters = [["portable_data_hash", "=", collection.portable_data_hash()],
+                   ["name", "like", self.name+"%"]]
+        if self.arvrunner.project_uuid:
+            filters.append(["owner_uuid", "=", self.arvrunner.project_uuid])
+        exists = self.arvrunner.api.collections().list(filters=filters).execute(num_retries=self.arvrunner.num_retries)
 
         if exists["items"]:
             logger.info("Using collection %s", exists["items"][0]["uuid"])
@@ -385,10 +387,12 @@ class RunnerTemplate(object):
             if not isinstance(types, list):
                 types = [types]
             param['required'] = 'null' not in types
-            non_null_types = set(types) - set(['null'])
+            non_null_types = [t for t in types if t != "null"]
             if len(non_null_types) == 1:
                 the_type = [c for c in non_null_types][0]
-                dataclass = self.type_to_dataclass.get(the_type)
+                dataclass = None
+                if isinstance(the_type, basestring):
+                    dataclass = self.type_to_dataclass.get(the_type)
                 if dataclass:
                     param['dataclass'] = dataclass
             # Note: If we didn't figure out a single appropriate