From 6563e387a5d001bb6078469b7ad6a13f9bbed8aa Mon Sep 17 00:00:00 2001 From: John Chilton Date: Wed, 16 Aug 2017 12:54:27 -0400 Subject: [PATCH] Allow discovering dataset collections in galaxy.json in a nested fashion. Fixes #2658. --- lib/galaxy/tools/parameters/output_collect.py | 17 ++++ ...ates_dynamic_nested_from_json_elements.xml | 84 +++++++++++++++++++ test/functional/tools/samples_tool_conf.xml | 1 + 3 files changed, 102 insertions(+) create mode 100644 test/functional/tools/collection_creates_dynamic_nested_from_json_elements.xml diff --git a/lib/galaxy/tools/parameters/output_collect.py b/lib/galaxy/tools/parameters/output_collect.py index 9b30b937abb..530e0400b52 100644 --- a/lib/galaxy/tools/parameters/output_collect.py +++ b/lib/galaxy/tools/parameters/output_collect.py @@ -93,8 +93,25 @@ class ToolProvidedMetadata(object): def get_new_datasets(self, output_name): datasets = self.tool_provided_job_metadata.get(output_name, {}).get("datasets", []) + if not datasets: + elements = self.tool_provided_job_metadata.get(output_name, {}).get("elements", []) + if elements: + datasets = self._elements_to_datasets(elements) return datasets + def _elements_to_datasets(self, elements, level=0): + for element in elements: + extra_kwds = {"identifier_%d" % level: element["name"]} + if "elements" in element: + for inner_element in self._elements_to_datasets(element["elements"], level=level + 1): + dataset = extra_kwds.copy() + dataset.update(inner_element) + yield dataset + else: + dataset = extra_kwds + extra_kwds.update(element) + yield extra_kwds + def collect_dynamic_collections( tool, diff --git a/test/functional/tools/collection_creates_dynamic_nested_from_json_elements.xml b/test/functional/tools/collection_creates_dynamic_nested_from_json_elements.xml new file mode 100644 index 00000000000..c0110ce6983 --- /dev/null +++ b/test/functional/tools/collection_creates_dynamic_nested_from_json_elements.xml @@ -0,0 +1,84 @@ + + + echo "A" > oe1_ie1.fq ; + echo "B" > oe1_ie2.fq ; + echo "C" > oe2_ie1.fq ; + echo "D" > oe2_ie2.fq ; + echo "E" > oe3_ie1.fq ; + echo "F" > oe3_ie2.fq ; + cp $c1 galaxy.json + + + {"list_output": { + "elements": [ + {"name": "oe1", "elements": [ + {"name": "ie1", "filename": "oe1_ie1.fq"}, + {"name": "ie2", "filename": "oe1_ie2.fq"} + ]}, + {"name": "oe2", "elements": [ + {"name": "ie1", "filename": "oe2_ie1.fq"}, + {"name": "ie2", "filename": "oe2_ie2.fq"} + ]}, + {"name": "oe3", "elements": [ + {"name": "ie1", "filename": "oe3_ie1.fq"}, + {"name": "ie2", "filename": "oe3_ie2.fq"} + ]} +]}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/functional/tools/samples_tool_conf.xml b/test/functional/tools/samples_tool_conf.xml index 4fa4feee5f0..eb0f66eb36b 100644 --- a/test/functional/tools/samples_tool_conf.xml +++ b/test/functional/tools/samples_tool_conf.xml @@ -105,6 +105,7 @@ +