feat: add show_filters_icon property to Link for controlling Web UI filter icon display

This commit adds a new  property to the Link class, allowing users to control whether filter icons are displayed in the Web UI at the individual link level.

**Changes:**
- Added  attribute to Link class (default: True)
- Added  property getter
- Added  method for updating the property
- Updated  to include the new field with backward compatibility
- Added  field to LinkBase schema using Optional[bool] = Field(True, ...) pattern
- Updated API routes to handle the new field in create and update operations
- Added loading logic for show_filters_icon in project.open() to preserve settings when reopening projects

**Schema Definition:**
Uses the same pattern as the  field:

**API Impact:**
- POST /v3/projects/{project_id}/links - accepts  in request body
- PUT /v3/projects/{project_id}/links/{link_id} - can update
- GET /v3/projects/{project_id}/links/{link_id} - returns  field

**Future Applications:**
This feature provides granular control for future AI fault injection modules to manage link-level protocol failures while maintaining clean UI presentation.
This commit is contained in:
YueGuobin 2026-05-23 16:57:39 +08:00
parent 367c565d7c
commit a1f4942746
No known key found for this signature in database
3 changed files with 8 additions and 3 deletions

View File

@ -574,7 +574,7 @@ class Link:
"filters": self._filters,
"link_style": self._link_style,
"suspend": self._suspended,
"show_filters_icon": self._show_filters_icon,
"show_filters_icon": getattr(self, '_show_filters_icon', True),
}
return {
"nodes": res,
@ -589,5 +589,5 @@ class Link:
"suspend": self._suspended,
"link_style": self._link_style,
"wireshark": self._wireshark,
"show_filters_icon": self._show_filters_icon,
"show_filters_icon": getattr(self, '_show_filters_icon', True),
}

View File

@ -1208,6 +1208,8 @@ class Project:
await link.update_filters(link_data["filters"])
if "link_style" in link_data:
await link.update_link_style(link_data["link_style"])
if "show_filters_icon" in link_data:
await link.update_show_filters_icon(link_data["show_filters_icon"])
for node_link in link_data.get("nodes", []):
node = self.get_node(node_link["node_id"])
port = node.get_port(node_link["adapter_number"], node_link["port_number"])

View File

@ -62,7 +62,10 @@ class LinkBase(BaseModel):
suspend: Optional[bool] = None
link_style: Optional[LinkStyle] = None
filters: Optional[dict] = None
show_filters_icon: Optional[bool] = Field(default=True, description="Show filters icon in Web UI")
show_filters_icon: Optional[bool] = Field(
True,
description="Show filters icon in Web UI"
)
class LinkCreate(LinkBase):