netx/netx_api/topology_views.py
oliver f301544b99 Optimize topology canvas per the 2026-10-12 plan.
Save path: one atomic POST /views/{id}/commit (edges, ports, styles, node
add/remove, positions) replaces the multi-request save. Edge styles and
manual-edge port edits now go through dirty/undo/save instead of writing
immediately; non-manual edge ports are read-only.

Data safety: UI saves no longer clear MCP node locks or freeze the device
name into the placement label (label_override + omit-means-keep semantics,
also applied to the MCP positions tool). Adding NEs/neighbors with unsaved
edits now saves first instead of silently dropping them. Positions no longer
bypass membership caps, except persisting synthesized child-region icons.

Fixes found in acceptance: nodes added in the same commit kept (40,40)
under autoflush=False; edits on edges deleted in the same save 404'd the
whole save; box-selection drags and arrow-key moves were not marked dirty;
large canvases far from the origin opened blank and locate did nothing
because fitView waits for measurement that onlyRenderVisibleElements never
does (now fitBounds from known geometry).

Also: batch N+1 lookups in graph/positions, deterministic truncation,
outside-peer scan excludes internal edges, split TopologyPage into hooks,
fix flaky UME/LLDP port test, add scripts/topology_clear_frozen_labels.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 22:11:22 +08:00

51 lines
1.2 KiB
Python

"""Topology folder tree and leaf view operations (facade)."""
from __future__ import annotations
from .topology_views_commit import commit_view_changes, patch_manual_edge_ports
from .topology_views_graph import (
_place_fabric_ids_on_view,
add_nodes_to_view,
create_topology_placeholder_on_view,
get_view_graph,
patch_view_edge_style,
patch_view_positions,
populate_view,
project_fabric_neighbors_to_view,
remove_view_nodes,
)
from .topology_views_tree import (
bootstrap_topology_tree,
create_folder,
create_view,
delete_folder,
delete_view,
ensure_region_physical_view,
get_topology_tree,
list_views,
update_folder,
update_view,
)
__all__ = [
"_place_fabric_ids_on_view",
"add_nodes_to_view",
"bootstrap_topology_tree",
"commit_view_changes",
"create_folder",
"create_topology_placeholder_on_view",
"create_view",
"delete_folder",
"delete_view",
"ensure_region_physical_view",
"get_topology_tree",
"get_view_graph",
"list_views",
"patch_manual_edge_ports",
"patch_view_edge_style",
"patch_view_positions",
"populate_view",
"project_fabric_neighbors_to_view",
"remove_view_nodes",
"update_folder",
"update_view",
]