From 21cb3d9d7d9cc152d635712c754662ace2761edc Mon Sep 17 00:00:00 2001 From: Nicola Soranzo Date: Thu, 19 Dec 2019 01:58:25 +0000 Subject: [PATCH] Restore returning "None" when casting unselected multiselect param to str Broken in commit 7d3b9c53bbabd4f780f8d051717d8d9c0008267d . Before the above-mentioned commit, when a `` was left unselected, its value was `None`, casted to string as `"None"`. Tool authors would check if the user has selected a value with something like: ``` #if str($blah) != 'None': ``` After the above-mentioned commit, the value of the unselected param is `[]`, casted to string as `""`, which breaks tools using the check above. This restores the previous behaviour. Seen in pull request: https://github.com/galaxyproject/tools-iuc/pull/2691 --- lib/galaxy/tools/parameters/basic.py | 2 +- test/unit/tools/test_wrappers.py | 22 +++++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/lib/galaxy/tools/parameters/basic.py b/lib/galaxy/tools/parameters/basic.py index caa2465d7be..1d05ff78254 100644 --- a/lib/galaxy/tools/parameters/basic.py +++ b/lib/galaxy/tools/parameters/basic.py @@ -903,7 +903,7 @@ class SelectToolParameter(ToolParameter): return value def to_param_dict_string(self, value, other_values={}): - if value is None: + if value in (None, []): return "None" if isinstance(value, list): if not self.multiple: diff --git a/test/unit/tools/test_wrappers.py b/test/unit/tools/test_wrappers.py index 3bf54513d8a..9bb9bb53a18 100644 --- a/test/unit/tools/test_wrappers.py +++ b/test/unit/tools/test_wrappers.py @@ -42,11 +42,31 @@ def test_select_wrapper_simple_options(tool): ''') parameter = SelectToolParameter(tool, xml) wrapper = SelectToolParameterWrapper(parameter, "x") - assert str(wrapper) == "x" assert wrapper.name == "blah" + assert str(wrapper) == "x" assert wrapper.value_label == "I am X" +@with_mock_tool +def test_select_wrapper_multiple_options(tool): + xml = XML(''' + + + + ''') + parameter = SelectToolParameter(tool, xml) + wrapper = SelectToolParameterWrapper(parameter, ["x"]) + assert wrapper.name == "blah" + assert str(wrapper) == "x" + assert "x" in wrapper + wrapper = SelectToolParameterWrapper(parameter, ["x", "z"]) + assert str(wrapper) == "x,z" + assert "x" in wrapper + wrapper = SelectToolParameterWrapper(parameter, []) + assert str(wrapper) == "None" + assert "x" not in wrapper + + @with_mock_tool def test_select_wrapper_with_drilldown(tool): parameter = _drilldown_parameter(tool)