Асинхронный клиент Ynison
Асинхронный клиент Ynison.
- class yandex_music.ynison.client_async.YnisonClientAsync
Асинхронный клиент Ynison.
Асинхронный аналог
yandex_music.ynison.YnisonClientс тем же интерфейсом: все операции ввода-вывода являются корутинами. При обрыве соединения клиент сам переподключается (каждый раз заново проходя редирект).Для разовых сценариев используйте асинхронный контекстный менеджер
session()или функции изyandex_music.ynison.simple_async.Note
Один device_id может использоваться только одним живым подключением: новое подключение с тем же идентификатором вытесняет старое, и старое завершается с
yandex_music.exceptions.YnisonDeviceDisplacedError.Note
Listener’ы состояния вызываются последовательно внутри receive-loop’а, чтобы сохранить порядок фреймов. Долгие операции в listener’е задерживают приём следующих фреймов, поэтому выносите их в отдельные задачи.
- Пример:
>>> async with YnisonClientAsync(token).session() as client: ... print(client.current_playable) ... await client.next_track()
- on_state(listener)
Регистрирует listener, вызываемый на каждый фрейм состояния.
Можно использовать как декоратор. Listener может быть синхронным или асинхронным. Исключения listener’а логируются в логгер yandex_music.ynison и не прерывают приём фреймов.
- Parameters:
listener – Callable, принимающий
yandex_music.ynison.models.ynison_state.PutYnisonStateResponse.- Returns:
Тот же listener (для удобства использования как декоратор).
- async connect()
Корутина цикла подключения.
Получает редирект, подключается к state-хосту и обрабатывает входящие фреймы. При потере соединения переподключается. Завершается после
disconnect().- Пример:
>>> client = YnisonClientAsync(token) >>> task = asyncio.create_task(client.connect())
- Raises:
yandex_music.exceptions.YnisonUnauthorizedError – Неверный или истёкший токен.
yandex_music.exceptions.YnisonDeviceDisplacedError – Подключился другой клиент с тем же device_id.
yandex_music.exceptions.YnisonError – Клиент уже запущен, или превышен max_reconnect_attempts (выбрасывается последняя ошибка соединения).
- async disconnect()
Останавливает подключение.
Корутина
connect()завершится в ближайшее время. Повторный вызов ничего не делает. После отключения клиента можно подключить заново.
- session(timeout=10.0)
Асинхронный контекстный менеджер для подключения на время блока.
Запускает
connect()какasyncio.Task, ждёт первый фрейм состояния и отдаёт клиента с заполненнымlatest_state. По выходу из блока отключается и дожидается завершения задачи.- Parameters:
timeout – Максимальное время ожидания начального фрейма, в секундах.
- Yields:
yandex_music.ynison.YnisonClientAsync– Этот же клиент, уже с загруженным состоянием.- Raises:
yandex_music.exceptions.YnisonTimeoutError – Если начальный фрейм не пришёл за timeout секунд.
yandex_music.exceptions.YnisonUnauthorizedError – Неверный или истёкший токен.
yandex_music.exceptions.YnisonError – Любая другая терминальная ошибка подключения.
- async send(request)
Отправляет произвольный запрос по state websocket’у.
- Parameters:
request – Готовый
PutYnisonStateRequest; обычно собирается через билдеры изyandex_music.ynison.messages.- Raises:
yandex_music.exceptions.YnisonConnectionClosedError – Если соединения нет или оно закрыто.
- async pause()
Ставит воспроизведение на паузу на активном устройстве.
- Raises:
yandex_music.exceptions.YnisonNoActiveDeviceError – Если нет активного устройства.
yandex_music.exceptions.YnisonConnectionClosedError – Если соединение закрыто.
- async resume()
Снимает паузу на активном устройстве.
- Raises:
yandex_music.exceptions.YnisonNoActiveDeviceError – Если нет активного устройства.
yandex_music.exceptions.YnisonConnectionClosedError – Если соединение закрыто.
- async next_track()
Переключает на следующий трек в очереди (с учётом перемешивания).
- Raises:
yandex_music.exceptions.YnisonQueueBoundaryError – Если текущий трек последний.
yandex_music.exceptions.YnisonConnectionClosedError – Если соединение закрыто.
- async previous_track()
Переключает на предыдущий трек в очереди (с учётом перемешивания).
- Raises:
yandex_music.exceptions.YnisonQueueBoundaryError – Если текущий трек первый.
yandex_music.exceptions.YnisonConnectionClosedError – Если соединение закрыто.
- async set_volume(volume, target_device_id=None)
Устанавливает громкость на указанном или активном устройстве.
- Parameters:
volume – Громкость в диапазоне [0.0; 1.0]; значения вне диапазона обрезаются.
target_device_id – Идентификатор устройства. По умолчанию активное устройство.
- Raises:
yandex_music.exceptions.YnisonNoActiveDeviceError – Если устройство не указано и активного нет.
yandex_music.exceptions.YnisonConnectionClosedError – Если соединение закрыто.