From 4dac76f703c3df199cedac409c63d8bc7cd3337e Mon Sep 17 00:00:00 2001 From: christian Date: Tue, 20 Oct 2026 16:18:15 -0400 Subject: [PATCH] Campus hello: the same address under a new name replaces its old entry Woonsocket reported as "new" before its first setup finished, then as ws: NA kept both. Co-Authored-By: Claude Opus 5.5 --- settings/server.py | 5 ++++- tests/test_campus.py | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/settings/server.py b/settings/server.py index 5ccacdc..3ba7e59 100644 --- a/settings/server.py +++ b/settings/server.py @@ -890,7 +890,10 @@ class Handler(http.server.BaseHTTPRequestHandler): or not allowed_client(url[7:].split(":")[0]): return self.send(400, {"error": "an id like ws and an address like http://10.5.1.1:8020"}) data = campuses.load(site.data_dir) - data.setdefault("list", {})[cid] = {"id": cid, "name": str(body.get("name") or cid)[:40], "url": url} + lst = data.setdefault("list", {}) + for other in [k for k, e in lst.items() if k != cid and (e or {}).get("url") == url]: + lst.pop(other) # the same Mac under its old name (before its first setup) + lst[cid] = {"id": cid, "name": str(body.get("name") or cid)[:40], "url": url} campuses.save(site.data_dir, data) return self.send(200, {"ok": True}) if path == "/api/fleet/hello": diff --git a/tests/test_campus.py b/tests/test_campus.py index 385002f..37bc59c 100644 --- a/tests/test_campus.py +++ b/tests/test_campus.py @@ -323,3 +323,6 @@ class TestCampusHello(TestRoutes): self.assertEqual(get(self.port, "/api/campus/hello", bad)[0], 400, bad) from settings import campuses as cv self.assertEqual(cv.load(self.data)["list"]["ws"]["url"], "http://10.5.1.1:8020") + get(self.port, "/api/campus/hello", {"id": "new", "url": "http://10.5.1.9:8020"}) + get(self.port, "/api/campus/hello", {"id": "sc", "name": "Southcoast", "url": "http://10.5.1.9:8020"}) + self.assertNotIn("new", cv.load(self.data)["list"]) # same Mac, now named: the old entry goes