Поддержка Ynison, сессий радио и генеративных станций
Крупные изменения
- Поддержка Ynison: новый модуль
yandex_music.ynisonсинхронизирует состояние плеера между устройствами и управляет воспроизведением удалённо. Зависимости устанавливаются черезpip install yandex-music[ynison](#716, #717, #726):- Простые интерфейсы
simpleиsimple_asyncдля разовых действий:get_state,get_current_track,get_devices,get_active_device,pause,resume,next_track,previous_track,set_volume. - Долгоживущие клиенты
YnisonClientиYnisonClientAsyncна постоянном соединении: методыpause,resume,next_track,previous_track,set_volume(volume, target_device_id=None), свойстваstate,latest_state,current_playable,active_device,device_id,is_running, подпискиon_state,on_errorиremove_listener. - Параметры клиентов
device_title(название устройства для других клиентов) иmax_reconnect_attempts. Идентификатор устройства по умолчанию вычисляется из токена, поэтому повторные запуски не создают новые устройства в сессии. - Автоматическое переподключение при обрыве соединения с паузами по рекомендациям сервера и keepalive-пингами по его параметрам.
- Переключение треков учитывает перемешивание очереди, позиция трека при паузе и продолжении сохраняется.
- Модуль
yandex_music.ynison.utilsс хелперамиget_current_playable,get_active_device,get_playback_order,get_neighbour_index,get_current_progress_ms. Короткое имяYnisonStateдля полного состояния. - Исключения
YnisonTimeoutError,YnisonConnectionClosedError,YnisonNoActiveDeviceError,YnisonQueueBoundaryError,YnisonServerError(с атрибутамиmessage,grpc_code,http_code,error_code,backoff_ms,go_away_seconds) и его наследникиYnisonUnauthorizedError,YnisonDeviceDisplacedError.
- Простые интерфейсы
- Сессии радио, волны и генеративные станции (#722):
- Новый миксин
RotorSessionsMixin:rotor_session_new,rotor_session_clone,rotor_session_tracks,rotor_session_feedbackи хелперыrotor_session_feedback_radio_started,rotor_session_feedback_track_started,rotor_session_feedback_track_finished,rotor_session_feedback_skip, а такжеrotor_session_feedbacks,rotor_sessions_feedbacks,rotor_combined_session_new,rotor_combined_session_next,rotor_combined_session_landing. - Новый миксин
WaveMixin:rotor_wave_last,rotor_wave_last_reset,rotor_wave_settings. - Генеративные станции в
RadioMixin:rotor_station_stream,rotor_station_stream_feedback. - Новые модели:
RotorSeed,RotorSession,RotorSessionTracks,TrackParameters,SessionEvent,SessionPlayable,SessionFeedback,SessionFeedbacks,CombinedSession,CombinedSessionItem,CombinedSessionLanding,CombinedSessionQueueItem,GenerativeStream,GenerativeStreamData,GenerativeStreamInfo,GenerativeStreamFeedback,WaveSettings,WaveSettingsBlock,WaveDefaultStation. - Новые поля в существующих моделях:
Track.mix_fade;Album.cover,derived_colors,meta_tag_id,child_content;Sequence.track_parameters;Station.special_context,listeners,login,full_name,display_name,visibility;Value.image_url,serialized_seed,unspecified;Wave.station_id,id_for_from,type;R128.important_secs;StationTracksResult.radio_session_id;InvocationInfo.app_name;Status.has_options;Account.region_code,non_owner_family_member;Plus.migrated.
- Новый миксин
- Параметр
timeoutу методов загрузки треков:Track.download,download_bytes,get_specific_download_infoиDownloadInfo.get_direct_link,download,download_bytesс асинхронными версиями (#723). - Новые примеры: консольное радио «Моя волна»
examples/wave_radio.py(#723) и удалённый пульт плеера через Ynisonexamples/ynison_remote.py(#718).
Незначительные изменения и/или исправления
- Исправлена отправка обратной связи радио:
rotor_station_feedbackотправляет данные в JSON (#720). - Исправлена отправка настроек радиостанции:
rotor_station_settings2отправляет данные в JSON (#721). rotor_station_feedbackпринимаетstream_id, время по умолчанию передаётся в формате ISO 8601 (#722).- Исправлено падение
rotor_account_status: полеSubscription.had_any_subscriptionстало необязательным (#722). - В документацию добавлены страницы «Ynison» и «Радио», исправлена подсветка кода в светлой теме (#725).
Ведение проекта
- Сборка пакета переведена с
setup.pyнаpyproject.toml, зависимости разработки разбиты на группы, проект управляется через uv с lock-файломuv.lock. - Публикация в PyPI переведена на Trusted Publishing (OIDC) с аттестациями.