Herkunft eines gepinnten Ausstellers in Klartext

In der Spalte "Quelle" stand das Kuerzel des Protokolls: "tofu". Das ist
Fachjargon (Trust On First Use) und als Wert in einer Tabelle unbrauchbar --
es sieht aus wie ein Tippfehler.

Jetzt: "Erstkontakt" (beim ersten Einspielen automatisch uebernommen) und
"Bestaetigt" (Ausstellerwechsel von einem Administrator freigegeben).

Die Uebersetzung liegt in tesm_core.ui als ISSUER_SOURCES mit zwei
Jinja-Filtern, nicht in zwei Vorlagen: der Lizenzserver zeigt dieselbe Angabe
unter "Eigene Lizenz", und zwei Texte fuer denselben Sachverhalt laufen
auseinander. Unbekannte Werte bleiben unveraendert sichtbar statt hinter einem
Platzhalter zu verschwinden.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-02 22:26:44 +02:00
co-authored by Claude Opus 5
parent 9799843cd2
commit 4e488625fe
2 changed files with 29 additions and 1 deletions
@@ -200,7 +200,7 @@
<dl class="kv fs-sm"> <dl class="kv fs-sm">
{% for key in trusted_keys %} {% for key in trusted_keys %}
<dt class="mono">{{ key.key_id }}</dt> <dt class="mono">{{ key.key_id }}</dt>
<dd>{{ key.label }} <span class="faint">({{ key.source }}, {{ key.added_at | date }})</span></dd> <dd>{{ key.label }} <span class="faint">({{ key.source | issuer_source }}, {{ key.added_at | date }})</span></dd>
{% endfor %} {% endfor %}
</dl> </dl>
{% else %} {% else %}
+28
View File
@@ -154,6 +154,32 @@ def yes_no(value: Any) -> str:
return "ja" if value else "nein" return "ja" if value else "nein"
#: Woher ein gepinnter Ausstellerschluessel kommt -- in Klartext.
#:
#: In der Datenbank stehen die Kuerzel des Protokolls. "tofu" ist dabei
#: Fachjargon (Trust On First Use) und sah in der Spalte aus wie ein
#: Tippfehler. Uebersetzt wird an genau einer Stelle, damit die beiden
#: Anwendungen nicht auseinanderlaufen.
ISSUER_SOURCES: dict[str, tuple[str, str]] = {
"tofu": ("Erstkontakt", "beim ersten Einspielen automatisch uebernommen"),
"admin-confirmed": (
"Bestaetigt",
"Ausstellerwechsel von einem Administrator freigegeben",
),
}
def issuer_source(value: Any) -> str:
"""Kurzform der Herkunft. Unbekannte Werte bleiben unveraendert sichtbar."""
label, _ = ISSUER_SOURCES.get(str(value or ""), (str(value or "-"), ""))
return label
def issuer_source_hint(value: Any) -> str:
"""Erklaerung zur Herkunft, oder leer."""
return ISSUER_SOURCES.get(str(value or ""), ("", ""))[1]
def from_json(value: Any) -> Any: def from_json(value: Any) -> Any:
"""Parst einen JSON-String aus der Datenbank -- fuer Modul-/Rechtelisten. """Parst einen JSON-String aus der Datenbank -- fuer Modul-/Rechtelisten.
@@ -233,6 +259,8 @@ def init_app(app: Flask) -> None:
number=format_number, number=format_number,
yes_no=yes_no, yes_no=yes_no,
from_json=from_json, from_json=from_json,
issuer_source=issuer_source,
issuer_source_hint=issuer_source_hint,
) )
app.jinja_env.trim_blocks = True app.jinja_env.trim_blocks = True
app.jinja_env.lstrip_blocks = True app.jinja_env.lstrip_blocks = True