Массовое расширение покрытия API, OAuth Device Flow, переход на миксины
Переломные изменения
- Прекращена поддержка
Python 3.7. - Асинхронные зависимости (
aiohttp,aiofiles) вынесены в опциональный экстра — теперь устанавливаются черезpip install yandex-music[async]. Синхронный клиент работает без них. - Модель
Labelперемещена из подпакетаyandex_music.albumв новый подпакетyandex_music.labelи расширена полямиdescription,description_formatted,image,links,type. Публичный импортfrom yandex_music import Labelпродолжает работать; сломаются только прямые импорты из подмодуляyandex_music.album.label.
Крупные изменения
- Добавлена поддержка
Python 3.13иPython 3.14. - Поддержка OAuth Device Flow для получения токена:
- Новый миксин
DeviceAuthMixinс методамиrequest_device_code,poll_device_tokenи блокирующим хелперомdevice_auth(callback для показа кода,poll_interval,timeout,should_cancel). - Новые модели
DeviceCodeиOAuthToken, исключениеDeviceAuthError. - Новый пример
examples/device_auth.py(sync + async), переписанная страница документации по получению токена.
- Новый миксин
- Массовое расширение покрытия API. Добавлено более 70 новых методов клиента и около 90 новых моделей в следующих доменных группах:
- Альбомы:
albums_with_tracks(перенесён),albums_disclaimer,albums_similar_entities,albums_trailer. - Артисты:
artists_similar,artists_links,artists_also_albums,artists_discography_albums,artists_safe_direct_albums,artists_track_ids,artists_about,artists_clips,artists_donation,artists_info,artists_skeleton,artists_trailer,artists_disclaimer. Новые наиболее значимые модели:ArtistAbout,ArtistInfo,ArtistSimilar,ArtistLinks,ArtistDonations,ArtistClips,ArtistTrailer,ArtistSkeleton,ArtistConcerts. - Треки:
tracks_credits,tracks_disclaimer,tracks_trailer,tracks_full_info. Новые модели:Credit,Credits,Disclaimer,ForeignAgent,TrackTrailer,TrackFullInfo,Fade,SmartPreviewParams. - Плейлисты:
playlist,playlist_similar_entities,playlists,playlists_personal,users_playlists_description,users_playlists_trailer,users_playlists_kinds. Новые модели:PlaylistTrailer,PlaylistSimilarEntities,PlaylistAvailability,PlaylistsList. - Клипы (новая сущность):
clips,clips_will_like,clips_credits,clips_disclaimer. Новые модели:Clip,ClipsWillLike. - Концерты:
concert_info,concert_skeleton,concerts_feed,concerts_locations,concerts_tab_config,artists_concerts. Новые модели:Concert,ConcertInfo,ConcertFeed,ConcertLocations,ConcertTabConfig,ConcertSkeletonи ещё около десятка связанных. - Лейблы (новая группа):
label,label_albums,label_artists. Новые модели:LabelAlbums,LabelArtists,AlbumActionButton. - Метатеги (новая группа, подборки лендинга):
metatags,metatag,metatag_albums,metatag_artists,metatag_playlists. Около 10 новых моделей в подпакетеyandex_music.metatag. - История прослушивания (новая группа):
music_history,music_history_items. Новые модели:MusicHistory,MusicHistoryTab,MusicHistoryGroup,MusicHistoryItemи другие. - Предсохранения альбомов (новая группа):
users_presaves,users_presaves_add,users_presaves_remove. Новая модельPresaves. - Закреплённые элементы (новая группа):
pins,pin_album,unpin_album,pin_artist,unpin_artist,pin_playlist,unpin_playlist,pin_wave,unpin_wave. Новые модели:Pin,PinData,PinsList. - Лайки и дизлайки:
users_dislikes_artists,users_dislikes_artists_add,users_dislikes_artists_remove,users_likes_clips,users_likes_clips_add,users_likes_clips_remove. Все 20 маршрутов лайков/дизлайков теперь покрыты. - Аккаунт:
account_experiments_details. Новые модели:ExperimentsDetails,ExperimentDetail,ExperimentDetailValue. - Прочее:
ContentRestrictions,CoverDerivedColors,Wave,WaveAgent, а также скелетоны страниц (общие модели вyandex_music.skeleton). - В существующие модели (
Track,Album,Artist,Playlist,Cover,Clip,Concertи др.) добавлены десятки новых полей.
- Альбомы:
- Поддержка
orjsonкак опциональной заменыujsonи стандартногоjsonдля ускорения сериализации/десериализации. RequestиRequestAsyncтеперь поддерживают HTTP-методыPUTиDELETE.- Добавлена статистика прослушиваний исполнителя за месяц.
Ведение проекта
- Монолитный
client_async.pyразбит на миксины в_client_async/, сгруппированные по доменам API (account, landing, tracks, search, playlists, radio, artists, albums, likes, queue, clips, concerts, credits, disclaimers, labels, metatags, music_history, pins, presaves, device_auth). Публичный API клиента остался прежним. - Кодогенерация синхронного клиента переведена на
unasync(вместо собственного генератора). Асинхронная версия теперь первична, синхронная версия автоматически генерируется из_client_async/. - Оптимизирована десериализация моделей: ленивая нормализация ключей
camelCase → snake_case, устранение лишних аллокаций,frozensetдля зарезервированных имён, удаление избыточных.copy()вcleanup_dataиto_dict. - Общая логика
Requestвынесена в базовый класс. requests,aiohttpиaiofilesимпортируются лениво.- Переработана документация: смена темы на
sphinxawesome_theme, интеграцияAlgolia DocSearch, добавленыsitemap.xml,OpenGraph, плоская навигация, витрина моделей с карточкамиsphinx-design, глоссарий, отдельные страницы для каждого миксина клиента, редиректы для совместимости старых URL.
Незначительные изменения и/или исправления
- Исправлены
get_pageиget_page_asyncу классаSearch. - Исправлен тайпхинт в классе
LandingList. - Исправлен метод
de_listдля классаList. - Исправлена отправка
POSTзапроса в методахrotor_station_*. - Поле
idклассаArtistстало опциональным. - Поле
uriклассаDescriptionстало опциональным. - Исправлено форматирование документации у класса
Like. - Методам
.init()уClientиClientAsyncдобавлена передача*args, **kwargs. - Добавлена передача
kwargsв запросы из методов-сокращений скачивания трека. - Уточнены аннотации типов в миксинах клиента (
TypeGuard,Overload, корректный типaccount_uid). - Улучшены аннотации типов во всех моделях.
Новые участники
- @nyashkin — первый вклад в #640
- @bshelkhonov — первый вклад в #660
- @Ninnjah — первый вклад в #661
- @es3n1n — первый вклад в #663
- @egormanga — первый вклад в #669
- @skilletfun — первый вклад в #688
- @Really-Fun — первый вклад в #677
Полный список изменений: v2.2.0...v3.0.0