From 37e432f7fa80ac5716f81e9b8da381bf0ebd77e7 Mon Sep 17 00:00:00 2001 From: "thomas.kopp" Date: Thu, 2 Apr 2026 01:07:41 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20POST=20/speakers=20=E2=80=94=20resolves?= =?UTF-8?q?=20pipeline=20pause=20with=20speaker=20name=20mapping?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/router.py | 9 +++++++++ tests/test_api.py | 23 +++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/api/router.py b/api/router.py index ce2dad2..541a12a 100644 --- a/api/router.py +++ b/api/router.py @@ -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 diff --git a/tests/test_api.py b/tests/test_api.py index 3c3a664..9097c02 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -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"))