Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions lib/galaxy/tool_util/xsd/galaxy.xsd
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ List of behavior changes associated with profile versions:

- Do not use user preferences to store credentials for tools anymore. Use the new `<credentials>` tag in the `<requirements>` section of the tool XML instead.

### 26.0

- Optional data parameters without a selected dataset are now empty lists, i.e. ``[]``. For smaller profiles it was ``[None]``

### Examples

A normal tool:
Expand Down
6 changes: 2 additions & 4 deletions lib/galaxy/tools/evaluation.py
Original file line number Diff line number Diff line change
Expand Up @@ -466,7 +466,7 @@ def __populate_wrappers(self, param_dict, input_datasets, job_working_directory)
def wrap_input(input_values, input):
value = input_values[input.name]
if isinstance(input, DataToolParameter) and input.multiple:
dataset_instances = DatasetListWrapper.to_dataset_instances(value)
dataset_instances = DatasetListWrapper.to_dataset_instances(value, self.tool.profile)
input_values[input.name] = DatasetListWrapper(
job_working_directory,
dataset_instances,
Expand Down Expand Up @@ -510,9 +510,7 @@ def wrap_input(input_values, input):
input, value, other_values=param_dict, compute_environment=self.compute_environment
)
else:
input_values[input.name] = InputValueWrapper(
input, value, param_dict, profile=self.tool and self.tool.profile or None
)
input_values[input.name] = InputValueWrapper(input, value, param_dict)

