From 8d52714199c64208795ab9f3e035bd0bd03aaa2d Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Tue, 9 Apr 2024 19:02:47 +0200 Subject: [PATCH 1/2] Add test for implicit map over conversion in workflow This test fails because cut fails on the compressed input with `cut: /private/var/folders/df/6xqpqpcd7h73b6jpx9t6cwhw0000gn/T/tmpu8gqd71c/tmpmae9egoz/tmpz8sonmgx/database/objects/6/9/8/dataset_69847aef-7b3f-4915-a8ae-394921dbe388.dat: Illegal byte sequence` --- lib/galaxy_test/api/test_workflows.py | 25 +++++++++++++++++++++++++ lib/galaxy_test/base/populators.py | 18 ++++++++++++------ 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/lib/galaxy_test/api/test_workflows.py b/lib/galaxy_test/api/test_workflows.py index aa0d83b3c9e..4ca837b1f62 100644 --- a/lib/galaxy_test/api/test_workflows.py +++ b/lib/galaxy_test/api/test_workflows.py @@ -3828,6 +3828,31 @@ test_data: assert_ok=True, ) + @skip_without_tool("implicit_conversion_format_input") + def test_run_with_implicit_collection_map_over(self): + with self.dataset_populator.test_history() as history_id: + self._run_workflow( + """ +class: GalaxyWorkflow +inputs: + collection: collection +steps: + map_over: + tool_id: implicit_conversion_format_input + in: + input1: collection +test_data: + collection: + collection_type: list + elements: + - identifier: 1 + value: 1.fasta.gz + type: File +""", + history_id=history_id, + assert_ok=True, + ) + @skip_without_tool("random_lines1") def test_change_datatype_collection_map_over(self): with self.dataset_populator.test_history() as history_id: diff --git a/lib/galaxy_test/base/populators.py b/lib/galaxy_test/base/populators.py index 86cdba03f8e..b89f4f82009 100644 --- a/lib/galaxy_test/base/populators.py +++ b/lib/galaxy_test/base/populators.py @@ -2857,6 +2857,8 @@ class BaseDatasetCollectionPopulator: history_id=history_id, targets=targets, ) + if "__files" in kwds: + payload["__files"] = kwds.pop("__files") return payload def wait_for_fetched_collection(self, fetch_response: Union[Dict[str, Any], Response]): @@ -2992,7 +2994,8 @@ def load_data_dict( if is_dict and ("elements" in value or value.get("collection_type")): elements_data = value.get("elements", []) elements = [] - for element_data in elements_data: + new_collection_kwds: Dict[str, Any] = {} + for i, element_data in enumerate(elements_data): # Adapt differences between test_data dict and fetch API description. if "name" not in element_data: identifier = element_data.pop("identifier") @@ -3000,14 +3003,17 @@ def load_data_dict( input_type = element_data.pop("type", "raw") content = None if input_type == "File": - content = read_test_data(element_data) + content = open_test_data(element_data) + element_data["src"] = "files" + if "__files" not in new_collection_kwds: + new_collection_kwds["__files"] = {} + new_collection_kwds["__files"][f"file_{i}|file_data"] = content else: content = element_data.pop("content") - if content is not None: - element_data["src"] = "pasted" - element_data["paste_content"] = content + if content is not None: + element_data["src"] = "pasted" + element_data["paste_content"] = content elements.append(element_data) - new_collection_kwds = {} if "name" in value: new_collection_kwds["name"] = value["name"] collection_type = value.get("collection_type", "") From ec6a8e72ddcf87182c0aecf33a247fc22e53c1fd Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Tue, 9 Apr 2024 19:28:13 +0200 Subject: [PATCH 2/2] Fix implicit conversion for mapped over inputs Fixes https://github.com/galaxyproject/galaxy/issues/17940 --- lib/galaxy/tools/evaluation.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/galaxy/tools/evaluation.py b/lib/galaxy/tools/evaluation.py index 9e4a8964a4c..78eff25307e 100644 --- a/lib/galaxy/tools/evaluation.py +++ b/lib/galaxy/tools/evaluation.py @@ -355,6 +355,7 @@ class ToolEvaluator: element_identifier = element_identifier_mapper.identifier(dataset, param_dict) if element_identifier: wrapper_kwds["identifier"] = element_identifier + wrapper_kwds["formats"] = input.formats input_values[input.name] = DatasetFilenameWrapper(dataset, **wrapper_kwds) elif isinstance(input, DataCollectionToolParameter): dataset_collection = value