diff --git a/lib/galaxy/tool_util/parameters/convert.py b/lib/galaxy/tool_util/parameters/convert.py index 88038eb65b6..c940c80ef4b 100644 --- a/lib/galaxy/tool_util/parameters/convert.py +++ b/lib/galaxy/tool_util/parameters/convert.py @@ -383,14 +383,14 @@ def _fill_default_for(tool_state: Dict[str, Any], parameter: ToolParameterT) -> if not text_parameter.optional: # restore legacy behavior of allowing empty string implicit default # for these non-optional inputs. - tool_state[parameter_name] = "" + tool_state[parameter_name] = text_parameter.default_value or "" else: - tool_state[parameter_name] = None + tool_state[parameter_name] = text_parameter.default_value or None else: # legacy behavior of converting explicit None into implicit null. We should introduce # a layer somewhere to deal with this behavior further up the stack and clean up these models. if not text_parameter.optional and tool_state[parameter_name] is None: - tool_state[parameter_name] = "" + tool_state[parameter_name] = text_parameter.default_value or "" def _initialize_section_state(parameter: ToolParameterT, tool_state: Dict[str, Any]) -> Dict[str, Any]: diff --git a/lib/galaxy/tool_util/parameters/factory.py b/lib/galaxy/tool_util/parameters/factory.py index 54ea9bb1769..1022fff2035 100644 --- a/lib/galaxy/tool_util/parameters/factory.py +++ b/lib/galaxy/tool_util/parameters/factory.py @@ -119,12 +119,15 @@ def _from_input_source_galaxy(input_source: InputSource, profile: float) -> Tool ) elif param_type == "text": optional, optionality_inferred = text_input_is_optional(input_source) + implicit_default = None if optional else "" + default_value = input_source.get("value", implicit_default) text_validators: List[TextCompatiableValidators] = _text_validators(input_source) return TextParameterModel( type="text", name=input_source.parse_name(), optional=optional, validators=text_validators, + value=default_value, ) elif param_type == "float": optional = input_source.parse_optional() diff --git a/test/functional/tools/parameters/gx_text_default.xml b/test/functional/tools/parameters/gx_text_default.xml new file mode 100644 index 00000000000..2436346419f --- /dev/null +++ b/test/functional/tools/parameters/gx_text_default.xml @@ -0,0 +1,33 @@ + + > '$output'; +cat '$inputs' >> $inputs_json; + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/unit/tool_util/parameter_specification.yml b/test/unit/tool_util/parameter_specification.yml index 0691b409eb4..e187866e106 100644 --- a/test/unit/tool_util/parameter_specification.yml +++ b/test/unit/tool_util/parameter_specification.yml @@ -404,6 +404,67 @@ gx_text_optional_false: relaxed_request_invalid: - parameter: 5 +gx_text_default: + request_valid: &gx_text_default_request_valid + - parameter: moocow + - parameter: 'some spaces' + - parameter: '' + - {} + # these are implicitly null just like gx_text + - parameter: null + request_invalid: &gx_text_default_request_invalid + - parameter: 5 + - parameter: {} + - parameter: { "moo": "cow" } + - parameter: {__class__: 'ConnectedValue'} + request_internal_valid: + *gx_text_default_request_valid + request_internal_invalid: + *gx_text_default_request_invalid + request_internal_dereferenced_valid: + *gx_text_default_request_valid + request_internal_dereferenced_invalid: + *gx_text_default_request_invalid + landing_request_valid: + *gx_text_default_request_valid + landing_request_invalid: + *gx_text_default_request_invalid + landing_request_internal_valid: + *gx_text_default_request_valid + landing_request_internal_invalid: + *gx_text_default_request_invalid + job_internal_valid: + - parameter: moocow + - parameter: 'some spaces' + - parameter: '' + - parameter: null + job_internal_invalid: + - {} + - parameter: { "moo": "cow" } + workflow_step_valid: + - parameter: moocow + - parameter: 'some spaces' + - parameter: '' + - {} + - parameter: null + workflow_step_invalid: + - parameter: 5 + - parameter: {} + - parameter: { "moo": "cow" } + - parameter: {__class__: 'ConnectedValue'} + workflow_step_linked_valid: + - parameter: moocow + - parameter: 'some spaces' + - parameter: '' + - {} + - parameter: {__class__: 'ConnectedValue'} + - parameter: null + workflow_step_linked_invalid: + - parameter: 5 + - parameter: {} + - parameter: { "moo": "cow" } + - parameter: {"class": 'ConnectedValue'} + gx_text_length_validation: request_valid: - parameter: "mytext"