diff --git a/tests/test_brief_info.py b/tests/test_brief_info.py index eb60816..ce30329 100644 --- a/tests/test_brief_info.py +++ b/tests/test_brief_info.py @@ -4,8 +4,8 @@ from yandex_music import BriefInfo @pytest.fixture(scope='class') -def brief_info(artist, track, album, cover, playlist_id, video, chart, vinyl): - return BriefInfo(artist, [album], [album], TestBriefInfo.last_release_ids, [track], [artist], [cover], +def brief_info(artist, track, album, playlist, cover, playlist_id, video, chart, vinyl): + return BriefInfo(artist, [album], [playlist], [album], TestBriefInfo.last_release_ids, [track], [artist], [cover], TestBriefInfo.concerts, [video], [vinyl], TestBriefInfo.has_promotions, [playlist_id], [chart]) @@ -14,9 +14,10 @@ class TestBriefInfo: concerts = None has_promotions = False - def test_expected_values(self, brief_info, artist, track, album, cover, playlist_id, video, chart, vinyl): + def test_expected_values(self, brief_info, artist, track, album, playlist, cover, playlist_id, video, chart, vinyl): assert brief_info.artist == artist assert brief_info.albums == [album] + assert brief_info.playlists == [playlist] assert brief_info.also_albums == [album] assert brief_info.last_release_ids == self.last_release_ids assert brief_info.popular_tracks == [track] @@ -32,16 +33,17 @@ class TestBriefInfo: def test_de_json_none(self, client): assert BriefInfo.de_json({}, client) is None - def test_de_json_required(self, client, artist, track, album, cover, playlist_id, video, vinyl): + def test_de_json_required(self, client, artist, track, album, playlist, cover, playlist_id, video, vinyl): json_dict = {'artist': artist.to_dict(), 'albums': [album.to_dict()], 'also_albums': [album.to_dict()], 'last_release_ids': self.last_release_ids, 'popular_tracks': [track.to_dict()], 'similar_artists': [artist.to_dict()], 'all_covers': [cover.to_dict()], 'concerts': self.concerts, 'videos': [video.to_dict()], 'vinyls': [vinyl.to_dict()], 'has_promotions': self.has_promotions, - 'playlist_ids': [playlist_id.to_dict()]} + 'playlist_ids': [playlist_id.to_dict()], 'playlists': [playlist.to_dict()]} brief_info = BriefInfo.de_json(json_dict, client) assert brief_info.artist == artist assert brief_info.albums == [album] + assert brief_info.playlists == [playlist] assert brief_info.also_albums == [album] assert brief_info.last_release_ids == self.last_release_ids assert brief_info.popular_tracks == [track] @@ -53,16 +55,18 @@ class TestBriefInfo: assert brief_info.has_promotions == self.has_promotions assert brief_info.playlist_ids == [playlist_id] - def test_de_json_all(self, client, artist, track, album, cover, playlist_id, video, chart, vinyl): + def test_de_json_all(self, client, artist, track, album, playlist, cover, playlist_id, video, chart, vinyl): json_dict = {'artist': artist.to_dict(), 'albums': [album.to_dict()], 'also_albums': [album.to_dict()], 'last_release_ids': self.last_release_ids, 'popular_tracks': [track.to_dict()], 'similar_artists': [artist.to_dict()], 'all_covers': [cover.to_dict()], 'concerts': self.concerts, 'videos': [video.to_dict()], 'vinyls': [vinyl.to_dict()], 'has_promotions': self.has_promotions, - 'playlist_ids': [playlist_id.to_dict()], 'tracks_in_chart': [chart.to_dict()]} + 'playlist_ids': [playlist_id.to_dict()], 'tracks_in_chart': [chart.to_dict()], + 'playlists': [playlist.to_dict()]} brief_info = BriefInfo.de_json(json_dict, client) assert brief_info.artist == artist assert brief_info.albums == [album] + assert brief_info.playlists == [playlist] assert brief_info.also_albums == [album] assert brief_info.last_release_ids == self.last_release_ids assert brief_info.popular_tracks == [track] @@ -75,15 +79,15 @@ class TestBriefInfo: assert brief_info.playlist_ids == [playlist_id] assert brief_info.tracks_in_chart == [chart] - def test_equality(self, artist, track, album, cover, playlist_id, video, vinyl): - a = BriefInfo(artist, [album], [album], self.last_release_ids, [track], [artist], [cover], self.concerts, - [video], [vinyl], self.has_promotions, [playlist_id]) - b = BriefInfo(artist, [album], [album], self.last_release_ids, [], [artist], [cover], self.concerts, + def test_equality(self, artist, track, album, playlist, cover, playlist_id, video, vinyl): + a = BriefInfo(artist, [album], [playlist], [album], self.last_release_ids, [track], [artist], [cover], + self.concerts, [video], [vinyl], self.has_promotions, [playlist_id]) + b = BriefInfo(artist, [album], [], [album], self.last_release_ids, [], [artist], [cover], self.concerts, [video], [vinyl], True, [playlist_id]) - c = BriefInfo(artist, [album], [album], [1, 2, 3], [track], [artist], [], self.concerts, - [video], [vinyl], self.has_promotions, [playlist_id]) - d = BriefInfo(artist, [album], [album], self.last_release_ids, [track], [artist], [cover], self.concerts, + c = BriefInfo(artist, [album], [playlist], [album], [1, 2, 3], [track], [artist], [], self.concerts, [video], [vinyl], self.has_promotions, [playlist_id]) + d = BriefInfo(artist, [album], [playlist], [album], self.last_release_ids, [track], [artist], [cover], + self.concerts, [video], [vinyl], self.has_promotions, [playlist_id]) assert a != b != c assert hash(a) != hash(b) != hash(c) diff --git a/yandex_music/artist/brief_info.py b/yandex_music/artist/brief_info.py index da9b90b..22f7082 100644 --- a/yandex_music/artist/brief_info.py +++ b/yandex_music/artist/brief_info.py @@ -3,7 +3,7 @@ from typing import TYPE_CHECKING, Optional, List from yandex_music import YandexMusicObject if TYPE_CHECKING: - from yandex_music import Client, Artist, Track, Album, Cover, PlaylistId, Video, Chart, Vinyl + from yandex_music import Client, Artist, Track, Album, Cover, PlaylistId, Video, Chart, Vinyl, Playlist class BriefInfo(YandexMusicObject): @@ -12,6 +12,7 @@ class BriefInfo(YandexMusicObject): Attributes: artist (:obj:`yandex_music.Artist` | :obj:`None`): Артист. albums (:obj:`list` из :obj:`yandex_music.Album`): Альбомы. + playlists (:obj:`list` из :obj:`yandex_music.Playlist`): Плейлисты. also_albums (:obj:`list` из :obj:`yandex_music.Album`): Сборники. last_release_ids (:obj:`list` из :obj:`int`): Уникальные идентификаторы последних выпущенных треков. popular_tracks (:obj:`list` из :obj:`yandex_music.Track`): Популярные треки. @@ -28,6 +29,7 @@ class BriefInfo(YandexMusicObject): Args: artist (:obj:`yandex_music.Artist` | :obj:`None`): Артист. albums (:obj:`list` из :obj:`yandex_music.Album`): Альбомы. + playlists (:obj:`list` из :obj:`yandex_music.Playlist`): Плейлисты. also_albums (:obj:`list` из :obj:`yandex_music.Album`): Сборники. last_release_ids (:obj:`list` из :obj:`int`): Уникальные идентификаторы последних выпущенных треков. popular_tracks (:obj:`list` из :obj:`yandex_music.Track`): Популярные треки. @@ -46,6 +48,7 @@ class BriefInfo(YandexMusicObject): def __init__(self, artist: Optional['Artist'], albums: List['Album'], + playlists: List['Playlist'], also_albums: List['Album'], last_release_ids: List[int], popular_tracks: List['Track'], @@ -63,6 +66,7 @@ class BriefInfo(YandexMusicObject): self.artist = artist self.albums = albums + self.playlists = playlists self.also_albums = also_albums self.last_release_ids = last_release_ids self.popular_tracks = popular_tracks @@ -77,9 +81,9 @@ class BriefInfo(YandexMusicObject): self.tracks_in_chart = tracks_in_chart self.client = client - self._id_attrs = (self.artist, self.albums, self.also_albums, self.last_release_ids, self.popular_tracks, - self.similar_artists, self.all_covers, self.concerts, self.videos, self.vinyls, - self.has_promotions, self.playlist_ids) + self._id_attrs = (self.artist, self.albums, self.playlists, self.also_albums, self.last_release_ids, + self.popular_tracks, self.similar_artists, self.all_covers, self.concerts, self.videos, + self.vinyls, self.has_promotions, self.playlist_ids) @classmethod def de_json(cls, data: dict, client: 'Client') -> Optional['BriefInfo']: @@ -96,7 +100,8 @@ class BriefInfo(YandexMusicObject): return None data = super(BriefInfo, cls).de_json(data, client) - from yandex_music import Artist, Track, Album, Cover, PlaylistId, Video, Chart, Vinyl + from yandex_music import Artist, Track, Album, Cover, PlaylistId, Video, Chart, Vinyl, Playlist + data['playlists'] = Playlist.de_list(data.get('playlists'), client) data['artist'] = Artist.de_json(data.get('artist'), client) data['similar_artists'] = Artist.de_list(data.get('similar_artists'), client) data['popular_tracks'] = Track.de_list(data.get('popular_tracks'), client)