0.6.6: dalla Home si aprono le regolazioni dell'oggetto toccato, non di tutto l'impianto

This commit is contained in:
2026-10-11 09:59:25 +02:00
parent a788255593
commit afb2878a8c
8 changed files with 167 additions and 23 deletions
+69
View File
@@ -0,0 +1,69 @@
#!/usr/bin/env python3
"""Controlla che la Home apra le regolazioni dell'oggetto toccato.
La UI non e' eseguibile senza il kit Silica, quindi il controllo e' statico:
1. ogni push verso SetpointsPage.qml dichiara una sezione (chi tocca "Casa"
non deve trovarsi davanti le regolazioni di tutto l'impianto);
2. la sezione dichiarata e' fra quelle che la pagina conosce;
3. ogni sezione della pagina e' legata a una visibilita' (mostraCasa /
mostraAcqua), altrimenti "solo quelle dell'oggetto" resta una promessa.
Esce 0 se tutto regge, 1 con l'elenco dei problemi.
"""
import pathlib
import re
import sys
QML = pathlib.Path(__file__).resolve().parent.parent / "qml"
HOME = QML / "pages" / "MainPage.qml"
PAGINA = QML / "pages" / "SetpointsPage.qml"
problemi = []
home = HOME.read_text(encoding="utf-8")
pagina = PAGINA.read_text(encoding="utf-8")
# 1. le chiamate dalla Home, con l'eventuale sezione subito dopo
chiamate = re.findall(
r'SetpointsPage\.qml"\)\s*(?:,\s*\{\s*"section"\s*:\s*"([^"]+)"\s*\})?',
home,
)
if not chiamate:
problemi.append("MainPage: nessun push verso SetpointsPage.qml (rinominato?)")
senza_sezione = chiamate.count("")
if senza_sezione:
problemi.append(
"%d push verso SetpointsPage.qml senza sezione: la pagina si apre intera"
% senza_sezione
)
# 2. le sezioni che la pagina conosce, lette dai confronti su page.section
conosciute = set(re.findall(r'page\.section\s*!==\s*"([^"]+)"', pagina))
if not conosciute:
problemi.append("SetpointsPage: nessuna sezione dichiarata (page.section)")
for sezione in chiamate:
if sezione and sezione not in conosciute:
problemi.append(
"MainPage chiede la sezione %r, che SetpointsPage non conosce (%s)"
% (sezione, ", ".join(sorted(conosciute)) or "nessuna")
)
# 3. ogni sezione deve nascondere l'altra: entrambe le visibilita' usate
for proprieta in ("mostraCasa", "mostraAcqua"):
if ("visible: page.%s" % proprieta) not in pagina:
problemi.append(
"SetpointsPage: nessun blocco legato a %s: la sezione non si nasconde"
% proprieta
)
if problemi:
print("ESITO: problemi trovati")
for p in problemi:
print(" -", p)
sys.exit(1)
print("ESITO: sezioni OK (%d chiamate dalla Home, sezioni %s)"
% (len(chiamate), ", ".join(sorted(conosciute))))