Unverified Commit 9a61e3ce authored by Marius van den Beek's avatar Marius van den Beek Committed by GitHub
Browse files

Merge pull request #19466 from mvdbeek/expression_tool_format_source_backport

[24.1] Expression tool format source backport
parents f06b0d7f 57b8311b
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -81,6 +81,10 @@ from galaxy.tool_util.parser.interface import (
    PageSource,
    ToolSource,
)
from galaxy.tool_util.parser.output_objects import (
    ToolOutput,
    ToolOutputCollection,
)
from galaxy.tool_util.parser.xml import (
    XmlPageSource,
    XmlToolSource,
@@ -811,6 +815,8 @@ class Tool(Dictifiable):
        self.tool_errors = None
        # Parse XML element containing configuration
        self.tool_source = tool_source
        self.outputs: Dict[str, ToolOutput] = {}
        self.output_collections: Dict[str, ToolOutputCollection] = {}
        self._is_workflow_compatible = None
        self.__help = None
        self.__tests: Optional[str] = None
+2 −2
Original line number Diff line number Diff line
@@ -507,7 +507,7 @@ class DefaultToolAction(ToolAction):
                    output,
                    wrapped_params.params,
                    inp_data,
                    inp_dataset_collections,
                    input_collections,
                    input_ext,
                    python_template_version=tool.python_template_version,
                    execution_cache=execution_cache,
@@ -1206,7 +1206,7 @@ def determine_output_format(

        if collection_name in input_dataset_collections:
            try:
                input_collection = input_dataset_collections[collection_name][0][0]
                input_collection = input_dataset_collections[collection_name]
                input_collection_collection = input_collection.collection
                if element_index is None:
                    # just pick the first HDA
+21 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ from galaxy.structured_app import (
    MinimalToolApp,
)
from galaxy.tool_util.data import TabularToolDataTable
from galaxy.tools.actions import determine_output_format
from galaxy.tools.parameters import (
    visit_input_values,
    wrapped_json,
@@ -168,6 +169,9 @@ class ToolEvaluator:
            out_data,
            output_collections=out_collections,
        )
        # late update of format_source outputs
        self._eval_format_source(job, inp_data, out_data)

        self.execute_tool_hooks(inp_data=inp_data, out_data=out_data, incoming=incoming)

    def execute_tool_hooks(self, inp_data, out_data, incoming):
@@ -257,6 +261,23 @@ class ToolEvaluator:

        return undeferred_objects

    def _eval_format_source(
        self,
        job: model.Job,
        inp_data: Dict[str, Optional[model.DatasetInstance]],
        out_data: Dict[str, model.DatasetInstance],
    ):
        for output_name, output in out_data.items():
            if (
                (tool_output := self.tool.outputs.get(output_name))
                and (tool_output.format_source or tool_output.change_format)
                and output.extension == "expression.json"
            ):
                input_collections = {jtidca.name: jtidca.dataset_collection for jtidca in job.input_dataset_collections}
                ext = determine_output_format(tool_output, self.param_dict, inp_data, input_collections, None)
                if ext:
                    output.extension = ext

    def _replaced_deferred_objects(
        self,
        inp_data: Dict[str, Optional[model.DatasetInstance]],
+32 −0
Original line number Diff line number Diff line
@@ -2157,6 +2157,38 @@ some_file:
        assert dataset_details["metadata_bam_index"]
        assert dataset_details["file_ext"] == "bam"

    def test_expression_tool_output_in_format_source(self):
        with self.dataset_populator.test_history() as history_id:
            self._run_workflow(
                """class: GalaxyWorkflow
inputs:
  input:
    type: data
steps:
  skip:
    tool_id: cat_data_and_sleep
    in:
      input1: input
    when: $(false)
  pick_larger:
    tool_id: expression_pick_larger_file
    in:
      input1: skip/out_file1
      input2: input
  format_source:
    tool_id: cat_data_and_sleep
    in:
      input1: pick_larger/larger_file
test_data:
  input:
    value: 1.fastqsanger.gz
    type: File
    file_type: fastqsanger.gz
""",
                history_id=history_id,
            )
            self.dataset_populator.wait_for_history(history_id=history_id, assert_ok=True)

    def test_run_workflow_simple_conditional_step(self):
        with self.dataset_populator.test_history() as history_id:
            summary = self._run_workflow(
+1 −1
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@
        <param name="input2" type="data" optional="true" label="Second file" />
    </inputs>
    <outputs>
        <output name="larger_file" type="data" from="output" />
        <output name="larger_file" type="data" from="output" format_source="input1" />
    </outputs>
    <tests>
        <test>
Loading