Первоначальная версия VidConf

This commit is contained in:
2026-07-23 01:04:01 +03:00
commit 896455381a
335 changed files with 61527 additions and 0 deletions

38
workers/livekit_client.py Normal file
View File

@@ -0,0 +1,38 @@
"""Тонкая обёртка над LiveKit `RoomService` — единственная точка для мокирования в тестах.
Используется maintenance-задачей автоосвобождения комнат (`workers/tasks/
maintenance.py`). Вынесена в отдельный модуль намеренно: реальный HTTP-вызов
к LiveKit не нужен и не воспроизводим в тестах — тесты подменяют
`delete_livekit_room` целиком.
"""
import logging
from livekit import api
from core.config import get_settings
logger = logging.getLogger(__name__)
async def delete_livekit_room(room_name: str) -> None:
"""Удалить LiveKit-комнату по имени (= `rooms.permanent_link`), отключив всех участников.
Идемпотентно: удаление уже отсутствующей комнаты — не ошибка (LiveKit
отвечает `TwirpError`/`ServerError` с `code == "not_found"`, который
здесь поглощается; см. документацию `livekit-api` RoomService).
"""
settings = get_settings()
lkapi = api.LiveKitAPI(
settings.livekit_url,
api_key=settings.livekit_api_key,
api_secret=settings.livekit_api_secret,
)
try:
await lkapi.room.delete_room(api.DeleteRoomRequest(room=room_name))
except api.TwirpError as exc:
if exc.code != "not_found":
raise
logger.info("delete_livekit_room: комната %s уже отсутствует в LiveKit", room_name)
finally:
await lkapi.aclose()