Web-M1-Ausbau: JSON-Gaesteliste, GA-Verlauf, Python-Serversteuerung, tische.ini-Upload
- bestellung.xml -> bestellung.json: neuer JSONConfig (loest XMLConfig ab), alle work-Beispiele konvertiert, Doku (CLAUDE/README/dateiformate) umgestellt - ga.py: Beobachtungsobjekt Entwicklung zeichnet den Loesungsverlauf auf, neuer Schalter --show-development erzeugt Entwicklung.svg (beste/mittlere/ schlechteste Wertigkeit ueber die Zyklus-Aktionen) - web/main.py: neuer Endpunkt /tische-datei (tische.ini-Upload, ast.literal_eval), Frontend kann jetzt eine tische.ini laden - libs/webserver.py: plattformunabhaengige start/stop/status-Steuerung der Web-Testinstanz (ersetzt run_web_helper.ps1), raeumt auch verwaiste --reload-Prozessbaeume zuverlaessig auf - Sicherheit/Modernisierung: eval() -> ast.literal_eval in Tische/Strafliste, sicherer Mini-Auswerter fuer die String-Ausdruecke in zyklus.cfg, defaultdict(set) in Plaetze - SVG: Tischnummer fett zentriert im Tischkreis statt "Tisch x" darueber - Tests: JSONConfig, Entwicklung und der Zyklus-Auswerter abgedeckt (9 Tests) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+8
-8
@@ -1,6 +1,6 @@
|
||||
"""
|
||||
Liest eine Gaesteliste im CSV-Format ein — der Web-Ersatz fuer bestellung.xml
|
||||
(Meilenstein 1 der Roadmap, Adapter analog zu XMLConfig in Strukturdaten.py).
|
||||
Liest eine Gaesteliste im CSV-Format ein — der Web-Ersatz fuer bestellung.json
|
||||
(Meilenstein 1 der Roadmap, Adapter analog zu JSONConfig in Strukturdaten.py).
|
||||
|
||||
CSV-Format (Kopfzeile noetig, Spaltenreihenfolge egal, Trennzeichen ; oder ,):
|
||||
|
||||
@@ -12,10 +12,10 @@ CSV-Format (Kopfzeile noetig, Spaltenreihenfolge egal, Trennzeichen ; oder ,):
|
||||
zusammen und sollen moeglichst zusammen sitzen.
|
||||
Leer = Einzelperson (bildet eine eigene Ein-Personen-Gruppe).
|
||||
- Tisch: optionale Tischnummer — die Person ist VIP und wird fest an
|
||||
diesen Tisch gesetzt (wie <Tisch> in bestellung.xml).
|
||||
diesen Tisch gesetzt (wie "tisch" in bestellung.json).
|
||||
VIPs laufen nicht durch die GA-Platzierung.
|
||||
- Anzahl: optionale Reservierungsanzahl — expandiert die Zeile in so
|
||||
viele identische Buchungen (wie <Anzahl> in bestellung.xml,
|
||||
viele identische Buchungen (wie "anzahl" in bestellung.json,
|
||||
z.B. fuer anonyme Sammelbuchungen). Leer = 1.
|
||||
|
||||
Zusaetzlich werden die Spalten "MagNicht" und "MagGern" akzeptiert,
|
||||
@@ -35,7 +35,7 @@ from Strukturdaten import Person, Personen, Gruppe, Gruppen
|
||||
|
||||
|
||||
class CSVConfig:
|
||||
"""aus CSV Text/Datei alles einlesen (Rueckgabe wie XMLConfig.laden,
|
||||
"""aus CSV Text/Datei alles einlesen (Rueckgabe wie JSONConfig.laden,
|
||||
plus Gruppennamen fuer die Anzeige im Web-Frontend)"""
|
||||
|
||||
PflichtSpalten = ['vorname', 'nachname']
|
||||
@@ -46,11 +46,11 @@ class CSVConfig:
|
||||
"""parst den CSV-Text und baut Personen/Gruppen/VIPs auf
|
||||
|
||||
Rueckgabe: [ PN, GN, VIPGruppe, VipHash, GruppenNamen ]
|
||||
- PN: Personen-Container (ohne VIPs, wie XMLConfig)
|
||||
- GN: Gruppen-Container (ohne VIP-Gruppe, wie XMLConfig)
|
||||
- PN: Personen-Container (ohne VIPs, wie JSONConfig)
|
||||
- GN: Gruppen-Container (ohne VIP-Gruppe, wie JSONConfig)
|
||||
- VIPGruppe: Gruppe(0) mit allen fest gesetzten Personen
|
||||
- VipHash: { PersonId: Tischnummer } fuer VIPsSetzen()
|
||||
- GruppenNamen: { GruppenId: Anzeigename } (neu gegenueber XMLConfig)
|
||||
- GruppenNamen: { GruppenId: Anzeigename }
|
||||
"""
|
||||
# Trennzeichen automatisch bestimmen: die Kopfzeile entscheidet
|
||||
Kopfzeile = Text.lstrip('').splitlines()[0] if Text.strip() else ''
|
||||
|
||||
Reference in New Issue
Block a user