mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Fix tool request API for multiple select parameters with defaults.
This commit is contained in:
@@ -289,7 +289,7 @@ def encode_test(
|
||||
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
|
||||
@@ -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:
|
||||
|
||||
@@ -1175,6 +1175,7 @@ class SelectParameterModel(BaseGalaxyToolParameterModelDefinition):
|
||||
|
||||
@property
|
||||
def default_value(self) -> Optional[str]:
|
||||
assert not self.multiple
|
||||
if self.options:
|
||||
for option in self.options:
|
||||
if option.selected:
|
||||
@@ -1185,6 +1186,13 @@ class SelectParameterModel(BaseGalaxyToolParameterModelDefinition):
|
||||
|
||||
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
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user