fix: make sure tool mode is not lost on component validation (#5875)
This commit is contained in:
parent
ec7e76cc7b
commit
eedabbe50f
2 changed files with 21 additions and 21 deletions
|
|
@ -667,6 +667,13 @@ async def custom_component(
|
||||||
if raw_code.frontend_node is not None:
|
if raw_code.frontend_node is not None:
|
||||||
built_frontend_node = await component_instance.update_frontend_node(built_frontend_node, raw_code.frontend_node)
|
built_frontend_node = await component_instance.update_frontend_node(built_frontend_node, raw_code.frontend_node)
|
||||||
|
|
||||||
|
tool_mode: bool = built_frontend_node.get("tool_mode", False)
|
||||||
|
if isinstance(component_instance, Component):
|
||||||
|
await component_instance.run_and_validate_update_outputs(
|
||||||
|
frontend_node=built_frontend_node,
|
||||||
|
field_name="tool_mode",
|
||||||
|
field_value=tool_mode,
|
||||||
|
)
|
||||||
type_ = get_instance_name(component_instance)
|
type_ = get_instance_name(component_instance)
|
||||||
return CustomComponentResponse(data=built_frontend_node, type=type_)
|
return CustomComponentResponse(data=built_frontend_node, type=type_)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ def update_frontend_node_with_template_values(frontend_node, raw_frontend_node):
|
||||||
"""Updates the given frontend node with values from the raw template data.
|
"""Updates the given frontend node with values from the raw template data.
|
||||||
|
|
||||||
:param frontend_node: A dict representing a built frontend node.
|
:param frontend_node: A dict representing a built frontend node.
|
||||||
:param raw_template_data: A dict representing raw template data.
|
:param raw_frontend_node: A dict representing raw template data.
|
||||||
:return: Updated frontend node.
|
:return: Updated frontend node.
|
||||||
"""
|
"""
|
||||||
if not is_valid_data(frontend_node, raw_frontend_node):
|
if not is_valid_data(frontend_node, raw_frontend_node):
|
||||||
|
|
@ -77,29 +77,22 @@ def update_frontend_node_with_template_values(frontend_node, raw_frontend_node):
|
||||||
|
|
||||||
old_code = raw_frontend_node["template"]["code"]["value"]
|
old_code = raw_frontend_node["template"]["code"]["value"]
|
||||||
new_code = frontend_node["template"]["code"]["value"]
|
new_code = frontend_node["template"]["code"]["value"]
|
||||||
frontend_node["edited"] = raw_frontend_node["edited"] or (old_code != new_code)
|
frontend_node["edited"] = raw_frontend_node.get("edited", False) or (old_code != new_code)
|
||||||
frontend_node["tool_mode"] = raw_frontend_node.get("tool_mode", False)
|
|
||||||
|
|
||||||
if any(extract_tool_modes(raw_frontend_node["template"])):
|
# Compute tool modes from template
|
||||||
|
tool_modes = [
|
||||||
|
value.get("tool_mode")
|
||||||
|
for key, value in raw_frontend_node["template"].items()
|
||||||
|
if key != "_type" and isinstance(value, dict)
|
||||||
|
]
|
||||||
|
|
||||||
|
if any(tool_modes):
|
||||||
|
frontend_node["tool_mode"] = raw_frontend_node.get("tool_mode", False)
|
||||||
|
else:
|
||||||
frontend_node["tool_mode"] = False
|
frontend_node["tool_mode"] = False
|
||||||
|
|
||||||
if not frontend_node.get("edited", False):
|
if not frontend_node.get("edited", False):
|
||||||
frontend_node["display_name"] = raw_frontend_node["display_name"]
|
frontend_node["display_name"] = raw_frontend_node.get("display_name", frontend_node.get("display_name", ""))
|
||||||
frontend_node["description"] = raw_frontend_node["description"]
|
frontend_node["description"] = raw_frontend_node.get("description", frontend_node.get("description", ""))
|
||||||
|
|
||||||
return frontend_node
|
return frontend_node
|
||||||
|
|
||||||
|
|
||||||
def extract_tool_modes(data: dict | list) -> list[bool | None]:
|
|
||||||
tool_models = []
|
|
||||||
if isinstance(data, dict):
|
|
||||||
for key, value in data.items():
|
|
||||||
if key == "tool_mode":
|
|
||||||
tool_models.append(value)
|
|
||||||
else:
|
|
||||||
tool_models.extend(extract_tool_modes(value))
|
|
||||||
elif isinstance(data, list):
|
|
||||||
for item in data:
|
|
||||||
tool_models.extend(extract_tool_modes(item))
|
|
||||||
|
|
||||||
return tool_models
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue