Справочник API в формате OpenAPI, lossless, выбор JSON библиотеки и отчёты о расхождениях с API
Крупные изменения
- Справочник API Яндекс Музыки в формате OpenAPI: ym.marshal.dev/api (#739):
- Открытое описание неофициального API Яндекс Музыки: 150 методов на 144 эндпоинтах и более 220 схем моделей ответов.
- Интерактивная страница с поиском, описанием параметров, тел запросов и ответов, а также примерами вызова через библиотеку и curl.
- Каждый метод ссылается на соответствующий метод
Clientв документации библиотеки. Описаны заголовки, которые библиотека отправляет в каждом запросе. - Спецификация доступна файлом openapi.json: её можно импортировать в Postman, Insomnia или Bruno и генерировать по ней клиенты на других языках.
- Спецификация собирается автоматически из кода библиотеки скриптом
docs/generate_openapi.pyи обновляется вместе с ней.
- Треки в lossless качестве (#731):
- Новый метод клиента
tracks_file_info(качествоlossless,hq,nq, выбор кодеков и способа доставкиrawилиencraw) и сокращенияTrack.get_file_info,get_file_info_async. - Новые модели
FileInfoиFileDownloadInfoс методамиdownload,download_bytesи их асинхронными версиями. - Файлы в
encrawрасшифровываются при загрузке черезyandex_music.utils.decrypt. Зависимость устанавливается черезpip install yandex-music[crypto].
- Новый метод клиента
- Выбор JSON библиотеки (#738):
- Вся сериализация и десериализация (ответы API, тела запросов,
to_jsonмоделей, фреймы Ynison) идёт через протоколJsonBackendиз модуляyandex_music.utils.json_backend. - Из коробки поддерживаются
orjson,pydantic-core,ujsonи стандартныйjson. По умолчанию выбирается самая быстрая из установленных. Экстрыorjson,pydantic-coreиujson. - Библиотеку можно задать для клиента параметром
json_backendили глобально черезset_default_json_backend, а также подключить свою, реализовавloadsиdumps.
- Вся сериализация и десериализация (ответы API, тела запросов,
- Отчёты о расхождениях моделей с API (#740):
- Отсутствующее или равное
nullобязательное поле больше не вызывает ошибку: поле получаетNone, а в лог один раз на модель и набор полей пишется предупреждение со ссылкой на заполненный issue. - Новые параметры клиента
strict(вызыватьSchemaMismatchErrorвместо предупреждения) иon_schema_mismatch(свой обработчик отчётаSchemaMismatch).report_unknown_fields=Trueдобавляет в отчёт неизвестные поля. - Новый модуль
yandex_music.utils.schema_mismatch, исключениеSchemaMismatchError, новый шаблон issue.
- Отсутствующее или равное
- Пакет помечен как типизированный (
py.typed, PEP 561), аннотации типов во всей библиотеке проверяются в строгом режиме (#734). - Вложенные модели десериализуются автоматически по аннотациям полей, ручные переопределения
de_jsonудалены (#736).
Незначительные изменения и/или исправления
- Поле
User.loginстало необязательным, сравнение пользователей идёт только поuid(#733). - Улучшено отображение моделей в документации (#737).
Ведение проекта