fix: textual-serve als Web-Frontend statt python -m textual serve
textual serve (python -m textual) startete immer die eingebaute Demo. Lösung: textual-serve Paket (v1.1.3) mit eigenem serve_tui.py Einstiegspunkt. Pro Browser-Verbindung wird tui_standalone.py als eigener Subprocess gestartet. Starten: python serve_tui.py --host 0.0.0.0 --port 8001
This commit is contained in:
@@ -24,7 +24,7 @@ SMS_ENABLED=false
|
|||||||
DATABASE_URL=sqlite:///./mcm.db
|
DATABASE_URL=sqlite:///./mcm.db
|
||||||
|
|
||||||
# ── TUI Web-Modus (textual serve) ──────────────────────────
|
# ── TUI Web-Modus (textual serve) ──────────────────────────
|
||||||
# Starten: .venv/bin/python -m textual serve --host 0.0.0.0 --port $WEB_PORT tui_standalone.py
|
# Starten: python serve_tui.py --host 0.0.0.0 --port $WEB_PORT
|
||||||
WEB_PORT=8001
|
WEB_PORT=8001
|
||||||
|
|
||||||
# ── Benutzer-Authentifizierung ──────────────────────────────────────────────
|
# ── Benutzer-Authentifizierung ──────────────────────────────────────────────
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ DEFAULT_ADMIN_PASSWORD=admin
|
|||||||
.venv/bin/python main_api_only.py
|
.venv/bin/python main_api_only.py
|
||||||
|
|
||||||
# TUI als Browser-App (Terminal 2)
|
# TUI als Browser-App (Terminal 2)
|
||||||
.venv/bin/python -m textual serve --host 0.0.0.0 --port 8001 tui_standalone.py
|
python serve_tui.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Dann im Browser öffnen: `http://<raspberry-ip>:8001`
|
Dann im Browser öffnen: `http://<raspberry-ip>:8001`
|
||||||
|
|||||||
@@ -14,3 +14,4 @@ python-dotenv>=1.0.0
|
|||||||
httpx>=0.27.0
|
httpx>=0.27.0
|
||||||
python-jose[cryptography]>=3.3.0
|
python-jose[cryptography]>=3.3.0
|
||||||
bcrypt>=4.0.0
|
bcrypt>=4.0.0
|
||||||
|
textual-serve>=1.1.0
|
||||||
|
|||||||
41
serve_tui.py
Normal file
41
serve_tui.py
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
"""MCM TUI Web-Server via textual-serve.
|
||||||
|
|
||||||
|
Startet einen Web-Server, der die TUI pro Browser-Verbindung als Subprocess ausführt.
|
||||||
|
Voraussetzung: MCM API-Server muss bereits laufen (python main_api_only.py).
|
||||||
|
|
||||||
|
Verwendung:
|
||||||
|
python serve_tui.py [--host 0.0.0.0] [--port 8001]
|
||||||
|
"""
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from textual_serve.server import Server
|
||||||
|
|
||||||
|
from config import settings
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description="MCM TUI Web-Server")
|
||||||
|
parser.add_argument("--host", default="0.0.0.0", help="Host (default: 0.0.0.0)")
|
||||||
|
parser.add_argument(
|
||||||
|
"--port", type=int, default=settings.web_port, help=f"Port (default: {settings.web_port})"
|
||||||
|
)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# Pfad zum Python-Interpreter im venv, damit alle Pakete verfügbar sind
|
||||||
|
python = sys.executable
|
||||||
|
command = f"{python} tui_standalone.py"
|
||||||
|
|
||||||
|
print(f"MCM TUI Web-Server startet auf http://{args.host}:{args.port}")
|
||||||
|
print(f"Subprocess-Befehl: {command}")
|
||||||
|
print("Ctrl+C zum Beenden.")
|
||||||
|
|
||||||
|
server = Server(command=command, host=args.host, port=args.port, title="MCM – MultiCustomerMessenger")
|
||||||
|
asyncio.run(server.serve())
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@@ -1,20 +1,20 @@
|
|||||||
"""MCM TUI – Standalone Entry Point für textual serve.
|
"""MCM TUI – Standalone Entry Point.
|
||||||
|
|
||||||
Startet nur die TUI (kein API-Server, keine Channels).
|
Wird von serve_tui.py per textual-serve als Subprocess pro Browser-Session gestartet.
|
||||||
Die TUI spricht via HTTP gegen den laufenden MCM-API-Server.
|
Kann auch direkt im Terminal gestartet werden.
|
||||||
|
|
||||||
Verwendung:
|
Verwendung:
|
||||||
# API-Server muss bereits laufen:
|
# Direkt im Terminal:
|
||||||
python main_api_only.py
|
python tui_standalone.py
|
||||||
|
|
||||||
# TUI im Browser starten:
|
# Als Browser-App via serve_tui.py:
|
||||||
.venv/bin/python -m textual serve --host 0.0.0.0 --port 8001 tui_standalone.py
|
python serve_tui.py
|
||||||
|
|
||||||
# Dann im Browser öffnen: http://<host>:8001
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from tui.app import MCMApp
|
from tui.app import MCMApp
|
||||||
|
|
||||||
# textual serve erwartet eine Klasse oder Factory-Funktion,
|
# Für textual serve (ältere Variante) – Klasse als Factory
|
||||||
# keine bereits instanziierte App.
|
|
||||||
app = MCMApp
|
app = MCMApp
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
MCMApp().run()
|
||||||
|
|||||||
Reference in New Issue
Block a user