feat: POST /speakers — resolves pipeline pause with speaker name mapping

This commit is contained in:
2026-04-02 01:07:41 +02:00
parent dbb35ce71d
commit 37e432f7fa
2 changed files with 32 additions and 0 deletions
+9
View File
@@ -288,6 +288,15 @@ async def settings_page_route(user: dict = Depends(current_user)):
return FileResponse(str(Path(__file__).parent.parent / "frontend" / "settings.html"))
@router.post("/speakers")
async def post_speakers(body: dict, user: dict = Depends(current_user)):
if state._speakers_event is None:
raise HTTPException(status_code=409, detail="Keine ausstehende Sprecher-Zuordnung")
state._speaker_names = {k: v for k, v in body.items() if isinstance(k, str)}
state._speakers_event.set()
return {"ok": True}
@router.websocket("/ws")
async def websocket_endpoint(ws: WebSocket):
from auth import get_user_for_token
+23
View File
@@ -171,6 +171,29 @@ def test_state_has_speaker_fields():
assert s._speaker_names is None
def test_post_speakers_resolves_pipeline_pause():
import asyncio
from main import app
from api.router import current_user
from api.state import state
state._speakers_event = asyncio.Event()
state._speaker_names = None
app.dependency_overrides[current_user] = lambda: {"username": "u", "output_dir": "/tmp", "is_admin": False}
try:
from fastapi.testclient import TestClient
client = TestClient(app)
r = client.post("/speakers", json={"SPEAKER_00": "Thomas", "SPEAKER_01": "Möller"})
assert r.status_code == 200
assert state._speaker_names == {"SPEAKER_00": "Thomas", "SPEAKER_01": "Möller"}
assert state._speakers_event.is_set()
finally:
app.dependency_overrides.pop(current_user, None)
state._speakers_event = None
state._speaker_names = None
def test_put_config_deep_merges(tmp_path, monkeypatch):
import config as cfg_mod
monkeypatch.setattr(cfg_mod, "CONFIG_PATH", str(tmp_path / "config.toml"))