OAuth Device Flow

class yandex_music._client_async.device_auth.DeviceAuthMixin

OAuth Device Flow.

Миксин для получения OAuth-токена Яндекса без сторонних инструментов.

async request_device_code(device_id=None, device_name=None, client_id=None)

Запрос кода устройства для OAuth Device Flow.

Parameters:
  • device_id (str, optional) – Идентификатор устройства. По умолчанию — случайная строка из 10 символов.

  • device_name (str, optional) – Человекочитаемое имя устройства. По умолчанию — YandexMusicAPI.

  • client_id (str, optional) – OAuth client_id. По умолчанию — встроенный client_id Android-приложения Яндекс.Музыки.

Returns:

Код устройства.

Return type:

yandex_music.DeviceCode

Raises:
async poll_device_token(device_code, client_id=None, client_secret=None)

Однократный опрос статуса подтверждения кода устройства.

Note

Если пользователь ещё не подтвердил вход, возвращает None (OAuth ошибка authorization_pending). Для остальных ошибок OAuth (expired_token, access_denied, invalid_client и т.д.) бросает yandex_music.exceptions.DeviceAuthError.

Parameters:
  • device_code (str) – Значение device_code из request_device_code().

  • client_id (str, optional) – OAuth client_id.

  • client_secret (str, optional) – OAuth client_secret.

Returns:

OAuth-токен или None,

если пользователь ещё не подтвердил вход.

Return type:

yandex_music.OAuthToken | None

Raises:
async device_auth(on_code, poll_interval=None, timeout=None, should_cancel=None, device_id=None, device_name=None, client_id=None, client_secret=None)

Блокирующий OAuth Device Flow: получает код, ждёт подтверждения, возвращает токен.

Note

Метод блокирующий. Выполнение возвращается только после того, как пользователь подтвердит вход на странице Яндекса, истечёт таймаут или should_cancel() вернёт True.

После успешного получения токена метод записывает его в self.token и обновляет заголовок Authorization у текущего HTTP-клиента, поэтому клиент сразу готов к работе.

Parameters:
  • on_code (Callable) – Обязательный коллбек. Вызывается сразу после получения yandex_music.DeviceCode — чтобы вызывающий код мог показать пользователю user_code и verification_url. В асинхронном клиенте допустимо передать корутину.

  • poll_interval (float, optional) – Интервал опроса токена в секундах. По умолчанию — code.interval, рекомендованный сервером.

  • timeout (float, optional) – Общий таймаут ожидания в секундах. По умолчанию — code.expires_in, возвращённый сервером.

  • should_cancel (Callable, optional) – Коллбек без аргументов, проверяемый на каждой итерации. Если вернёт True, метод бросит yandex_music.exceptions.DeviceAuthError.

  • device_id (str, optional) – См. request_device_code().

  • device_name (str, optional) – См. request_device_code().

  • client_id (str, optional) – OAuth client_id.

  • client_secret (str, optional) – OAuth client_secret.

Returns:

Полученный OAuth-токен.

Return type:

yandex_music.OAuthToken

Raises:

yandex_music.exceptions.DeviceAuthError – При таймауте, отмене через should_cancel или не-pending ошибке OAuth.