Unverified Commit 84213b58 authored by mvdbeek's avatar mvdbeek
Browse files

Evaulate format_source (again) just before job submission

At this point the inputs are ready, so expession.json has been replaced
with the true extension.
parent 1e188028
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
+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]],