Асинхронный клиент Ynison
Асинхронный клиент Ynison.
- class yandex_music.ynison._client.client_async.YnisonClientAsync
Асинхронный клиент Ynison.
Асинхронный websocket-клиент для подписки на состояние плеера и отправки команд управления. По интерфейсу совпадает с синхронным
yandex_music.ynison.YnisonClient: все ключевые операции возвращают корутины.Для разовых сценариев используйте
yandex_music.ynison.simple_asyncили контекстный менеджерsession().Note
Интерфейс рассчитан на опытных разработчиков, знакомых с работой websocket-подобных долгоживущих соединений. Нужно самостоятельно управлять фоновой задачей
connect(), обрабатывать переподключения, возможные ошибки receive-loop’а и вовремя вызыватьdisconnect(). Если нужны типовые операции (получить текущий трек, поставить паузу, переключить трек) — используйтеyandex_music.ynison.simple_async.- async connect()
Корутина цикла подключения.
Последовательно: редиректный websocket → state websocket → receive-loop на входящие фреймы. Возвращает управление только после
disconnect()(или фатальной ошибки).- Пример:
>>> import asyncio >>> client = YnisonClientAsync(token) >>> task = asyncio.create_task(client.connect())
- async disconnect()
Останавливает websocket.
Корутина
connect()завершится в ближайшем receive-цикле. Повторный вызов — no-op.
- async send(request)
Отправляет запрос по state websocket’у.
- Parameters:
request – Готовый
PutYnisonStateRequest; обычно собирается через билдеры изyandex_music.ynison.messages.- Raises:
yandex_music.exceptions.YnisonError – Если state websocket ещё не подключён.
- session(timeout=10.0)
Асинхронный контекстный менеджер для разового подключения.
Запускает
connect()какasyncio.Task, ждёт первый фрейм состояния и отдаёт клиента с заполненнымlatest_state. По выходу из блока вызываетdisconnect()и дожидается завершения задачи.- Parameters:
timeout – Максимальное время ожидания начального фрейма, в секундах.
- Yields:
yandex_music.ynison.YnisonClientAsync– Этот же клиент, уже с загруженным состоянием.- Raises:
yandex_music.exceptions.YnisonError – Если начальный фрейм не пришёл за timeout секунд.