Filtrer les couches retirées du flux /api/tiles et de la fusion en direct

Au rechargement de la page, l'index obsolète du worker (16 couches)
polluait le /api/tiles fusionné et mergeTilesData réajoutait les couches
retirées au menu. viz_meta est désormais filtré aux couches du panneau
(PANEL_VIZ) côté serveur, et le panneau client est figé au chargement
(clés VIZ_META initiales) : aucun flux ne peut réintroduire de couche
hors panneau, même avec un index distant périmé.
This commit is contained in:
Antoine Jacquin
2026-09-13 23:06:08 +02:00
parent f79608a92f
commit 0d3aa41008
3 changed files with 28 additions and 5 deletions

View File

@ -339,7 +339,12 @@ def test_tiles_endpoint_stamp_diffing(tmp_path, monkeypatch):
def test_tiles_endpoint_merges_remote_index(tmp_path, monkeypatch):
"""L'index du worker prime ; le cache local complète les positions perdues."""
"""L'index du worker prime ; le cache local complète les positions perdues.
viz_meta est filtré aux couches du panneau (PANEL_VIZ) : une couche
retirée (absente de PANEL_VIZ) proposée par un index obsolète n'est
pas réintroduite.
"""
import json
import lidar_pipeline.webapp as webapp
monkeypatch.setattr(webapp, "OUTPUT_DIR", tmp_path)
@ -349,7 +354,10 @@ def test_tiles_endpoint_merges_remote_index(tmp_path, monkeypatch):
{"col": 1054, "row": 6882, "resolution": 0.2, "viz": {}}, # commun
{"col": 1050, "row": 6882, "resolution": 0.2, "viz": {}}, # local seul
],
"viz_meta": {"local": {"label": "Locale"}},
"viz_meta": {
"aspect": {"label": "Aspect local"},
"slope": {"label": "Pente locale"},
},
"stats": {},
}), encoding="utf-8")
import os
@ -361,7 +369,10 @@ def test_tiles_endpoint_merges_remote_index(tmp_path, monkeypatch):
{"col": 1054, "row": 6882, "resolution": 0.2, "viz": {"slope": {}}},
{"col": 1055, "row": 6882, "resolution": 0.2, "viz": {}}, # distant seul
],
"viz_meta": {"slope": {"label": "Pente"}},
"viz_meta": {
"slope": {"label": "Pente"},
"wavelet": {"label": "Ondulets"}, # hors panneau : filtrée
},
})
d = webapp.tiles_data()
entries = {(t["col"], json.dumps(t["viz"], sort_keys=True)) for t in d["tiles"]}
@ -369,7 +380,8 @@ def test_tiles_endpoint_merges_remote_index(tmp_path, monkeypatch):
assert (1055, '{}') in entries # tuile non cachée visible
assert (1050, '{}') in entries # historique local conservé
assert d["viz_meta"]["slope"]["label"] == "Pente" # distant prime
assert d["viz_meta"]["local"]["label"] == "Locale" # local complété
assert d["viz_meta"]["aspect"]["label"] == "Aspect local" # local complété
assert "wavelet" not in d["viz_meta"] # couche hors panneau filtrée
assert d["stamp"] == remote_stamp # max des deux stamps