2021-09-19 22:47:19 +09:00
|
|
|
|
from typing import Any, TYPE_CHECKING, Optional, List
|
2019-12-27 18:14:51 +09:00
|
|
|
|
|
2020-01-26 21:19:22 +09:00
|
|
|
|
from yandex_music import YandexMusicObject
|
2021-09-19 22:47:19 +09:00
|
|
|
|
from yandex_music.utils import model
|
2020-01-26 21:19:22 +09:00
|
|
|
|
|
2019-12-27 18:14:51 +09:00
|
|
|
|
if TYPE_CHECKING:
|
2021-02-03 21:28:10 +09:00
|
|
|
|
from yandex_music import (
|
|
|
|
|
Client,
|
|
|
|
|
User,
|
|
|
|
|
Cover,
|
|
|
|
|
MadeFor,
|
|
|
|
|
TrackShort,
|
|
|
|
|
PlaylistAbsence,
|
|
|
|
|
PlayCounter,
|
|
|
|
|
PlaylistRecommendations,
|
|
|
|
|
Artist,
|
|
|
|
|
TrackId,
|
|
|
|
|
Contest,
|
|
|
|
|
OpenGraphData,
|
|
|
|
|
Brand,
|
2023-03-27 20:07:51 +09:00
|
|
|
|
Pager,
|
|
|
|
|
CustomWave,
|
2021-02-03 21:28:10 +09:00
|
|
|
|
)
|
2019-12-27 18:14:51 +09:00
|
|
|
|
|
New supported objects: Album, CaseForms, Label, Library, MadeFor, Major, Normalization, PlayCounter, Playlist, Track, TrackPosition, TrackShort, User
The following methods are wrapped:
- albums;
- playlists/list;
- users/{user_id}/playlists/list;
- tracks;
- users/{user_id}/likes/tracks.
Added property to get full track ID
Cover received more optional fields
Ability to pass arguments to the request
Removed unnecessary type conversions
2019-05-13 02:39:12 +09:00
|
|
|
|
|
2021-09-19 22:47:19 +09:00
|
|
|
|
@model
|
New supported objects: Album, CaseForms, Label, Library, MadeFor, Major, Normalization, PlayCounter, Playlist, Track, TrackPosition, TrackShort, User
The following methods are wrapped:
- albums;
- playlists/list;
- users/{user_id}/playlists/list;
- tracks;
- users/{user_id}/likes/tracks.
Added property to get full track ID
Cover received more optional fields
Ability to pass arguments to the request
Removed unnecessary type conversions
2019-05-13 02:39:12 +09:00
|
|
|
|
class Playlist(YandexMusicObject):
|
2020-03-15 02:18:24 +09:00
|
|
|
|
"""Класс, представляющий плейлист.
|
|
|
|
|
|
|
|
|
|
Note:
|
Добавлены новые классы: Brand, Contest, OpenGraphData.
Поля contest, dummy_description, dummy_page_description, dummy_cover, dummy_rollover_cover, og_data, branding классу Playlist.
Добавлена информацию по поводу запуска потока по треку, плейлисту и т.д.
Документация и тесты к новым полям, классам #339
2020-06-15 04:11:38 +09:00
|
|
|
|
Под полями с заглушками понимаются поля, которые доступны у умных плейлистов тогда, когда у сервиса мало
|
|
|
|
|
данных для генерации плейлиста.
|
|
|
|
|
|
2020-03-15 02:18:24 +09:00
|
|
|
|
Известные значения `visibility`: `public` - публичный плейлист, `private` - приватный плейлист.
|
2020-01-26 23:50:54 +09:00
|
|
|
|
|
2020-03-22 04:04:58 +09:00
|
|
|
|
Известные значения `generated_playlist_type`: `playlistOfTheDay` - Плейлист дня, `recentTracks` - Премьера,
|
|
|
|
|
`neverHeard` - Дежавю, `podcasts` - Подкасты недели, `missedLikes` - Тайник, `origin` - Плейлист с Алисой.
|
|
|
|
|
|
2021-02-01 21:57:06 +09:00
|
|
|
|
Известные значения `type`: `missedLikes`, `recentTracks`.
|
|
|
|
|
|
2020-01-26 23:50:54 +09:00
|
|
|
|
Attributes:
|
Удаление избыточной информации (#247)
Классы: Account, AutoRenewable, PassportPhone, Permissions, Plus, Price,
Product, Status, Subscription, UserSettings, Album, Label,
TrackPosition, Playlist
У всех классов изменено описание атрибута client
2020-03-22 04:49:20 +09:00
|
|
|
|
owner (:obj:`yandex_music.User`, optional): Владелец плейлиста.
|
|
|
|
|
cover (:obj:`yandex_music.Cover`, optional): Обложка альбома.
|
2020-06-06 18:37:03 +09:00
|
|
|
|
made_for (:obj:`yandex_music.MadeFor`, optional): Пользователь для которого был создан плейлист. Присутствует
|
|
|
|
|
только у персональных плейлистов.
|
|
|
|
|
play_counter (:obj:`yandex_music.PlayCounter`, optional): Счётчик дней. Присутствует только у плейлиста дня.
|
Удаление избыточной информации (#247)
Классы: Account, AutoRenewable, PassportPhone, Permissions, Plus, Price,
Product, Status, Subscription, UserSettings, Album, Label,
TrackPosition, Playlist
У всех классов изменено описание атрибута client
2020-03-22 04:49:20 +09:00
|
|
|
|
playlist_absence (:obj:`yandex_music.PlaylistAbsence`, optional): Причина отсутствия плейлиста.
|
2020-03-15 02:18:24 +09:00
|
|
|
|
uid (:obj:`int`, optional): Идентификатор владельца плейлиста.
|
|
|
|
|
kind (:obj:`int`, optional): Идентификатор плейлиста.
|
|
|
|
|
title (:obj:`str`, optional): Название плейлиста.
|
|
|
|
|
track_count (:obj:`int`, optional): Количество треков.
|
|
|
|
|
tags (:obj:`list`, optional): Список тегов плейлиста.
|
|
|
|
|
revision (:obj:`int`, optional): Актуальность данных TODO.
|
|
|
|
|
snapshot (:obj:`int`, optional): Версия плейлиста. Увеличивается на 1 при каждом изменении.
|
|
|
|
|
visibility (:obj:`str`, optional): Видимость плейлиста.
|
|
|
|
|
collective (:obj:`bool`, optional): Есть ли у плейлиста соавторы.
|
2020-06-06 18:37:03 +09:00
|
|
|
|
url_part (:obj:`str`, optional): Часть ссылки на плейлист ('daily`).
|
2020-03-15 02:18:24 +09:00
|
|
|
|
created (:obj:`str`, optional): Дата создания в формате ISO 8601.
|
|
|
|
|
modified (:obj:`str`, optional): Дата последнего изменения в формате ISO 8601.
|
2020-03-22 04:04:58 +09:00
|
|
|
|
available (:obj:`bool`, optional): Доступен TODO.
|
|
|
|
|
is_banner (:obj:`bool`, optional): Является ли банером TODO.
|
|
|
|
|
is_premiere (:obj:`bool`, optional): Является ли премьерой TODO.
|
2020-03-15 02:18:24 +09:00
|
|
|
|
duration_ms (:obj:`int`, optional): Длительность в миллисекундах.
|
|
|
|
|
og_image (:obj:`str`, optional): Ссылка на превью Open Graph.
|
2020-06-06 18:37:03 +09:00
|
|
|
|
og_title (:obj:`str`, optional): Заголовок Open Graph.
|
Добавлен новый класс LicenceTextPart.
Поля cheapest, title, family_sub, fb_image, fb_name, family, intro_period_duration, intro_price, start_period_duration, start_price, licence_text_parts для Product.
Поля storage_dir, duplicates для Album.
Поле subscribed для ArtistEvent.
Поле description для GeneratedPlaylist.
Поле genre для Event.
Поле show_in_regions для Genre.
Поле cover_uri для MixLink.
Поля og_description, top_artist для Playlist.
Поля full_image_url, mts_full_image_url для Station.
Документация и тесты к новым поля. #339
2020-06-07 05:48:32 +09:00
|
|
|
|
og_description (:obj:`str`, optional): Описание Open Graph.
|
2020-06-06 18:37:03 +09:00
|
|
|
|
image (:obj:`str`, optional): Изображение TODO.
|
|
|
|
|
cover_without_text (:obj:`yandex_music.Cover`, optional): Обложка без текста.
|
Добавлены новые классы: Brand, Contest, OpenGraphData.
Поля contest, dummy_description, dummy_page_description, dummy_cover, dummy_rollover_cover, og_data, branding классу Playlist.
Добавлена информацию по поводу запуска потока по треку, плейлисту и т.д.
Документация и тесты к новым полям, классам #339
2020-06-15 04:11:38 +09:00
|
|
|
|
contest (:obj:`yandex_music.Contest`, optional): Контест TODO.
|
2020-06-06 18:37:03 +09:00
|
|
|
|
background_color (:obj:`str`, optional): Цвет заднего фона TODO.
|
|
|
|
|
text_color (:obj:`str`, optional): Цвет текста TODO.
|
|
|
|
|
id_for_from (:obj:`str`, optional): Откуда пришло событие (уникальный идентификатор объекта) TODO.
|
Добавлены новые классы: Brand, Contest, OpenGraphData.
Поля contest, dummy_description, dummy_page_description, dummy_cover, dummy_rollover_cover, og_data, branding классу Playlist.
Добавлена информацию по поводу запуска потока по треку, плейлисту и т.д.
Документация и тесты к новым полям, классам #339
2020-06-15 04:11:38 +09:00
|
|
|
|
dummy_description (:obj:`str`, optional): Описание-заглушка плейлиста.
|
|
|
|
|
dummy_page_description (:obj:`str`, optional): Описание-заглушка страницы.
|
|
|
|
|
dummy_cover (:obj:`str`, optional): Обложка-заглушка.
|
|
|
|
|
dummy_rollover_cover (:obj:`str`, optional): Обложка-заглушка TODO.
|
|
|
|
|
og_data (:obj:`yandex_music.OpenGraphData`, optional): Данные для OpenGraph.
|
|
|
|
|
branding (:obj:`yandex_music.Brand`): Бренд.
|
2020-06-14 21:09:50 +09:00
|
|
|
|
metrika_id (:obj:`int`, optional): Уникальный идентификатор счётчика на Яндекс.Метрика.
|
Метод de_list в TrackId.
Поля coauthors и recent_tracks в Playlist.
Поле regions в User.
Поля users, podcasts, podcast_episodes, type_, page, per_page в Search.
Поддержка новых типов поиска: подкасты, выпуски, пользователи.
Поля short_description, description, is_premiere, is_banner в Like.
Документация и тесты к новым поля. #339
2020-06-07 18:55:30 +09:00
|
|
|
|
coauthors (:obj:`list` из :obj:`int`, optional): Перечень ID аккаунтов соавторов плейлиста.
|
Добавлен новый класс LicenceTextPart.
Поля cheapest, title, family_sub, fb_image, fb_name, family, intro_period_duration, intro_price, start_period_duration, start_price, licence_text_parts для Product.
Поля storage_dir, duplicates для Album.
Поле subscribed для ArtistEvent.
Поле description для GeneratedPlaylist.
Поле genre для Event.
Поле show_in_regions для Genre.
Поле cover_uri для MixLink.
Поля og_description, top_artist для Playlist.
Поля full_image_url, mts_full_image_url для Station.
Документация и тесты к новым поля. #339
2020-06-07 05:48:32 +09:00
|
|
|
|
top_artist (:obj:`list` из :obj:`yandex_music.Artist`, optional): Топ артистов TODO.
|
Метод de_list в TrackId.
Поля coauthors и recent_tracks в Playlist.
Поле regions в User.
Поля users, podcasts, podcast_episodes, type_, page, per_page в Search.
Поддержка новых типов поиска: подкасты, выпуски, пользователи.
Поля short_description, description, is_premiere, is_banner в Like.
Документация и тесты к новым поля. #339
2020-06-07 18:55:30 +09:00
|
|
|
|
recent_tracks (:obj:`list` из :obj:`yandex_music.TrackId`, optional): Список ID недавних треков.
|
2020-03-15 02:18:24 +09:00
|
|
|
|
tracks (:obj:`list` из :obj:`yandex_music.TrackShort`, optional): Список треков.
|
|
|
|
|
prerolls (:obj:`list`, optional): Прерол, проигрываемый перед плейлистом. Присутствует только у персональных
|
|
|
|
|
плейлистов.
|
|
|
|
|
likes_count (:obj:`int`, optional): Количество лайков.
|
2020-06-06 18:37:03 +09:00
|
|
|
|
similar_playlists (:obj:`list` из :obj:`yandex_music.Playlist`, optional): Похожие плейлисты.
|
|
|
|
|
last_owner_playlists (:obj:`list` из :obj:`yandex_music.Playlist`, optional): Последние плейлисты владельца.
|
2020-03-15 02:18:24 +09:00
|
|
|
|
generated_playlist_type (:obj:`str`, optional): Тип генерируемого плейлиста.
|
|
|
|
|
animated_cover_uri (:obj:`str`, optional): Ссылка на анимированную обложку.
|
|
|
|
|
ever_played (:obj:`str`, optional): Играл ли этот плейлист. Присутствует только у персональных плейлистов. TODO
|
|
|
|
|
description (:obj:`str`, optional): Описание плейлиста с разметкой Markdown.
|
|
|
|
|
description_formatted (:obj:`str`, optional): Описание плейлиста. Только текст, без разметки.
|
2021-01-28 01:24:40 +09:00
|
|
|
|
playlist_uuid (:obj:`str`, optional): TODO.
|
2021-09-19 22:47:19 +09:00
|
|
|
|
type (:obj:`str`, optional): TODO.
|
2021-02-01 21:57:06 +09:00
|
|
|
|
ready (:obj:`bool`, optional): Готовность TODO.
|
2020-03-22 04:04:58 +09:00
|
|
|
|
is_for_from: TODO.
|
|
|
|
|
regions: Регион TODO.
|
2023-03-27 20:07:51 +09:00
|
|
|
|
custom_wave (:obj:'yandex_music.CustomWave`, optional): Описание плейлиста. TODO.
|
|
|
|
|
pager (:obj:`yandex_music.Pager`, optional): Пагинатор.
|
Удаление избыточной информации (#247)
Классы: Account, AutoRenewable, PassportPhone, Permissions, Plus, Price,
Product, Status, Subscription, UserSettings, Album, Label,
TrackPosition, Playlist
У всех классов изменено описание атрибута client
2020-03-22 04:49:20 +09:00
|
|
|
|
client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music.
|
2020-01-26 23:50:54 +09:00
|
|
|
|
"""
|
|
|
|
|
|
2021-09-19 22:47:19 +09:00
|
|
|
|
owner: Optional['User']
|
|
|
|
|
cover: Optional['Cover']
|
|
|
|
|
made_for: Optional['MadeFor']
|
|
|
|
|
play_counter: Optional['PlayCounter']
|
|
|
|
|
playlist_absence: Optional['PlaylistAbsence']
|
|
|
|
|
uid: Optional[int] = None
|
|
|
|
|
kind: Optional[int] = None
|
|
|
|
|
title: Optional[str] = None
|
|
|
|
|
track_count: Optional[int] = None
|
|
|
|
|
tags: Optional[list] = None
|
|
|
|
|
revision: Optional[int] = None
|
|
|
|
|
snapshot: Optional[int] = None
|
|
|
|
|
visibility: Optional[str] = None
|
|
|
|
|
collective: Optional[bool] = None
|
|
|
|
|
url_part: Optional[str] = None
|
|
|
|
|
created: Optional[str] = None
|
|
|
|
|
modified: Optional[str] = None
|
|
|
|
|
available: Optional[bool] = None
|
|
|
|
|
is_banner: Optional[bool] = None
|
|
|
|
|
is_premiere: Optional[bool] = None
|
|
|
|
|
duration_ms: Optional[int] = None
|
|
|
|
|
og_image: Optional[str] = None
|
|
|
|
|
og_title: Optional[str] = None
|
|
|
|
|
og_description: Optional[str] = None
|
|
|
|
|
image: Optional[str] = None
|
|
|
|
|
cover_without_text: Optional['Cover'] = None
|
|
|
|
|
contest: Optional['Contest'] = None
|
|
|
|
|
background_color: Optional[str] = None
|
|
|
|
|
text_color: Optional[str] = None
|
|
|
|
|
id_for_from: Optional[str] = None
|
|
|
|
|
dummy_description: Optional[str] = None
|
|
|
|
|
dummy_page_description: Optional[str] = None
|
|
|
|
|
dummy_cover: Optional['Cover'] = None
|
|
|
|
|
dummy_rollover_cover: Optional['Cover'] = None
|
|
|
|
|
og_data: Optional['OpenGraphData'] = None
|
|
|
|
|
branding: Optional['Brand'] = None
|
|
|
|
|
metrika_id: Optional[int] = None
|
|
|
|
|
coauthors: List[int] = None
|
|
|
|
|
top_artist: List['Artist'] = None
|
|
|
|
|
recent_tracks: List['TrackId'] = None
|
|
|
|
|
tracks: List['TrackShort'] = None
|
|
|
|
|
prerolls: Optional[list] = None
|
|
|
|
|
likes_count: Optional[int] = None
|
|
|
|
|
similar_playlists: List['Playlist'] = None
|
|
|
|
|
last_owner_playlists: List['Playlist'] = None
|
|
|
|
|
generated_playlist_type: Optional[str] = None
|
|
|
|
|
animated_cover_uri: Optional[str] = None
|
|
|
|
|
ever_played: Optional[bool] = None
|
|
|
|
|
description: Optional[str] = None
|
|
|
|
|
description_formatted: Optional[str] = None
|
|
|
|
|
playlist_uuid: Optional[str] = None
|
|
|
|
|
type: Optional[str] = None
|
|
|
|
|
ready: Optional[bool] = None
|
|
|
|
|
is_for_from: Any = None
|
|
|
|
|
regions: Any = None
|
2023-03-27 20:07:51 +09:00
|
|
|
|
custom_wave: Optional['CustomWave'] = None
|
|
|
|
|
pager: Optional['Pager'] = None
|
2021-09-19 22:47:19 +09:00
|
|
|
|
client: Optional['Client'] = None
|
|
|
|
|
|
|
|
|
|
def __post_init__(self):
|
2019-11-24 07:51:45 +09:00
|
|
|
|
self._id_attrs = (self.uid, self.kind, self.title, self.playlist_absence)
|
New supported objects: Album, CaseForms, Label, Library, MadeFor, Major, Normalization, PlayCounter, Playlist, Track, TrackPosition, TrackShort, User
The following methods are wrapped:
- albums;
- playlists/list;
- users/{user_id}/playlists/list;
- tracks;
- users/{user_id}/likes/tracks.
Added property to get full track ID
Cover received more optional fields
Ability to pass arguments to the request
Removed unnecessary type conversions
2019-05-13 02:39:12 +09:00
|
|
|
|
|
2019-06-01 15:04:15 +09:00
|
|
|
|
@property
|
2019-12-27 18:14:51 +09:00
|
|
|
|
def is_mine(self) -> bool:
|
2019-12-24 06:20:07 +09:00
|
|
|
|
return self.owner.uid == self.client.me.account.uid
|
2019-06-01 15:04:15 +09:00
|
|
|
|
|
2019-05-19 05:59:14 +09:00
|
|
|
|
@property
|
2019-12-27 18:14:51 +09:00
|
|
|
|
def playlist_id(self) -> str:
|
2019-05-19 05:59:14 +09:00
|
|
|
|
return f'{self.owner.uid}:{self.kind}'
|
|
|
|
|
|
2020-05-07 17:09:12 +09:00
|
|
|
|
def get_recommendations(self, *args, **kwargs) -> Optional['PlaylistRecommendations']:
|
|
|
|
|
"""Сокращение для::
|
|
|
|
|
|
2021-02-03 21:28:10 +09:00
|
|
|
|
client.users_playlists_recommendations(playlist.kind, playlist.owner.uid, *args, **kwargs)
|
2020-05-07 17:09:12 +09:00
|
|
|
|
"""
|
|
|
|
|
return self.client.users_playlists_recommendations(self.kind, self.owner.uid, *args, **kwargs)
|
|
|
|
|
|
2022-02-20 02:59:53 +09:00
|
|
|
|
async def get_recommendations_async(self, *args, **kwargs) -> Optional['PlaylistRecommendations']:
|
|
|
|
|
"""Сокращение для::
|
|
|
|
|
|
|
|
|
|
await client.users_playlists_recommendations(playlist.kind, playlist.owner.uid, *args, **kwargs)
|
|
|
|
|
"""
|
|
|
|
|
return await self.client.users_playlists_recommendations(self.kind, self.owner.uid, *args, **kwargs)
|
|
|
|
|
|
2022-10-16 21:58:46 +09:00
|
|
|
|
def get_animated_cover_url(self, size: str = '300x300') -> str:
|
|
|
|
|
"""Возвращает URL анимированной обложки.
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
size (:obj:`str`, optional): Размер анимированной обложки.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
:obj:`str`: URL анимированной обложки.
|
|
|
|
|
"""
|
|
|
|
|
return f'https://{self.animated_cover_uri.replace("%%", size)}'
|
|
|
|
|
|
|
|
|
|
def get_og_image_url(self, size: str = '300x300') -> str:
|
|
|
|
|
"""Возвращает URL обложки.
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
size (:obj:`str`, optional): Размер обложки.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
:obj:`str`: URL обложки.
|
|
|
|
|
"""
|
|
|
|
|
return f'https://{self.og_image.replace("%%", size)}'
|
|
|
|
|
|
2019-12-27 21:32:50 +09:00
|
|
|
|
def download_animated_cover(self, filename: str, size: str = '200x200') -> None:
|
2019-08-18 23:44:46 +09:00
|
|
|
|
"""Загрузка анимированной обложки.
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
filename (:obj:`str`): Путь для сохранения файла с названием и расширением (GIF).
|
|
|
|
|
size (:obj:`str`, optional): Размер анимированной обложки.
|
|
|
|
|
"""
|
2022-10-16 21:58:46 +09:00
|
|
|
|
self.client.request.download(self.get_animated_cover_url(size), filename)
|
2019-08-18 23:44:46 +09:00
|
|
|
|
|
2022-02-20 02:59:53 +09:00
|
|
|
|
async def download_animated_cover_async(self, filename: str, size: str = '200x200') -> None:
|
|
|
|
|
"""Загрузка анимированной обложки.
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
filename (:obj:`str`): Путь для сохранения файла с названием и расширением (GIF).
|
|
|
|
|
size (:obj:`str`, optional): Размер анимированной обложки.
|
|
|
|
|
"""
|
2022-10-16 21:58:46 +09:00
|
|
|
|
await self.client.request.download(self.get_animated_cover_url(size), filename)
|
2022-02-20 02:59:53 +09:00
|
|
|
|
|
2019-12-27 21:32:50 +09:00
|
|
|
|
def download_og_image(self, filename: str, size: str = '200x200') -> None:
|
2019-08-18 23:44:46 +09:00
|
|
|
|
"""Загрузка обложки.
|
|
|
|
|
|
|
|
|
|
Используйте это только когда нет self.cover!
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
filename (:obj:`str`): Путь для сохранения файла с названием и расширением.
|
|
|
|
|
size (:obj:`str`, optional): Размер обложки.
|
|
|
|
|
"""
|
2022-10-16 21:58:46 +09:00
|
|
|
|
self.client.request.download(self.get_og_image_url(size), filename)
|
2019-08-18 23:44:46 +09:00
|
|
|
|
|
2022-02-20 02:59:53 +09:00
|
|
|
|
async def download_og_image_async(self, filename: str, size: str = '200x200') -> None:
|
|
|
|
|
"""Загрузка обложки.
|
|
|
|
|
|
|
|
|
|
Используйте это только когда нет self.cover!
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
filename (:obj:`str`): Путь для сохранения файла с названием и расширением.
|
|
|
|
|
size (:obj:`str`, optional): Размер обложки.
|
|
|
|
|
"""
|
2022-10-16 21:58:46 +09:00
|
|
|
|
await self.client.request.download(self.get_og_image_url(size), filename)
|
|
|
|
|
|
|
|
|
|
def download_animated_cover_bytes(self, size: str = '200x200') -> bytes:
|
|
|
|
|
"""Загрузка анимированной обложки и возврат в виде байтов.
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
size (:obj:`str`, optional): Размер анимированной обложки.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
:obj:`bytes`: Анимированная обложка в виде байтов.
|
|
|
|
|
"""
|
|
|
|
|
return self.client.request.retrieve(self.get_animated_cover_url(size))
|
|
|
|
|
|
|
|
|
|
async def download_animated_cover_bytes_async(self, size: str = '200x200') -> bytes:
|
|
|
|
|
"""Загрузка анимированной обложки и возврат в виде байтов.
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
size (:obj:`str`, optional): Размер анимированной обложки.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
:obj:`bytes`: Анимированная обложка в виде байтов.
|
|
|
|
|
"""
|
|
|
|
|
return await self.client.request.retrieve(self.get_animated_cover_url(size))
|
|
|
|
|
|
|
|
|
|
def download_og_image_bytes(self, size: str = '200x200') -> bytes:
|
|
|
|
|
"""Загрузка обложки и возврат в виде байтов.
|
|
|
|
|
|
|
|
|
|
Используйте это только когда нет self.cover!
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
size (:obj:`str`, optional): Размер обложки.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
:obj:`bytes`: Обложка в виде байтов.
|
|
|
|
|
"""
|
|
|
|
|
return self.client.request.retrieve(self.get_og_image_url(size))
|
|
|
|
|
|
|
|
|
|
async def download_og_image_bytes_async(self, size: str = '200x200') -> bytes:
|
|
|
|
|
"""Загрузка обложки и возврат в виде байтов.
|
|
|
|
|
|
|
|
|
|
Используйте это только когда нет self.cover!
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
size (:obj:`str`, optional): Размер обложки.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
:obj:`bytes`: Обложка в виде байтов.
|
|
|
|
|
"""
|
|
|
|
|
return await self.client.request.retrieve(self.get_og_image_url(size))
|
2022-02-20 02:59:53 +09:00
|
|
|
|
|
2019-12-27 18:14:51 +09:00
|
|
|
|
def rename(self, name: str) -> None:
|
2019-06-01 15:04:15 +09:00
|
|
|
|
client, kind = self.client, self.kind
|
|
|
|
|
|
|
|
|
|
self.__dict__.clear()
|
|
|
|
|
self.__dict__.update(client.users_playlists_name(kind, name).__dict__)
|
|
|
|
|
|
2022-02-20 02:59:53 +09:00
|
|
|
|
async def rename_async(self, name: str) -> None:
|
|
|
|
|
client, kind = self.client, self.kind
|
|
|
|
|
|
|
|
|
|
self.__dict__.clear()
|
|
|
|
|
self.__dict__.update((await client.users_playlists_name(kind, name)).__dict__)
|
|
|
|
|
|
2019-12-27 18:14:51 +09:00
|
|
|
|
def like(self, *args, **kwargs) -> bool:
|
2019-10-07 02:06:28 +09:00
|
|
|
|
"""Сокращение для::
|
|
|
|
|
|
2022-03-04 05:07:49 +09:00
|
|
|
|
client.users_likes_playlists_add(playlist.playlist_id, user.id, *args, **kwargs)
|
2019-10-07 02:06:28 +09:00
|
|
|
|
"""
|
2022-03-04 05:07:49 +09:00
|
|
|
|
return self.client.users_likes_playlists_add(self.playlist_id, self.client.me.account.uid, *args, **kwargs)
|
2019-10-07 02:06:28 +09:00
|
|
|
|
|
2022-02-20 02:59:53 +09:00
|
|
|
|
async def like_async(self, *args, **kwargs) -> bool:
|
|
|
|
|
"""Сокращение для::
|
|
|
|
|
|
2022-03-04 05:07:49 +09:00
|
|
|
|
await client.users_likes_playlists_add(playlist.playlist_id, user.id, *args, **kwargs)
|
2022-02-20 02:59:53 +09:00
|
|
|
|
"""
|
2022-03-04 05:07:49 +09:00
|
|
|
|
return await self.client.users_likes_playlists_add(
|
|
|
|
|
self.playlist_id, self.client.me.account.uid, *args, **kwargs
|
|
|
|
|
)
|
2022-02-20 02:59:53 +09:00
|
|
|
|
|
2019-12-27 18:14:51 +09:00
|
|
|
|
def dislike(self, *args, **kwargs) -> bool:
|
2019-10-07 02:06:28 +09:00
|
|
|
|
"""Сокращение для::
|
|
|
|
|
|
2022-03-04 05:07:49 +09:00
|
|
|
|
client.users_likes_playlists_remove(playlist.playlist_id, user.id, *args, **kwargs)
|
2019-10-07 02:06:28 +09:00
|
|
|
|
"""
|
2022-03-04 05:07:49 +09:00
|
|
|
|
return self.client.users_likes_playlists_remove(self.playlist_id, self.client.me.account.uid, *args, **kwargs)
|
2019-10-07 02:06:28 +09:00
|
|
|
|
|
2022-02-20 02:59:53 +09:00
|
|
|
|
async def dislike_async(self, *args, **kwargs) -> bool:
|
|
|
|
|
"""Сокращение для::
|
|
|
|
|
|
2022-03-04 05:07:49 +09:00
|
|
|
|
await client.users_likes_playlists_remove(playlist.playlist_id, user.id, *args, **kwargs)
|
2022-02-20 02:59:53 +09:00
|
|
|
|
"""
|
2022-03-04 05:07:49 +09:00
|
|
|
|
return await self.client.users_likes_playlists_remove(
|
|
|
|
|
self.playlist_id, self.client.me.account.uid, *args, **kwargs
|
|
|
|
|
)
|
2022-02-20 02:59:53 +09:00
|
|
|
|
|
2020-05-15 06:48:49 +09:00
|
|
|
|
def fetch_tracks(self, *args, **kwargs) -> List['TrackShort']:
|
|
|
|
|
"""Сокращение для::
|
|
|
|
|
|
2021-02-03 21:28:10 +09:00
|
|
|
|
client.users_playlists(playlist.kind, playlist.owner.id, *args, **kwargs).tracks
|
2020-05-15 06:48:49 +09:00
|
|
|
|
"""
|
|
|
|
|
return self.client.users_playlists(self.kind, self.owner.uid, *args, **kwargs).tracks
|
|
|
|
|
|
2022-02-20 02:59:53 +09:00
|
|
|
|
async def fetch_tracks_async(self, *args, **kwargs) -> List['TrackShort']:
|
|
|
|
|
"""Сокращение для::
|
|
|
|
|
|
|
|
|
|
await client.users_playlists(playlist.kind, playlist.owner.id, *args, **kwargs).tracks
|
|
|
|
|
"""
|
2022-07-05 21:26:27 +09:00
|
|
|
|
return (await self.client.users_playlists(self.kind, self.owner.uid, *args, **kwargs)).tracks
|
2022-02-20 02:59:53 +09:00
|
|
|
|
|
2021-02-06 20:51:33 +09:00
|
|
|
|
def insert_track(self, track_id: int, album_id: int, *args, **kwargs) -> Optional['Playlist']:
|
|
|
|
|
"""Сокращение для::
|
|
|
|
|
|
|
|
|
|
client.users_playlists_insert_track(self.kind, track_id, album_id, user_id=self.owner.uid,
|
|
|
|
|
revision=self.revision, *args, **kwargs)
|
|
|
|
|
"""
|
|
|
|
|
return self.client.users_playlists_insert_track(
|
|
|
|
|
self.kind, track_id, album_id, user_id=self.owner.uid, revision=self.revision, *args, **kwargs
|
|
|
|
|
)
|
|
|
|
|
|
2022-02-20 02:59:53 +09:00
|
|
|
|
async def insert_track_async(self, track_id: int, album_id: int, *args, **kwargs) -> Optional['Playlist']:
|
|
|
|
|
"""Сокращение для::
|
|
|
|
|
|
|
|
|
|
await client.users_playlists_insert_track(self.kind, track_id, album_id, user_id=self.owner.uid,
|
|
|
|
|
revision=self.revision, *args, **kwargs)
|
|
|
|
|
"""
|
|
|
|
|
return await self.client.users_playlists_insert_track(
|
|
|
|
|
self.kind, track_id, album_id, user_id=self.owner.uid, revision=self.revision, *args, **kwargs
|
|
|
|
|
)
|
|
|
|
|
|
2021-02-06 20:51:33 +09:00
|
|
|
|
def delete_tracks(self, from_: int, to: int, *args, **kwargs) -> Optional['Playlist']:
|
|
|
|
|
"""Сокращение для::
|
|
|
|
|
|
|
|
|
|
client.users_playlists_delete_track(self.kind, from_, to, self.revision, self.owner.uid, *args, **kwargs)
|
|
|
|
|
"""
|
|
|
|
|
return self.client.users_playlists_delete_track(
|
|
|
|
|
self.kind, from_, to, self.revision, self.owner.uid, *args, **kwargs
|
|
|
|
|
)
|
|
|
|
|
|
2022-02-20 02:59:53 +09:00
|
|
|
|
async def delete_tracks_async(self, from_: int, to: int, *args, **kwargs) -> Optional['Playlist']:
|
|
|
|
|
"""Сокращение для::
|
|
|
|
|
|
|
|
|
|
await client.users_playlists_delete_track(self.kind, from_, to, self.revision, self.owner.uid, *args, **kwargs)
|
|
|
|
|
"""
|
|
|
|
|
return await self.client.users_playlists_delete_track(
|
|
|
|
|
self.kind, from_, to, self.revision, self.owner.uid, *args, **kwargs
|
|
|
|
|
)
|
|
|
|
|
|
2021-02-06 20:51:33 +09:00
|
|
|
|
def delete(self, *args, **kwargs):
|
|
|
|
|
"""Сокращение для::
|
|
|
|
|
|
|
|
|
|
client.users_playlists_delete(self.kind, self.owner.uid)
|
|
|
|
|
"""
|
|
|
|
|
return self.client.users_playlists_delete(self.kind, self.owner.uid, *args, **kwargs)
|
|
|
|
|
|
2022-02-20 02:59:53 +09:00
|
|
|
|
async def delete_async(self, *args, **kwargs):
|
|
|
|
|
"""Сокращение для::
|
|
|
|
|
|
|
|
|
|
await client.users_playlists_delete(self.kind, self.owner.uid)
|
|
|
|
|
"""
|
|
|
|
|
return await self.client.users_playlists_delete(self.kind, self.owner.uid, *args, **kwargs)
|
|
|
|
|
|
New supported objects: Album, CaseForms, Label, Library, MadeFor, Major, Normalization, PlayCounter, Playlist, Track, TrackPosition, TrackShort, User
The following methods are wrapped:
- albums;
- playlists/list;
- users/{user_id}/playlists/list;
- tracks;
- users/{user_id}/likes/tracks.
Added property to get full track ID
Cover received more optional fields
Ability to pass arguments to the request
Removed unnecessary type conversions
2019-05-13 02:39:12 +09:00
|
|
|
|
@classmethod
|
2019-12-27 18:14:51 +09:00
|
|
|
|
def de_json(cls, data: dict, client: 'Client') -> Optional['Playlist']:
|
2020-01-26 22:17:09 +09:00
|
|
|
|
"""Десериализация объекта.
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
data (:obj:`dict`): Поля и значения десериализуемого объекта.
|
Удаление избыточной информации (#247)
Классы: Account, AutoRenewable, PassportPhone, Permissions, Plus, Price,
Product, Status, Subscription, UserSettings, Album, Label,
TrackPosition, Playlist
У всех классов изменено описание атрибута client
2020-03-22 04:49:20 +09:00
|
|
|
|
client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music.
|
2020-01-26 22:17:09 +09:00
|
|
|
|
|
|
|
|
|
Returns:
|
Изменения описания de_json и de_list под новый стиль документации (#247).
Классы: Account, AutoRenewable, PassportPhone, Permissions, Plus, Price,
Product, Status, Subscription, UserSettings, Album, Label,
TrackPosition, Playlist
2020-03-22 05:06:19 +09:00
|
|
|
|
:obj:`yandex_music.Playlist`: Плейлист.
|
2020-01-26 22:17:09 +09:00
|
|
|
|
"""
|
New supported objects: Album, CaseForms, Label, Library, MadeFor, Major, Normalization, PlayCounter, Playlist, Track, TrackPosition, TrackShort, User
The following methods are wrapped:
- albums;
- playlists/list;
- users/{user_id}/playlists/list;
- tracks;
- users/{user_id}/likes/tracks.
Added property to get full track ID
Cover received more optional fields
Ability to pass arguments to the request
Removed unnecessary type conversions
2019-05-13 02:39:12 +09:00
|
|
|
|
if not data:
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
data = super(Playlist, cls).de_json(data, client)
|
2021-02-03 21:28:10 +09:00
|
|
|
|
from yandex_music import (
|
|
|
|
|
User,
|
|
|
|
|
MadeFor,
|
|
|
|
|
Cover,
|
|
|
|
|
PlayCounter,
|
|
|
|
|
TrackShort,
|
|
|
|
|
PlaylistAbsence,
|
|
|
|
|
Artist,
|
|
|
|
|
TrackId,
|
|
|
|
|
Contest,
|
|
|
|
|
OpenGraphData,
|
|
|
|
|
Brand,
|
2023-03-27 20:07:51 +09:00
|
|
|
|
CustomWave,
|
|
|
|
|
Pager,
|
2021-02-03 21:28:10 +09:00
|
|
|
|
)
|
|
|
|
|
|
New supported objects: Album, CaseForms, Label, Library, MadeFor, Major, Normalization, PlayCounter, Playlist, Track, TrackPosition, TrackShort, User
The following methods are wrapped:
- albums;
- playlists/list;
- users/{user_id}/playlists/list;
- tracks;
- users/{user_id}/likes/tracks.
Added property to get full track ID
Cover received more optional fields
Ability to pass arguments to the request
Removed unnecessary type conversions
2019-05-13 02:39:12 +09:00
|
|
|
|
data['owner'] = User.de_json(data.get('owner'), client)
|
|
|
|
|
data['cover'] = Cover.de_json(data.get('cover'), client)
|
2020-05-15 07:49:50 +09:00
|
|
|
|
data['cover_without_text'] = Cover.de_json(data.get('cover_without_text'), client)
|
New supported objects: Album, CaseForms, Label, Library, MadeFor, Major, Normalization, PlayCounter, Playlist, Track, TrackPosition, TrackShort, User
The following methods are wrapped:
- albums;
- playlists/list;
- users/{user_id}/playlists/list;
- tracks;
- users/{user_id}/likes/tracks.
Added property to get full track ID
Cover received more optional fields
Ability to pass arguments to the request
Removed unnecessary type conversions
2019-05-13 02:39:12 +09:00
|
|
|
|
data['made_for'] = MadeFor.de_json(data.get('made_for'), client)
|
2019-06-01 17:23:28 +09:00
|
|
|
|
data['tracks'] = TrackShort.de_list(data.get('tracks'), client)
|
Метод de_list в TrackId.
Поля coauthors и recent_tracks в Playlist.
Поле regions в User.
Поля users, podcasts, podcast_episodes, type_, page, per_page в Search.
Поддержка новых типов поиска: подкасты, выпуски, пользователи.
Поля short_description, description, is_premiere, is_banner в Like.
Документация и тесты к новым поля. #339
2020-06-07 18:55:30 +09:00
|
|
|
|
data['recent_tracks'] = TrackId.de_list(data.get('recent_tracks'), client)
|
New supported objects: Album, CaseForms, Label, Library, MadeFor, Major, Normalization, PlayCounter, Playlist, Track, TrackPosition, TrackShort, User
The following methods are wrapped:
- albums;
- playlists/list;
- users/{user_id}/playlists/list;
- tracks;
- users/{user_id}/likes/tracks.
Added property to get full track ID
Cover received more optional fields
Ability to pass arguments to the request
Removed unnecessary type conversions
2019-05-13 02:39:12 +09:00
|
|
|
|
data['play_counter'] = PlayCounter.de_json(data.get('play_counter'), client)
|
Добавлен новый класс LicenceTextPart.
Поля cheapest, title, family_sub, fb_image, fb_name, family, intro_period_duration, intro_price, start_period_duration, start_price, licence_text_parts для Product.
Поля storage_dir, duplicates для Album.
Поле subscribed для ArtistEvent.
Поле description для GeneratedPlaylist.
Поле genre для Event.
Поле show_in_regions для Genre.
Поле cover_uri для MixLink.
Поля og_description, top_artist для Playlist.
Поля full_image_url, mts_full_image_url для Station.
Документация и тесты к новым поля. #339
2020-06-07 05:48:32 +09:00
|
|
|
|
data['top_artist'] = Artist.de_list(data.get('top_artist'), client)
|
Добавлены новые классы: Brand, Contest, OpenGraphData.
Поля contest, dummy_description, dummy_page_description, dummy_cover, dummy_rollover_cover, og_data, branding классу Playlist.
Добавлена информацию по поводу запуска потока по треку, плейлисту и т.д.
Документация и тесты к новым полям, классам #339
2020-06-15 04:11:38 +09:00
|
|
|
|
data['contest'] = Contest.de_json(data.get('contest'), client)
|
|
|
|
|
data['og_data'] = OpenGraphData.de_json(data.get('og_data'), client)
|
|
|
|
|
data['dummy_cover'] = Cover.de_json(data.get('dummy_cover'), client)
|
|
|
|
|
data['dummy_rollover_cover'] = Cover.de_json(data.get('dummy_rollover_cover'), client)
|
|
|
|
|
data['branding'] = Brand.de_json(data.get('branding'), client)
|
2019-11-24 08:23:24 +09:00
|
|
|
|
|
2020-05-15 07:49:50 +09:00
|
|
|
|
data['similar_playlists'] = Playlist.de_list(data.get('similar_playlists'), client)
|
|
|
|
|
data['last_owner_playlists'] = Playlist.de_list(data.get('last_owner_playlists'), client)
|
|
|
|
|
|
2021-02-03 21:28:10 +09:00
|
|
|
|
data['playlist_absence'] = PlaylistAbsence.de_json(data.get('playlist_absence'), client) # на случай фикса
|
|
|
|
|
if data.get('playlist_absense'): # очепятка яндуха
|
2019-11-24 08:23:24 +09:00
|
|
|
|
data['playlist_absence'] = PlaylistAbsence.de_json(data.get('playlist_absense'), client)
|
|
|
|
|
data.pop('playlist_absense')
|
New supported objects: Album, CaseForms, Label, Library, MadeFor, Major, Normalization, PlayCounter, Playlist, Track, TrackPosition, TrackShort, User
The following methods are wrapped:
- albums;
- playlists/list;
- users/{user_id}/playlists/list;
- tracks;
- users/{user_id}/likes/tracks.
Added property to get full track ID
Cover received more optional fields
Ability to pass arguments to the request
Removed unnecessary type conversions
2019-05-13 02:39:12 +09:00
|
|
|
|
|
2023-03-27 20:07:51 +09:00
|
|
|
|
data['custom_wave'] = CustomWave.de_json(data.get('custom_wave'), client)
|
|
|
|
|
data['pager'] = Pager.de_json(data.get('pager'), client)
|
|
|
|
|
|
New supported objects: Album, CaseForms, Label, Library, MadeFor, Major, Normalization, PlayCounter, Playlist, Track, TrackPosition, TrackShort, User
The following methods are wrapped:
- albums;
- playlists/list;
- users/{user_id}/playlists/list;
- tracks;
- users/{user_id}/likes/tracks.
Added property to get full track ID
Cover received more optional fields
Ability to pass arguments to the request
Removed unnecessary type conversions
2019-05-13 02:39:12 +09:00
|
|
|
|
return cls(client=client, **data)
|
|
|
|
|
|
|
|
|
|
@classmethod
|
2019-12-27 18:14:51 +09:00
|
|
|
|
def de_list(cls, data: dict, client: 'Client') -> List['Playlist']:
|
2020-01-26 22:17:09 +09:00
|
|
|
|
"""Десериализация списка объектов.
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
data (:obj:`list`): Список словарей с полями и значениями десериализуемого объекта.
|
Удаление избыточной информации (#247)
Классы: Account, AutoRenewable, PassportPhone, Permissions, Plus, Price,
Product, Status, Subscription, UserSettings, Album, Label,
TrackPosition, Playlist
У всех классов изменено описание атрибута client
2020-03-22 04:49:20 +09:00
|
|
|
|
client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music.
|
2020-01-26 22:17:09 +09:00
|
|
|
|
|
|
|
|
|
Returns:
|
Изменения описания de_json и de_list под новый стиль документации (#247).
Классы: Account, AutoRenewable, PassportPhone, Permissions, Plus, Price,
Product, Status, Subscription, UserSettings, Album, Label,
TrackPosition, Playlist
2020-03-22 05:06:19 +09:00
|
|
|
|
:obj:`list` из :obj:`yandex_music.Playlist`: Плейлисты.
|
2020-01-26 22:17:09 +09:00
|
|
|
|
"""
|
New supported objects: Album, CaseForms, Label, Library, MadeFor, Major, Normalization, PlayCounter, Playlist, Track, TrackPosition, TrackShort, User
The following methods are wrapped:
- albums;
- playlists/list;
- users/{user_id}/playlists/list;
- tracks;
- users/{user_id}/likes/tracks.
Added property to get full track ID
Cover received more optional fields
Ability to pass arguments to the request
Removed unnecessary type conversions
2019-05-13 02:39:12 +09:00
|
|
|
|
if not data:
|
|
|
|
|
return []
|
|
|
|
|
|
2020-05-15 07:49:50 +09:00
|
|
|
|
return [cls.de_json(playlist, client) for playlist in data]
|
2019-08-18 18:54:13 +09:00
|
|
|
|
|
|
|
|
|
# camelCase псевдонимы
|
|
|
|
|
|
2019-10-19 17:55:45 +09:00
|
|
|
|
#: Псевдоним для :attr:`is_mine`
|
2019-08-18 18:54:13 +09:00
|
|
|
|
isMine = is_mine
|
2019-10-19 17:55:45 +09:00
|
|
|
|
#: Псевдоним для :attr:`playlist_id`
|
2019-08-18 18:54:13 +09:00
|
|
|
|
playlistId = playlist_id
|
2020-05-07 17:46:56 +09:00
|
|
|
|
#: Псевдоним для :attr:`get_recommendations`
|
|
|
|
|
getRecommendations = get_recommendations
|
2022-02-20 02:59:53 +09:00
|
|
|
|
#: Псевдоним для :attr:`get_recommendations_async`
|
|
|
|
|
getRecommendationsAsync = get_recommendations_async
|
2022-10-16 23:53:46 +09:00
|
|
|
|
#: Псевдоним для :attr:`get_animated_cover_url`
|
|
|
|
|
getAnimatedCoverUrl = get_animated_cover_url
|
|
|
|
|
#: Псевдоним для :attr:`get_og_image_url`
|
|
|
|
|
getOgImageUrl = get_og_image_url
|
2019-10-19 17:55:45 +09:00
|
|
|
|
#: Псевдоним для :attr:`download_animated_cover`
|
2019-08-18 23:44:46 +09:00
|
|
|
|
downloadAnimatedCover = download_animated_cover
|
2022-02-20 02:59:53 +09:00
|
|
|
|
#: Псевдоним для :attr:`download_animated_cover_async`
|
|
|
|
|
downloadAnimatedCoverAsync = download_animated_cover_async
|
2019-10-19 17:55:45 +09:00
|
|
|
|
#: Псевдоним для :attr:`download_og_image`
|
2019-08-18 23:44:46 +09:00
|
|
|
|
downloadOgImage = download_og_image
|
2022-02-20 02:59:53 +09:00
|
|
|
|
#: Псевдоним для :attr:`download_og_image_async`
|
|
|
|
|
downloadOgImageAsync = download_og_image_async
|
2022-10-16 23:53:46 +09:00
|
|
|
|
#: Псевдоним для :attr:`download_animated_cover_bytes`
|
|
|
|
|
downloadAnimatedCoverBytes = download_animated_cover_bytes
|
|
|
|
|
#: Псевдоним для :attr:`download_animated_cover_bytes_async`
|
|
|
|
|
downloadAnimatedCoverBytesAsync = download_animated_cover_bytes_async
|
|
|
|
|
#: Псевдоним для :attr:`download_og_image_bytes`
|
|
|
|
|
downloadOgImageBytes = download_og_image_bytes
|
|
|
|
|
#: Псевдоним для :attr:`download_og_image_bytes_async`
|
|
|
|
|
downloadOgImageBytesAsync = download_og_image_bytes_async
|
|
|
|
|
#: Псевдоним для :attr:`rename_async`
|
|
|
|
|
renameAsync = rename_async
|
|
|
|
|
#: Псевдоним для :attr:`like_async`
|
|
|
|
|
likeAsync = like_async
|
|
|
|
|
#: Псевдоним для :attr:`dislike_async`
|
|
|
|
|
dislikeAsync = dislike_async
|
2020-05-15 07:49:50 +09:00
|
|
|
|
#: Псевдоним для :attr:`fetch_tracks`
|
2020-05-15 06:48:49 +09:00
|
|
|
|
fetchTracks = fetch_tracks
|
2022-02-20 02:59:53 +09:00
|
|
|
|
#: Псевдоним для :attr:`fetch_tracks_async`
|
|
|
|
|
fetchTracksAsync = fetch_tracks_async
|
2021-02-06 20:51:33 +09:00
|
|
|
|
#: Псевдоним для :attr:`insert_track`
|
|
|
|
|
insertTrack = insert_track
|
2022-02-20 02:59:53 +09:00
|
|
|
|
#: Псевдоним для :attr:`insert_track_async`
|
|
|
|
|
insertTrackAsync = insert_track_async
|
2021-02-06 20:51:33 +09:00
|
|
|
|
#: Псевдоним для :attr:`delete_tracks`
|
|
|
|
|
deleteTracks = delete_tracks
|
2022-02-20 02:59:53 +09:00
|
|
|
|
#: Псевдоним для :attr:`delete_tracks_async`
|
|
|
|
|
deleteTracksAsync = delete_tracks_async
|
|
|
|
|
#: Псевдоним для :attr:`delete_async`
|
|
|
|
|
deleteAsync = delete_async
|