# HACK: only wrap if check_values is not false, this deals with external
# tools where the inputs don't even get passed through. These
Expand Down
4 changes: 2 additions & 2 deletions lib/galaxy/tools/parameters/wrapped.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ def wrap_values(self, inputs: "ToolInputsT", input_values: dict, skip_missing_va
values = value
self.wrap_values(input.inputs, values, skip_missing_values=skip_missing_values)
elif isinstance(input, DataToolParameter) and input.multiple:
dataset_instances = DatasetListWrapper.to_dataset_instances(value)
dataset_instances = DatasetListWrapper.to_dataset_instances(value, self.tool.profile)
input_values[input.name] = DatasetListWrapper(
None,
dataset_instances,
Expand Down Expand Up @@ -148,7 +148,7 @@ def wrap_values(self, inputs: "ToolInputsT", input_values: dict, skip_missing_va
)
else:
assert isinstance(input, ToolParameter)
input_values[input.name] = InputValueWrapper(input, value, incoming, tool.profile)
input_values[input.name] = InputValueWrapper(input, value, incoming)


def make_dict_copy(from_dict: dict):
Expand Down
11 changes: 9 additions & 2 deletions lib/galaxy/tools/wrappers.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
Union,
)

from packaging.version import Version
from typing_extensions import (
Self,
TypeAlias,
Expand Down Expand Up @@ -129,7 +130,6 @@ def __init__(
input: "ToolParameter",
value: Optional[str],
other_values: Optional[dict[str, str]] = None,
profile: Optional[float] = None,
) -> None:
self.input = input
if value is None and input.type == "text":
Expand Down Expand Up @@ -284,6 +284,11 @@ def __iter__(self) -> Iterable[str]:
raise Exception("Tried to iterate over a non-multiple parameter.")
return self.value.__iter__()

def __len__(self) -> int:
if not self.input.multiple:
raise Exception("Non-multiple parameter has no len().")
return self.value.__len__()


class DatasetFilenameWrapper(ToolParameterValueWrapper):
"""
Expand Down Expand Up @@ -593,13 +598,15 @@ def to_wrapper(
@staticmethod
def to_dataset_instances(
dataset_instance_sources: Any,
profile: Optional[float],
) -> list[Union[None, DatasetInstance]]:
dataset_instances: list[Optional[DatasetInstance]] = []
if not isinstance(dataset_instance_sources, list):
dataset_instance_sources = [dataset_instance_sources]
for dataset_instance_source in dataset_instance_sources:
if dataset_instance_source is None:
dataset_instances.append(dataset_instance_source)
if profile is None or Version(str(profile)) < Version("26.0"):
dataset_instances.append(dataset_instance_source)
elif getattr(dataset_instance_source, "history_content_type", None) == "dataset":
dataset_instances.append(dataset_instance_source)
elif getattr(dataset_instance_source, "hda", None):
Expand Down
73 changes: 73 additions & 0 deletions test/functional/tools/multi_len.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
<tool id="multi_len" name="multi_len" version="1.0.0" profile="26.0">
<description>test len() parameters allowing multiple</description>
<command><![CDATA[
echo '|select_ex| = #echo len($select_ex) #' > '$output' &&
echo '|select_ex_optional| = #echo len($select_ex_optional) #' >> '$output' &&
#for i, e in enumerate($select_ex_optional)
&& echo "select_ex_optional: element $i is $e"
#end for

echo '|data_ex| = #echo len($data_ex) #' >> '$output' &&
echo '|data_ex_optional| = #echo len($data_ex_optional) #' >> '$output'

#for i, e in enumerate($data_ex_optional)
&& echo "data_ex_optional: element $i is $e"
#end for
]]></command>
<inputs>
<param name="select_ex" type="select" multiple="true">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</param>
<param name="select_ex_optional" type="select" multiple="true" optional="true">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</param>
<param name="data_ex" type="data" format="data" multiple="true"/>
<param name="data_ex_optional" type="data" format="data" multiple="true" optional="true"/>
</inputs>
<outputs>
<data name="output" format="txt" />
</outputs>
<tests>
<test>
<param name="select_ex" value="1,2,3" />
<param name="select_ex_optional" value="1,2,3" />
<param name="data_ex" value="1.tabular,2.tabular"/>
<param name="data_ex_optional" value="1.tabular,2.tabular"/>
<output name="output">
<assert_contents>
<has_line line="|select_ex| = 3" />
<has_line line="|select_ex_optional| = 3" />
<has_line line="|data_ex| = 2" />
<has_line line="|data_ex_optional| = 2" />
</assert_contents>
</output>
</test>
<test>
<param name="select_ex" value="1,2,3" />
<param name="select_ex_optional" value_json="null" />
<param name="data_ex" value="1.tabular,2.tabular"/>
<param name="data_ex_optional" value_json="null"/>
<output name="output">
<assert_contents>
<has_line line="|select_ex| = 3" />
<has_line line="|select_ex_optional| = 0" />
<has_line_matching expression="^select_ex_optional: element" negate="true" />
<has_line line="|data_ex| = 2" />
<has_line line="|data_ex_optional| = 0" />
<has_line_matching expression="^data_ex_optional: element" negate="true" />
<has_n_lines n="4"/>
</assert_contents>
</output>
</test>
</tests>
<help>
</help>
</tool>
73 changes: 73 additions & 0 deletions test/functional/tools/multi_len_legacy.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
<tool id="multi_len_legacy" name="multi_len_legacy" version="1.0.0" profile="25.1">
<description>test len() parameters allowing multiple for 25.1</description>
<command><![CDATA[
echo '|select_ex| = #echo len($select_ex) #' > '$output' &&
echo '|select_ex_optional| = #echo len($select_ex_optional) #' >> '$output' &&
#for i, e in enumerate($select_ex_optional)
&& echo "select_ex_optional: element $i is $e"
#end for

echo '|data_ex| = #echo len($data_ex) #' >> '$output' &&
echo '|data_ex_optional| = #echo len($data_ex_optional) #' >> '$output'
#for i, e in enumerate($data_ex_optional)
&& echo "data_ex_optional: element $i is $e"
#end for

]]></command>
<inputs>
<param name="select_ex" type="select" multiple="true">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</param>
<param name="select_ex_optional" type="select" multiple="true" optional="true">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</param>
<param name="data_ex" type="data" format="data" multiple="true"/>
<param name="data_ex_optional" type="data" format="data" multiple="true" optional="true"/>
</inputs>
<outputs>
<data name="output" format="txt" />
</outputs>
<tests>
<test>
<param name="select_ex" value="1,2,3" />
<param name="select_ex_optional" value="1,2,3" />
<param name="data_ex" value="1.tabular,2.tabular"/>
<param name="data_ex_optional" value="1.tabular,2.tabular"/>
<output name="output">
<assert_contents>
<has_line line="|select_ex| = 3" />
<has_line line="|select_ex_optional| = 3" />
<has_line line="|data_ex| = 2" />
<has_line line="|data_ex_optional| = 2" />
</assert_contents>
</output>
</test>
<test>
<param name="select_ex" value="1,2,3" />
<param name="select_ex_optional" value_json="null" />
<param name="data_ex" value="1.tabular,2.tabular"/>
<param name="data_ex_optional" value_json="null"/>
<output name="output">
<assert_contents>
<has_line line="|select_ex| = 3" />
<has_line line="|select_ex_optional| = 0" />
<has_line_matching expression="^select_ex_optional: element" negate="true" />
<has_line line="|data_ex| = 2" />
<has_line line="|data_ex_optional| = 1" /> <!-- profile behavior giving the length of [None] -->
<has_line line="data_ex_optional: element 0 is None"/>
<has_n_lines n="5"/>
</assert_contents>
</output>
</test>
</tests>
<help>
</help>
</tool>
2 changes: 2 additions & 0 deletions test/functional/tools/sample_tool_conf.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
<tool file="help_features_rst.xml" />
<tool file="help_features_markdown.xml" />
<tool file="select_from_url.xml" />
<tool file="multi_len.xml" />
<tool file="multi_len_legacy.xml" />
<tool file="multi_select.xml" />
<tool file="multi_output.xml" />
<tool file="multi_output_configured.xml" />
Expand Down
Loading