2020-02-04 21:34:11 +09:00
|
|
|
|
from typing import List, Optional, TYPE_CHECKING
|
|
|
|
|
|
|
|
|
|
from yandex_music import Album, Artist, Playlist, YandexMusicObject
|
2021-09-19 22:47:19 +09:00
|
|
|
|
from yandex_music.utils import model
|
2020-02-04 21:34:11 +09:00
|
|
|
|
|
|
|
|
|
if TYPE_CHECKING:
|
|
|
|
|
from yandex_music import Client
|
|
|
|
|
|
|
|
|
|
de_list = {
|
|
|
|
|
'album': Album.de_json,
|
|
|
|
|
'playlist': Playlist.de_json,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2021-09-19 22:47:19 +09:00
|
|
|
|
@model
|
2020-02-04 21:34:11 +09:00
|
|
|
|
class Like(YandexMusicObject):
|
|
|
|
|
"""Класс, представляющий объект с отметкой "мне нравится".
|
|
|
|
|
|
|
|
|
|
None:
|
|
|
|
|
В поле `type` содержится одно из трёх значений: `artist`, `playlist`, `album`. Обозначает поле, в котором
|
|
|
|
|
содержится информация.
|
|
|
|
|
|
|
|
|
|
Attributes:
|
|
|
|
|
type (:obj:`str`): Тип объекта с отметкой.
|
|
|
|
|
id (:obj:`str`, optional): Уникальный идентификатор отметки.
|
|
|
|
|
timestamp (:obj:`str`, optional): Дата и время добавления отметки.
|
2020-03-22 06:29:34 +09:00
|
|
|
|
album (:obj:`yandex_music.Album`, optional): Понравившейся альбом.
|
|
|
|
|
artist (:obj:`yandex_music.Artist`, optional): Понравившейся артист.
|
|
|
|
|
playlist (:obj:`yandex_music.Playlist`, 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
|
|
|
|
short_description (:obj:`str`, optional): Короткое описание.
|
|
|
|
|
description (:obj:`str`, optional): Описание.
|
|
|
|
|
is_premiere (:obj:`bool`, optional): Премьера ли.
|
|
|
|
|
is_banner (:obj:`bool`, 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-02-04 21:34:11 +09:00
|
|
|
|
"""
|
|
|
|
|
|
2021-09-19 22:47:19 +09:00
|
|
|
|
type: str
|
|
|
|
|
id: Optional[str] = None
|
|
|
|
|
timestamp: Optional[str] = None
|
|
|
|
|
album: Optional['Album'] = None
|
|
|
|
|
artist: Optional['Artist'] = None
|
|
|
|
|
playlist: Optional['Playlist'] = None
|
|
|
|
|
short_description: Optional[str] = None
|
|
|
|
|
description: Optional[str] = None
|
|
|
|
|
is_premiere: Optional[bool] = None
|
|
|
|
|
is_banner: Optional[bool] = None
|
|
|
|
|
client: Optional['Client'] = None
|
|
|
|
|
|
|
|
|
|
def __post_init__(self):
|
2020-02-04 21:34:11 +09:00
|
|
|
|
self._id_attrs = (self.id, self.type, self.timestamp, self.album, self.artist, self.playlist)
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
|
def de_json(cls, data: dict, client: 'Client', type_: str = None) -> Optional['Like']:
|
|
|
|
|
"""Десериализация объекта.
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
data (:obj:`dict`): Поля и значения десериализуемого объекта.
|
|
|
|
|
type_ (:obj:`str`, 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-02-04 21:34:11 +09:00
|
|
|
|
|
|
|
|
|
Returns:
|
2020-03-22 06:29:34 +09:00
|
|
|
|
:obj:`yandex_music.Like`: Объект с отметкой "мне нравится".
|
2020-02-04 21:34:11 +09:00
|
|
|
|
"""
|
|
|
|
|
if not data:
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
data = super(Like, cls).de_json(data, client)
|
|
|
|
|
|
|
|
|
|
if type_ == 'artist':
|
|
|
|
|
if 'artist' not in data:
|
|
|
|
|
temp_data = data.copy()
|
|
|
|
|
data.clear()
|
|
|
|
|
data[type_] = Artist.de_json(temp_data, client)
|
|
|
|
|
else:
|
|
|
|
|
data[type_] = Artist.de_json(data.get('artist'), client)
|
|
|
|
|
else:
|
|
|
|
|
data[type_] = de_list[type_](data.get(type_), client)
|
|
|
|
|
|
2021-09-19 22:47:19 +09:00
|
|
|
|
data['type'] = type_
|
2020-02-04 21:34:11 +09:00
|
|
|
|
|
|
|
|
|
return cls(client=client, **data)
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
|
def de_list(cls, data: dict, client: 'Client', type_: str = None) -> List['Like']:
|
|
|
|
|
"""Десериализация списка объектов.
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
data (:obj:`list`): Список словарей с полями и значениями десериализуемого объекта.
|
|
|
|
|
type_ (:obj:`str`, 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-02-04 21:34:11 +09:00
|
|
|
|
|
|
|
|
|
Returns:
|
2020-03-22 06:29:34 +09:00
|
|
|
|
:obj:`list` из :obj:`yandex_music.Like`: Объекты с отметкой "мне нравится".
|
2020-02-04 21:34:11 +09:00
|
|
|
|
"""
|
|
|
|
|
if not data:
|
|
|
|
|
return []
|
|
|
|
|
|
|
|
|
|
likes = list()
|
|
|
|
|
for like in data:
|
|
|
|
|
likes.append(cls.de_json(like, client, type_))
|
|
|
|
|
|
|
|
|
|
return likes
|