mirror of
https://github.com/hansjone/netx.git
synced 2026-10-09 02:00:46 +08:00
Preserve sheet_id/title on compare template import so split sheets round-trip.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
83cf086d8c
commit
9b3e98ede5
2 changed files with 27 additions and 0 deletions
|
|
@ -303,6 +303,9 @@ class RowFilterIn(BaseModel):
|
||||||
|
|
||||||
class TemplateMetricIn(BaseModel):
|
class TemplateMetricIn(BaseModel):
|
||||||
metric_id: str
|
metric_id: str
|
||||||
|
# Split sheets share metric_id; identity is sheet_id (export/import must keep both).
|
||||||
|
sheet_id: str = ""
|
||||||
|
title: str = ""
|
||||||
key_fields: list[str] = Field(default_factory=list)
|
key_fields: list[str] = Field(default_factory=list)
|
||||||
iface_fields: list[str] = Field(default_factory=list)
|
iface_fields: list[str] = Field(default_factory=list)
|
||||||
compare_fields: list[str] = Field(default_factory=list)
|
compare_fields: list[str] = Field(default_factory=list)
|
||||||
|
|
|
||||||
|
|
@ -420,6 +420,30 @@ class CompareSheetDefaultsTests(unittest.TestCase):
|
||||||
self.assertEqual(a["metric_id"], b["metric_id"])
|
self.assertEqual(a["metric_id"], b["metric_id"])
|
||||||
self.assertNotEqual(sheet_key(a), sheet_key(b))
|
self.assertNotEqual(sheet_key(a), sheet_key(b))
|
||||||
|
|
||||||
|
def test_template_in_roundtrip_keeps_split_sheet_ids(self) -> None:
|
||||||
|
"""Export → TemplateIn → create must preserve 拆表 sheet_id (ISIS/BGP/VRRP)."""
|
||||||
|
from netx_api.biz_state.compare_service import (
|
||||||
|
_default_zte_status_sheets,
|
||||||
|
_parse_metrics_body,
|
||||||
|
sheet_key,
|
||||||
|
)
|
||||||
|
from netx_api.biz_state_router import TemplateIn
|
||||||
|
|
||||||
|
sheets = _default_zte_status_sheets()
|
||||||
|
body = TemplateIn(
|
||||||
|
name="ZTE status roundtrip",
|
||||||
|
metrics=sheets,
|
||||||
|
).model_dump()
|
||||||
|
parsed = _parse_metrics_body(body)
|
||||||
|
self.assertEqual(len(parsed), len(sheets))
|
||||||
|
ids = [sheet_key(s) for s in parsed]
|
||||||
|
self.assertIn("isis_adjacency.ipv4", ids)
|
||||||
|
self.assertIn("isis_adjacency.ipv6", ids)
|
||||||
|
self.assertEqual(sum(1 for s in parsed if s["metric_id"] == "isis_adjacency"), 2)
|
||||||
|
self.assertEqual(sum(1 for s in parsed if s["metric_id"] == "bgp_peer"), 6)
|
||||||
|
isis4 = next(s for s in parsed if sheet_key(s) == "isis_adjacency.ipv4")
|
||||||
|
self.assertTrue(str(isis4.get("title") or "").strip())
|
||||||
|
|
||||||
def test_arp_default_sheet_has_row_filters(self) -> None:
|
def test_arp_default_sheet_has_row_filters(self) -> None:
|
||||||
from netx_api.biz_state.compare_service import _default_sheet_for_metric
|
from netx_api.biz_state.compare_service import _default_sheet_for_metric
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue