コミット
b5b3689290
|
@ -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)
|
||||
|
||||
|
|
読み込み中…
新しいイシューから参照