- .vault-tools/trading-plattform-pruefung/LIESMICH.md - .vault-tools/trading-plattform-pruefung/bremse_echtlauf.py - .vault-tools/trading-plattform-pruefung/browser_w.py - .vault-tools/trading-plattform-pruefung/generalprobe_echtlauf.py - .vault-tools/trading-plattform-pruefung/ha_aktiv_setzen.py - .vault-tools/trading-plattform-pruefung/handelstag_auswertung.py - .vault-tools/trading-plattform-pruefung/hausmelder_echtlauf.py - .vault-tools/trading-plattform-pruefung/killswitch_simulation.py - .vault-tools/trading-plattform-pruefung/killswitch_simulation_mutanten.py - .vault-tools/trading-plattform-pruefung/latenz_auswertung.py - .vault-tools/trading-plattform-pruefung/s1_alpaca_lesen.py - .vault-tools/trading-plattform-pruefung/s5_echtlauf.py - … und 2 weitere Erzeugt vom PostToolUse-Hook .vault-tools/auto-push/auto_push.py. Co-Authored-By: Claude Opus 5 <[email protected]>
75 lines
3.0 KiB
Python
75 lines
3.0 KiB
Python
"""Probe-Backend fuer den Browserlauf zu Paket W: die echte App mit Broker-Attrappe, Wegwerf-Register und Wegwerf-Zugang.
|
|
|
|
Koordinator-Pruefcode, nicht fuers Repo. Wie .vault-tools/trading-plattform-pruefung/start_probe_zugang.py,
|
|
dazu die Konfiguration fuer Sicherheitsschluessel: RP-ID localhost, Origin http://localhost:<port>.
|
|
Gestartet wird aus einer KOPIE des Baums (dort gibt es keine Geheimnisdatei) -- kein Broker-Aufruf, kein
|
|
Ereignis im echten Register, keine echte Zugangsdatei, kein Melder.
|
|
|
|
Aufruf (WSL, aus der Kopie): python start_probe_w.py <port> <ausgabeordner>
|
|
"""
|
|
|
|
import dataclasses
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path.cwd()))
|
|
|
|
import uvicorn # noqa: E402
|
|
|
|
from trading.broker.attrappe import BrokerAttrappe # noqa: E402
|
|
from trading.dashboard.app import erzeuge_app # noqa: E402
|
|
from trading.dashboard.config import lade_dashboard_config # noqa: E402
|
|
from trading.dashboard.zugang import Benutzer # noqa: E402
|
|
from trading.dashboard.zugang import schreibe_benutzer # noqa: E402
|
|
from trading.dashboard.zugang import setze_passwort # noqa: E402
|
|
from trading.killswitch.killswitch import lade_killswitch_config # noqa: E402
|
|
from trading.registry.registry import Registry # noqa: E402
|
|
|
|
BENUTZER = "probe"
|
|
PASSWORT = "nur-fuer-die-probe-2026"
|
|
GEHEIMNIS = "JBSWY3DPEHPK3PXP"
|
|
|
|
port = int(sys.argv[1])
|
|
ordner = Path(sys.argv[2])
|
|
# Optional: ein Marktkatalog, der nur gelesen wird (fuer die Lastmessung der Kerzenabrufe).
|
|
katalog = sys.argv[3] if len(sys.argv) > 3 else None
|
|
ordner.mkdir(parents=True, exist_ok=True)
|
|
assert not Path("config/secrets.toml").exists(), "Die Probe startet nur aus einem Baum ohne Geheimnisdatei"
|
|
|
|
zugang_datei = ordner / "zugang.toml"
|
|
schreibe_benutzer(
|
|
zugang_datei,
|
|
{BENUTZER: Benutzer(name=BENUTZER, passwort=setze_passwort(PASSWORT), totp_geheimnis=GEHEIMNIS)},
|
|
)
|
|
(ordner / "zugang.json").write_text(
|
|
json.dumps({"benutzer": BENUTZER, "passwort": PASSWORT, "geheimnis": GEHEIMNIS}), encoding="utf-8"
|
|
)
|
|
(ordner / "paper").mkdir(exist_ok=True)
|
|
|
|
config = dataclasses.replace(
|
|
lade_dashboard_config("config/dashboard.toml"),
|
|
port=port,
|
|
broker_wahl="attrappe",
|
|
sendeintervall_s=2.0,
|
|
erlaubte_hosts=(f"127.0.0.1:{port}", f"localhost:{port}"),
|
|
anmeldung_pflicht=True,
|
|
mfa_pflicht=True,
|
|
zugang_datei=str(zugang_datei),
|
|
zugang_protokoll=str(ordner / "anmeldungen.jsonl"),
|
|
paper_status_datei=str(ordner / "status.json"),
|
|
paper_protokoll_ordner=str(ordner / "paper"),
|
|
schluessel_rp_id="localhost",
|
|
**({} if katalog is None else {"markt_katalog": katalog}),
|
|
schluessel_origins=(f"http://localhost:{port}",),
|
|
)
|
|
app = erzeuge_app(
|
|
broker=BrokerAttrappe(),
|
|
registry=Registry(db_pfad=ordner / "registry.db", artefakt_wurzel=ordner / "artifacts"),
|
|
config=config,
|
|
killswitch_config=lade_killswitch_config("config/killswitch.toml"),
|
|
dist=Path("dashboard/dist"),
|
|
)
|
|
print(f"Probe-Backend W auf 127.0.0.1:{port}, Ablage {ordner}", flush=True)
|
|
uvicorn.run(app, host="127.0.0.1", port=port, log_level="warning", server_header=False, proxy_headers=False)
|