diff --git a/apps/tesm-license/pyproject.toml b/apps/tesm-license/pyproject.toml index 93b2ed1..19d3922 100644 --- a/apps/tesm-license/pyproject.toml +++ b/apps/tesm-license/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "tesm-license" -version = "2.8.0" +version = "2.8.1" description = "TESM-Lizenzserver -- Kunden, Tickets, Lizenzen, Aktivierung" requires-python = ">=3.11" dependencies = [ diff --git a/packages/tesm-core/pyproject.toml b/packages/tesm-core/pyproject.toml index 6ca9f45..cf9d87b 100644 --- a/packages/tesm-core/pyproject.toml +++ b/packages/tesm-core/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "tesm-core" -version = "2.8.0" +version = "2.8.1" description = "Gemeinsames Anwendungsgeruest (Auth, RBAC, Navigation, Design-System, Migrationen) fuer TESM und TESM-Lizenzserver" requires-python = ">=3.11" dependencies = [ diff --git a/packages/tesm-core/src/tesm_core/settings_store.py b/packages/tesm-core/src/tesm_core/settings_store.py index 8604067..1ccca64 100644 --- a/packages/tesm-core/src/tesm_core/settings_store.py +++ b/packages/tesm-core/src/tesm_core/settings_store.py @@ -58,6 +58,30 @@ class SettingSpec: return str(raw) def serialize(self, value: Any) -> str: + """Ein Wert als Text fuer die Datenbank. + + Der Wert kann als Python-Wert kommen (aus einem Formular, aus dem + Code) -- oder als die Zeichenkette, die schon in der Datenbank stand. + Genau so liest eine **Sicherung** ihn wieder ein, und genau dort lag + ein stiller Fehler: ``serialize("0")`` ergab ``"1"``, weil jede nicht + leere Zeichenkette wahr ist. Aus jedem abgeschalteten Schalter wurde + beim Einspielen ein eingeschalteter -- auch aus + ``ldap_allow_insecure``. Ein JSON-Feld wurde ein zweites Mal kodiert, + und aus der Navigationsreihenfolge damit eine Zeichenkette. + + Deshalb: eine Zeichenkette erst lesen. Was hier herauskommt, muss + durch ``serialize`` unveraendert hindurchgehen -- sonst ueberlebt kein + Wert eine Sicherung. + """ + if isinstance(value, str): + if self.kind == "bool": + value = self.parse(value) + elif self.kind == "json": + try: + value = json.loads(value) + except ValueError: + # Kein JSON-Text, also ein Wert: dann wird er kodiert. + pass if self.kind == "bool": return "1" if value else "0" if self.kind == "json":