Десериализация decomposed у Artist.

И года не прошло. Не без веселья конечно #10
このコミットが含まれているのは:
Il`ya Semyonov 2020-06-07 15:24:16 +03:00
コミット b5b3689290
3個のファイルの変更32行の追加14行の削除

ファイルの表示

@ -25,12 +25,12 @@ from . import TestAccount, TestAdParams, TestAlbum, TestArtist, TestAutoRenewabl
@pytest.fixture(scope='session')
def artist_factory(cover, counts, ratings, link, description):
class ArtistFactory:
def get(self, popular_tracks):
def get(self, popular_tracks, decomposed=None):
return Artist(TestArtist.id, TestArtist.error, TestArtist.reason, TestArtist.name, cover,
TestArtist.various, TestArtist.composer, TestArtist.genres, TestArtist.og_image,
TestArtist.op_image, TestArtist.no_pictures_from_search, counts, TestArtist.available,
ratings, [link], TestArtist.tickets_available, TestArtist.likes_count, popular_tracks,
TestArtist.regions, TestArtist.decomposed, TestArtist.full_names, description,
TestArtist.regions, decomposed, TestArtist.full_names, description,
TestArtist.countries, TestArtist.en_wikipedia_link, TestArtist.db_aliases, TestArtist.aliases,
TestArtist.init_date, TestArtist.end_date)
@ -38,7 +38,12 @@ def artist_factory(cover, counts, ratings, link, description):
@pytest.fixture(scope='session')
def artist(artist_factory, track_without_artists_and_albums):
def artist(artist_factory, track_without_artists_and_albums, artist_decomposed):
return artist_factory.get([track_without_artists_and_albums], artist_decomposed)
@pytest.fixture(scope='session')
def artist_without_nested_artist(artist_factory, track_without_artists_and_albums):
return artist_factory.get([track_without_artists_and_albums])
@ -47,6 +52,11 @@ def artist_without_tracks(artist_factory):
return artist_factory.get([])
@pytest.fixture(scope='session')
def artist_decomposed(artist_without_nested_artist):
return [' & ', artist_without_nested_artist]
@pytest.fixture(scope='session')
def track_factory(major, normalization, user, meta_data):
class TrackFactory:

ファイルの表示

@ -16,7 +16,6 @@ class TestArtist:
tickets_available = False
likes_count = 657469
regions = None
decomposed = None
full_names = None
countries = None
en_wikipedia_link = None
@ -25,7 +24,8 @@ class TestArtist:
init_date = '1935-01-08'
end_date = None
def test_expected_values(self, artist, cover, counts, ratings, link, track_without_artists_and_albums, description):
def test_expected_values(self, artist, cover, counts, ratings, link, track_without_artists_and_albums,
description, artist_decomposed):
assert artist.id == self.id
assert artist.error == self.error
assert artist.reason == self.reason
@ -45,7 +45,7 @@ class TestArtist:
assert artist.likes_count == self.likes_count
assert artist.popular_tracks == [track_without_artists_and_albums]
assert artist.regions == self.regions
assert artist.decomposed == self.decomposed
assert artist.decomposed == artist_decomposed
assert artist.full_names == self.full_names
assert artist.description == description
assert artist.countries == self.countries
@ -67,7 +67,9 @@ class TestArtist:
assert artist.id == self.id
def test_de_json_all(self, client, cover, counts, ratings, link, track_without_artists, description):
def test_de_json_all(self, client, cover, counts, ratings, link, track_without_artists,
description, artist_decomposed):
artist_decomposed_dict = [item if isinstance(item, str) else item.to_dict() for item in artist_decomposed]
json_dict = {'id_': self.id, 'reason': self.reason, 'error': self.error, 'name': self.name,
'various': self.various, 'composer': self.composer, 'cover': cover.to_dict(),
'genres': self.genres, 'op_image': self.op_image, 'og_image': self.og_image,
@ -75,7 +77,7 @@ class TestArtist:
'available': self.available, 'ratings': ratings.to_dict(),
'links': [link.to_dict()], 'tickets_available': self.tickets_available,
'likes_count': self.likes_count, 'popular_tracks': [track_without_artists.to_dict()],
'regions': self.regions, 'decomposed': self.decomposed, 'full_names': self.full_names,
'regions': self.regions, 'decomposed': artist_decomposed_dict, 'full_names': self.full_names,
'description': description.to_dict(), 'countries': self.countries,
'en_wikipedia_link': self.en_wikipedia_link, 'db_aliases': self.db_aliases,
'aliases': self.aliases, 'init_date': self.init_date, 'end_date': self.end_date}
@ -100,7 +102,7 @@ class TestArtist:
assert artist.likes_count == self.likes_count
assert artist.popular_tracks == [track_without_artists]
assert artist.regions == self.regions
assert artist.decomposed == self.decomposed
assert artist.decomposed == artist_decomposed
assert artist.full_names == self.full_names
assert artist.description == description
assert artist.countries == self.countries

ファイルの表示

@ -1,4 +1,4 @@
from typing import TYPE_CHECKING, Optional, List
from typing import TYPE_CHECKING, Optional, List, Union
from yandex_music import YandexMusicObject
@ -27,7 +27,8 @@ class Artist(YandexMusicObject):
links (:obj:`list` из :obj:`yandex_music.Link`): Ссылки на ресурсы исполнителя.
tickets_available (:obj:`bool`): Имеются ли в продаже билеты на концерт.
regions (:obj:`list` из :obj:`str`): Регион TODO.
decomposed: TODO.
decomposed (:obj:`list` из :obj:`str` и :obj:`yandex_music.Artist`): Декомпозиция всех исполнителей. Лист, где
чередуется разделитель и артист. Фиты и прочее.
popular_tracks (:obj:`list` :obj:`yandex_music.Track`): Популярные треки.
likes_count (:obj:`int`): Количество лайков.
full_names: TODO.
@ -60,7 +61,8 @@ class Artist(YandexMusicObject):
likes_count (:obj:`int`, optional): Количество лайков.
popular_tracks (:obj:`list` :obj:`yandex_music.Track`, optional): Популярные треки.
regions (:obj:`list` из :obj:`str`, optional): Регион TODO.
decomposed: TODO.
decomposed (:obj:`list` из :obj:`str` и :obj:`yandex_music.Artist`, optional): Декомпозиция всех исполнителей.
Лист, где чередуется разделитель и артист. Фиты и прочее.
full_names: TODO.
description (:obj:`yandex_music.Description`, optional): Описание.
countries (:obj:`list` из :obj:`str`, optional): Страны.
@ -93,7 +95,7 @@ class Artist(YandexMusicObject):
likes_count: Optional[int] = None,
popular_tracks: Optional[List['Track']] = None,
regions: Optional[List[str]] = None,
decomposed=None,
decomposed: Optional[List[Union[str, 'Artist']]] = None,
full_names=None,
description: Optional['Description'] = None,
countries: Optional[List[str]] = None,
@ -212,7 +214,11 @@ class Artist(YandexMusicObject):
data['links'] = Link.de_list(data.get('links'), client)
data['popular_tracks'] = Track.de_list(data.get('popular_tracks'), client)
data['description'] = Description.de_json(data.get('description'), client)
# TODO add "decomposed" deserialization
# Мне очень интересно увидеть как в яндухе на клиентах солвят свой бэковский костыль, пригласите на экскурсию
if data.get('decomposed'):
data['decomposed'] = [Artist.de_json(part, client)
if isinstance(part, dict) else part for part in data['decomposed']]
return cls(client=client, **data)