From dddcf09855e50497ee483d3f47cee7bc411a9fac Mon Sep 17 00:00:00 2001 From: John Chilton Date: Fri, 3 Oct 2025 07:30:58 -0400 Subject: [PATCH] [WIP] track abstract inputs type in tool source interface. --- lib/galaxy/tool_util/parameters/factory.py | 2 +- lib/galaxy/tool_util/parser/interface.py | 14 +++++++++++--- lib/galaxy/tool_util/parser/xml.py | 5 ++++- lib/galaxy/tool_util/parser/yaml.py | 2 +- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lib/galaxy/tool_util/parameters/factory.py b/lib/galaxy/tool_util/parameters/factory.py index 6e057ec816c..e55ac884287 100644 --- a/lib/galaxy/tool_util/parameters/factory.py +++ b/lib/galaxy/tool_util/parameters/factory.py @@ -452,7 +452,7 @@ def input_models_for_tool_source(tool_source: ToolSource) -> ToolParameterBundle def input_models_for_pages(pages: PagesSource, profile: float) -> List[ToolParameterT]: input_models = [] - if pages.inputs_defined: + if pages.inputs_style != "none": for page_source in pages.page_sources: input_models.extend(input_models_for_page(page_source, profile)) diff --git a/lib/galaxy/tool_util/parser/interface.py b/lib/galaxy/tool_util/parser/interface.py index e535ad7cb28..e7f2a10b0b9 100644 --- a/lib/galaxy/tool_util/parser/interface.py +++ b/lib/galaxy/tool_util/parser/interface.py @@ -453,6 +453,9 @@ class ToolSource(metaclass=ABCMeta): """Return the tool source as a string""" +InputsStyleT = Literal["cheetah", "cwl", "none"] + + class PagesSource: """Contains a list of Pages - each a list of InputSources - each item in the outer list representing a page of inputs. @@ -460,12 +463,17 @@ class PagesSource: be exactly a singleton. """ - def __init__(self, page_sources): + def __init__(self, page_sources, inputs_style: InputsStyleT = "cheetah"): self.page_sources = page_sources + self._inputs_style = inputs_style @property - def inputs_defined(self): - return True + def inputs_defined(self) -> bool: + return self._inputs_style != "none" + + @property + def inputs_style(self) -> InputsStyleT: + return self._inputs_style class DynamicOptions(metaclass=ABCMeta): diff --git a/lib/galaxy/tool_util/parser/xml.py b/lib/galaxy/tool_util/parser/xml.py index ae5f593cbee..771f915f9f3 100644 --- a/lib/galaxy/tool_util/parser/xml.py +++ b/lib/galaxy/tool_util/parser/xml.py @@ -56,6 +56,7 @@ from .interface import ( DrillDownDynamicOptions, DynamicOptions, InputSource, + InputsStyleT, PageSource, PagesSource, RequiredFiles, @@ -1353,11 +1354,13 @@ class XmlPagesSource(PagesSource): def __init__(self, root): self.input_elem = root.find("inputs") page_sources = [] + inputs_style: InputsStyleT = "none" if self.input_elem is not None: + inputs_style = "cheetah" pages_elem = self.input_elem.findall("page") for page in pages_elem or [self.input_elem]: page_sources.append(XmlPageSource(page)) - super().__init__(page_sources) + super().__init__(page_sources, inputs_style) @property def inputs_defined(self): diff --git a/lib/galaxy/tool_util/parser/yaml.py b/lib/galaxy/tool_util/parser/yaml.py index eacbe3952e1..3579703080f 100644 --- a/lib/galaxy/tool_util/parser/yaml.py +++ b/lib/galaxy/tool_util/parser/yaml.py @@ -174,7 +174,7 @@ class YamlToolSource(ToolSource): def parse_input_pages(self) -> PagesSource: # All YAML tools have only one page (feature is deprecated) page_source = YamlPageSource(self.root_dict.get("inputs", {})) - return PagesSource([page_source]) + return PagesSource([page_source], "cwl") def parse_strict_shell(self): # TODO: Add ability to disable this.