diff --git a/app/api/endpoints/workflow_version.py b/app/api/endpoints/workflow_version.py index b28e77815c6a10487b40ae8c3b4986545815a622..05d542aa3390f1f501412f3a7350ac7d40b05074 100644 --- a/app/api/endpoints/workflow_version.py +++ b/app/api/endpoints/workflow_version.py @@ -289,7 +289,7 @@ async def download_workflow_documentation( if document is DocumentationEnum.PARAMETER_SCHEMA: path = workflow_mode.schema_path - return StreamingResponse(repo.download_file_stream(path, client)) + return StreamingResponse(repo.download_file_stream(path, client), headers={"Cache-Control": "max-age=86400"}) @router.post( diff --git a/app/api/utils.py b/app/api/utils.py index 101c0e7707d7c19a321a9f82da1175c67236da42..3f7a59271e25b6f7f683b523744de99e5bc04fef 100644 --- a/app/api/utils.py +++ b/app/api/utils.py @@ -1,5 +1,6 @@ import json import re +import shlex from io import BytesIO from tempfile import SpooledTemporaryFile from typing import TYPE_CHECKING, Any, BinaryIO, Dict, Optional, Sequence, Union @@ -173,6 +174,10 @@ async def start_workflow_execution( f.write(json.dumps(parameters).encode("utf-8")) f.seek(0) s3.Bucket(name=settings.PARAMS_BUCKET).Object(key=params_file_name).upload_fileobj(f) + for key in parameters.keys(): + if isinstance(parameters[key], str): + # Escape string parameters for bash shell + parameters[key] = shlex.quote(parameters[key]).replace("$", "\$") # Check if the there is an SCM file for the workflow scm_file_name = None diff --git a/mako_templates/nextflow_command.template b/mako_templates/nextflow_command.template index 60eced0c77fb422d5fc3a7cce72d3d1ee068cffb..72dd2fd08c3227dd8e52203be3d89ac900a0d490 100644 --- a/mako_templates/nextflow_command.template +++ b/mako_templates/nextflow_command.template @@ -18,5 +18,5 @@ ${nx_bin} run ${repo.repo_url} \ % endif -revision ${repo.git_commit_hash} \ % for param_name, param_value in parameters.items(): ---${param_name} "${param_value}" \ +--${param_name} ${param_value} \ % endfor