diff --git a/gns3server/api/routes/controller/links.py b/gns3server/api/routes/controller/links.py index 6afa6f7cc..ce9caf450 100644 --- a/gns3server/api/routes/controller/links.py +++ b/gns3server/api/routes/controller/links.py @@ -107,6 +107,8 @@ async def create_link(project_id: UUID, link_data: schemas.LinkCreate) -> schema await link.update_link_style(link_data["link_style"]) if "suspend" in link_data: await link.update_suspend(link_data["suspend"]) + if "show_filters_icon" in link_data: + await link.update_show_filters_icon(link_data["show_filters_icon"]) try: for node in link_data["nodes"]: await link.add_node( @@ -171,6 +173,8 @@ async def update_link(link_data: schemas.LinkUpdate, link: Link = Depends(dep_li await link.update_link_style(link_data["link_style"]) if "suspend" in link_data: await link.update_suspend(link_data["suspend"]) + if "show_filters_icon" in link_data: + await link.update_show_filters_icon(link_data["show_filters_icon"]) if "nodes" in link_data: await link.update_nodes(link_data["nodes"]) return link.asdict() diff --git a/gns3server/controller/link.py b/gns3server/controller/link.py index ecd74b045..14ff447ea 100644 --- a/gns3server/controller/link.py +++ b/gns3server/controller/link.py @@ -89,6 +89,7 @@ class Link: self._filters = {} self._link_style = {} self._wireshark = False + self._show_filters_icon = True @property def filters(self): @@ -97,6 +98,13 @@ class Link: """ return self._filters + @property + def show_filters_icon(self): + """ + Get whether to show filters icon in Web UI + """ + return getattr(self, '_show_filters_icon', True) + @property def project(self): """ @@ -167,6 +175,17 @@ class Link: self._project.emit_notification("link.updated", self.asdict()) self._project.dump() + async def update_show_filters_icon(self, value): + """ + Update the show_filters_icon property. + + :param value: Boolean indicating whether to show filters icon in Web UI + """ + if value != self._show_filters_icon: + self._show_filters_icon = value + self._project.emit_notification("link.updated", self.asdict()) + self._project.dump() + async def update_link_style(self, link_style): if link_style != self._link_style: self._link_style = link_style @@ -555,6 +574,7 @@ class Link: "filters": self._filters, "link_style": self._link_style, "suspend": self._suspended, + "show_filters_icon": getattr(self, '_show_filters_icon', True), } return { "nodes": res, @@ -569,4 +589,5 @@ class Link: "suspend": self._suspended, "link_style": self._link_style, "wireshark": self._wireshark, + "show_filters_icon": getattr(self, '_show_filters_icon', True), } diff --git a/gns3server/controller/project.py b/gns3server/controller/project.py index e0a38838c..d9c30a703 100644 --- a/gns3server/controller/project.py +++ b/gns3server/controller/project.py @@ -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"]) diff --git a/gns3server/schemas/controller/links.py b/gns3server/schemas/controller/links.py index 258696ea3..be6846bb8 100644 --- a/gns3server/schemas/controller/links.py +++ b/gns3server/schemas/controller/links.py @@ -62,6 +62,10 @@ class LinkBase(BaseModel): suspend: Optional[bool] = None link_style: Optional[LinkStyle] = None filters: Optional[dict] = None + show_filters_icon: Optional[bool] = Field( + True, + description="Show filters icon in Web UI" + ) class LinkCreate(LinkBase): diff --git a/tests/controller/test_link.py b/tests/controller/test_link.py index 86784ef7e..239682948 100644 --- a/tests/controller/test_link.py +++ b/tests/controller/test_link.py @@ -221,6 +221,7 @@ async def test_json(project, compute): } ], "filters": {}, + "show_filters_icon": True, "link_style": {}, "suspend": False, 'wireshark': False, @@ -254,6 +255,7 @@ async def test_json(project, compute): ], "link_style": {}, "filters": {}, + "show_filters_icon": True, "suspend": False }