Skip to content
Merged
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: 2 additions & 2 deletions lib/galaxy/tool_util/parameters/convert.py
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ def encode_callback(parameter: ToolParameterT, value: Any):
test_collection = cast(JsonTestCollectionDefDict, value)
return adapt_collections(test_collection).model_dump()
elif isinstance(parameter, SelectParameterModel):
if parameter.multiple and value is not None:
if parameter.multiple and value is not None and isinstance(value, (str,)):
return [v.strip() for v in value.split(",")]
else:
return VISITOR_NO_REPLACEMENT
Expand Down Expand Up @@ -359,7 +359,7 @@ def _fill_default_for(tool_state: Dict[str, Any], parameter: ToolParameterT) ->
if not parameter.multiple:
tool_state[parameter_name] = parameter.default_value
else:
tool_state[parameter_name] = None
tool_state[parameter_name] = parameter.default_values
elif isinstance(parameter, DrillDownParameterModel):
if parameter_name not in tool_state:
if parameter.multiple:
Expand Down
8 changes: 8 additions & 0 deletions lib/galaxy/tool_util_models/parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -1175,6 +1175,7 @@ def has_selected_static_option(self):

@property
def default_value(self) -> Optional[str]:
assert not self.multiple
if self.options:
for option in self.options:
if option.selected:
Expand All @@ -1185,6 +1186,13 @@ def default_value(self) -> Optional[str]:

return None

@property
def default_values(self) -> Optional[List[str]]:
assert self.multiple
if self.options:
return [option.value for option in self.options if option.selected]
return None

@property
def request_requires_value(self) -> bool:
# API will allow an empty value and just grab the first static option
Expand Down
11 changes: 11 additions & 0 deletions lib/galaxy_test/api/test_tool_execute.py
Original file line number Diff line number Diff line change
Expand Up @@ -681,6 +681,17 @@ def test_select_multiple_does_not_select_first_by_default(
).with_contents_stripped("None")


@requires_tool_id("gx_select_multiple_one_default")
def test_select_multiple_does_default_to_select_values_marked_as_selected(
required_tools: list[RequiredTool], tool_input_format: DescribeToolInputs
):
empty = tool_input_format.when.any({})
for required_tool in required_tools:
required_tool.execute.with_inputs(empty).assert_has_single_job.with_output("output").with_contents_stripped(
"--ex3"
)


@requires_tool_id("gx_text")
@requires_tool_id("gx_text_optional_false")
def test_null_to_text_tools(required_tools: list[RequiredTool], tool_input_format: DescribeToolInputs):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<tool id="gx_select_multiple_one_default" name="gx_select_multiple_one_default" version="1.0.0">
<command><![CDATA[
echo '$parameter' >> '$output'
]]></command>
<inputs>
<param name="parameter" type="select" multiple="true">
<option value="--ex1">Ex1</option>
<option value="ex2">Ex2</option>
<option value="--ex3" selected="true">Ex3</option>
<option value="--ex4">Ex4</option>
<option value="ex5">Ex5</option>
</param>
</inputs>
<outputs>
<data name="output" format="txt" />
</outputs>
<tests>
<test>
<param name="parameter" value="ex2" />
<output name="output">
<assert_contents>
<has_line line="ex2" />
</assert_contents>
</output>
</test>
<test>
<!-- these parameters are not implicitly optional and don't select top option -->
<output name="output">
<assert_contents>
<has_line line="--ex3" />
</assert_contents>
</output>
</test>
</tests>
</tool>
1 change: 1 addition & 0 deletions test/functional/tools/simple_constructs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ echo $drop_select >> '$out_file1' &&
<has_line line="booltrue" />
<has_line line="12456" />
<has_line line="6.789" />
<has_line line="a_check" />
<has_line line="This is a line of text." />
</assert_contents>
</output>
Expand Down
8 changes: 5 additions & 3 deletions test/unit/tool_util/test_parameter_convert.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,12 +232,14 @@ def test_fill_defaults():
with_defaults = fill_state_for({}, "parameters/gx_select_optional")
assert with_defaults["parameter"] is None

# Not ideal but matching current behavior
with_defaults = fill_state_for({}, "parameters/gx_select_multiple")
assert with_defaults["parameter"] is None
assert with_defaults["parameter"] == []

with_defaults = fill_state_for({}, "parameters/gx_select_multiple_optional")
assert with_defaults["parameter"] is None
assert with_defaults["parameter"] == []

with_defaults = fill_state_for({}, "parameters/gx_select_multiple_one_default")
assert with_defaults["parameter"] == ["--ex3"]

# Do not fill in dynamic defaults... these require a Galaxy runtime.
with_defaults = fill_state_for({}, "remove_value", partial=True)
Expand Down
Loading