Implement text defaults in Tool Request API.

This commit is contained in:
John Chilton
2025-10-29 16:33:27 -04:00
parent 2f13ed481f
commit c5f5a3136d
4 changed files with 100 additions and 3 deletions
+3 -3
View File
@@ -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]:
@@ -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()
@@ -0,0 +1,33 @@
<tool id="gx_text_default" name="gx_text_default" version="1.0.0">
<command><![CDATA[
echo '$parameter' >> '$output';
cat '$inputs' >> $inputs_json;
]]></command>
<configfiles>
<inputs name="inputs" filename="inputs.json" />
</configfiles>
<inputs>
<param name="parameter" type="text" value="foo" />
</inputs>
<outputs>
<data name="output" format="txt" />
<data name="inputs_json" format="json" />
</outputs>
<tests>
<test>
<param name="parameter" value="12456" />
<output name="output">
<assert_contents>
<has_line line="12456" />
</assert_contents>
</output>
</test>
<test>
<output name="output">
<assert_contents>
<has_line line="foo" />
</assert_contents>
</output>
</test>
</tests>
</tool>
@@ -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"