feat: POST /speakers — resolves pipeline pause with speaker name mapping
This commit is contained in:
@@ -288,6 +288,15 @@ async def settings_page_route(user: dict = Depends(current_user)):
|
|||||||
return FileResponse(str(Path(__file__).parent.parent / "frontend" / "settings.html"))
|
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")
|
@router.websocket("/ws")
|
||||||
async def websocket_endpoint(ws: WebSocket):
|
async def websocket_endpoint(ws: WebSocket):
|
||||||
from auth import get_user_for_token
|
from auth import get_user_for_token
|
||||||
|
|||||||
@@ -171,6 +171,29 @@ def test_state_has_speaker_fields():
|
|||||||
assert s._speaker_names is None
|
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):
|
def test_put_config_deep_merges(tmp_path, monkeypatch):
|
||||||
import config as cfg_mod
|
import config as cfg_mod
|
||||||
monkeypatch.setattr(cfg_mod, "CONFIG_PATH", str(tmp_path / "config.toml"))
|
monkeypatch.setattr(cfg_mod, "CONFIG_PATH", str(tmp_path / "config.toml"))
|
||||||
|
|||||||
Reference in New Issue
Block a user