mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-11-03 05:51:15 +02:00
marker: support clearing direction via explicit null / "both"
direction was settable but not clearable: once a marker or project-level definition had direction=tx/rx, no update path could return it to "both directions", and the definition-sync fan-out silently kept stale values on every inherited copy. Introduce a _UNSET sentinel (link.py) distinct from None so updaters can tell "caller omitted direction" (preserve) from "caller passed None" (clear). Thread it through UDPLink.update_marker and Project.update_marker_definition; the two REST routes use Pydantic v2 model_fields_set to translate an explicit JSON null into the sentinel. MCP follows with a "both" token: link_marker / marker_definition handlers map direction="both" to a null in the REST body (tri-state: omit=preserve, tx/rx=set, both=clear), and the tool descriptions/docstrings document it. Backward compatible: omitting direction or passing tx/rx behaves exactly as before; only an explicit null / "both" clears.
This commit is contained in:
7 files changed
+48
-21
No files matched your search
@@ -17,7 +17,7 @@
|
||||
|
||||
|
||||
from .controller_error import ControllerError, ControllerNotFoundError
|
||||
from .link import Link
|
||||
from .link import Link, _UNSET
|
||||
from .node_types import BUILTIN_NODE_TYPES
|
||||
from gns3server.utils.packet_filter_validation import validate_bpf_syntax, FilterValidationError
|
||||
|
||||
@@ -430,7 +430,7 @@ class UDPLink(Link):
|
||||
self._project.emit_notification("link.updated", self.asdict())
|
||||
self._project.dump()
|
||||
|
||||
async def update_marker(self, name, bpf=None, tag=None, enabled=None, direction=None, color=None, highlight_duration=None, inherited=False):
|
||||
async def update_marker(self, name, bpf=None, tag=None, enabled=None, direction=_UNSET, color=None, highlight_duration=None, inherited=False):
|
||||
"""
|
||||
Update an existing marker's BPF/tag/enabled/color. Any change pushes via
|
||||
``self.update()``; uBridge picks up the new params on the next NIO
|
||||
@@ -470,8 +470,8 @@ class UDPLink(Link):
|
||||
marker_info["color"] = color
|
||||
if highlight_duration is not None:
|
||||
marker_info["highlight_duration"] = highlight_duration
|
||||
if direction is not None:
|
||||
marker_info["direction"] = direction
|
||||
if direction is not _UNSET:
|
||||
marker_info["direction"] = direction # None = clear back to both directions
|
||||
|
||||
if self._created:
|
||||
await self.update()
|
||||
|
||||
Reference in new issue
Block a user