Remove illegal characters (currently just '/') from output collection names
authorPeter Amstutz <peter.amstutz@curii.com>
Wed, 25 May 2022 16:52:55 +0000 (12:52 -0400)
committerPeter Amstutz <peter.amstutz@curii.com>
Wed, 25 May 2022 20:12:19 +0000 (16:12 -0400)
refs #19152

Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>

sdk/cwl/arvados_cwl/arvcontainer.py
sdk/cwl/arvados_cwl/executor.py

index f3e122e603f8cd9cf9b768158132f28d7190b685..5094ea3bf1e7cc6320f153228e37131bc715d04d 100644 (file)
@@ -37,6 +37,9 @@ from ._version import __version__
 logger = logging.getLogger('arvados.cwl-runner')
 metrics = logging.getLogger('arvados.cwl-runner.metrics')
 
+def cleanup_name_for_collection(name):
+    return name.replace("/", " ")
+
 class ArvadosContainer(JobBase):
     """Submit and manage a Crunch container request for executing a CWL CommandLineTool."""
 
@@ -320,7 +323,7 @@ class ArvadosContainer(JobBase):
         if runtimeContext.submit_runner_cluster:
             extra_submit_params["cluster_id"] = runtimeContext.submit_runner_cluster
 
-        container_request["output_name"] = "Output from step %s" % (self.name)
+        container_request["output_name"] = cleanup_name_for_collection("Output from step %s" % (self.name))
         container_request["output_ttl"] = self.output_ttl
         container_request["mounts"] = mounts
         container_request["secret_mounts"] = secret_mounts
index fe078e32278738d5ebb2f1200199dad0a8771731..778af58ac3f7a1b71c040d5ec4f3332ecba11964 100644 (file)
@@ -31,7 +31,7 @@ from arvados.keep import KeepClient
 from arvados.errors import ApiError
 
 import arvados_cwl.util
-from .arvcontainer import RunnerContainer
+from .arvcontainer import RunnerContainer, cleanup_name_for_collection
 from .runner import Runner, upload_docker, upload_job_order, upload_workflow_deps, make_builder
 from .arvtool import ArvadosCommandTool, validate_cluster_target, ArvadosExpressionTool
 from .arvworkflow import ArvadosWorkflow, upload_workflow
@@ -630,6 +630,8 @@ The 'jobs' API is no longer supported.
         if not self.output_name:
              self.output_name = "Output from workflow %s" % runtimeContext.name
 
+        self.output_name  = cleanup_name_for_collection(self.output_name)
+
         if self.work_api == "containers":
             if self.ignore_docker_for_reuse:
                 raise Exception("--ignore-docker-for-reuse not supported with containers API.")