Асинхронный клиент 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:
async disconnect()

Останавливает подключение.

Корутина connect() завершится в ближайшее время. Повторный вызов ничего не делает. После отключения клиента можно подключить заново.

session(timeout=10.0)

Асинхронный контекстный менеджер для подключения на время блока.

Запускает connect() как asyncio.Task, ждёт первый фрейм состояния и отдаёт клиента с заполненным latest_state. По выходу из блока отключается и дожидается завершения задачи.

Parameters:

timeout – Максимальное время ожидания начального фрейма, в секундах.

Yields:

yandex_music.ynison.YnisonClientAsync – Этот же клиент, уже с загруженным состоянием.

Raises:
async send(request)

Отправляет произвольный запрос по state websocket’у.

Parameters:

request – Готовый PutYnisonStateRequest; обычно собирается через билдеры из yandex_music.ynison.messages.

Raises:

yandex_music.exceptions.YnisonConnectionClosedError – Если соединения нет или оно закрыто.

async pause()

Ставит воспроизведение на паузу на активном устройстве.

Raises:
async resume()

Снимает паузу на активном устройстве.

Raises:
async next_track()

Переключает на следующий трек в очереди (с учётом перемешивания).

Raises:
async previous_track()

Переключает на предыдущий трек в очереди (с учётом перемешивания).

Raises:
async set_volume(volume, target_device_id=None)

Устанавливает громкость на указанном или активном устройстве.

Parameters:
  • volume – Громкость в диапазоне [0.0; 1.0]; значения вне диапазона обрезаются.

  • target_device_id – Идентификатор устройства. По умолчанию активное устройство.

Raises: