From 6354d730cdb8230a0f8881a6a5375b402e9ec83f Mon Sep 17 00:00:00 2001 From: Il`ya Semyonov Date: Fri, 15 May 2020 22:41:30 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D1=8B=D0=B5=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0=20TrackShor?= =?UTF-8?q?t:=20play=5Fcount,=20recent,=20chart,=20track.=20=D0=9D=D0=BE?= =?UTF-8?q?=D0=B2=D1=8B=D0=B5=20=D0=BF=D0=BE=D0=BB=D1=8F=20=D0=BA=D0=BB?= =?UTF-8?q?=D0=B0=D1=81=D1=81=D0=B0=20Chart:=20bg=5Fcolor.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/conftest.py | 5 +++-- tests/test_chart.py | 5 ++++- tests/test_track_short.py | 23 +++++++++++++++----- yandex_music/landing/chart.py | 10 ++++----- yandex_music/track_short.py | 41 +++++++++++++++++++++++++++-------- 5 files changed, 62 insertions(+), 22 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 1269ed3..b928a8b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -134,7 +134,7 @@ def generated_playlist(playlist): @pytest.fixture(scope='session') def client(): - return Client() + return Client(fetch_account_status=False) @pytest.fixture(scope='session') @@ -419,7 +419,8 @@ def status(account, permissions, subscription, plus): @pytest.fixture(scope='session') def chart(track_id): - return Chart(TestChart.position, TestChart.progress, TestChart.listeners, TestChart.shift, track_id) + return Chart(TestChart.position, TestChart.progress, TestChart.listeners, + TestChart.shift, TestChart.bg_color, track_id) @pytest.fixture(scope='session') diff --git a/tests/test_chart.py b/tests/test_chart.py index 32cb62f..e5b4340 100644 --- a/tests/test_chart.py +++ b/tests/test_chart.py @@ -6,6 +6,7 @@ class TestChart: progress = 'same' listeners = 1433 shift = 0 + bg_color = '#666A61' def test_expected_values(self, chart, track_id): assert chart.position == self.position @@ -13,6 +14,7 @@ class TestChart: assert chart.listeners == self.listeners assert chart.shift == self.shift assert chart.track_id == track_id + assert chart.bg_color == self.bg_color def test_de_json_none(self, client): assert Chart.de_json({}, client) is None @@ -32,7 +34,7 @@ class TestChart: def test_de_json_all(self, client, track_id): json_dict = {'position': self.position, 'progress': self.progress, 'listeners': self.listeners, - 'shift': self.shift, 'track_id': track_id.to_dict()} + 'shift': self.shift, 'bg_color': self.bg_color, 'track_id': track_id.to_dict()} chart = Chart.de_json(json_dict, client) assert chart.position == self.position @@ -40,6 +42,7 @@ class TestChart: assert chart.listeners == self.listeners assert chart.shift == self.shift assert chart.track_id == track_id + assert chart.bg_color == self.bg_color def test_equality(self): a = Chart(self.position, self.progress, self.listeners, self.shift) diff --git a/tests/test_track_short.py b/tests/test_track_short.py index dcb3611..96b3bd2 100644 --- a/tests/test_track_short.py +++ b/tests/test_track_short.py @@ -4,19 +4,26 @@ from yandex_music import TrackShort @pytest.fixture(scope='class') -def track_short(): - return TrackShort(TestTrackShort.id, TestTrackShort.timestamp, TestTrackShort.album_id) +def track_short(track, chart): + return TrackShort(TestTrackShort.id, TestTrackShort.timestamp, TestTrackShort.album_id, TestTrackShort.play_count, + TestTrackShort.recent, chart, track) class TestTrackShort: id = 21997388 timestamp = '2019-11-07T03:00:00+00:00' album_id = None + play_count = 0 + recent = False - def test_expected_values(self, track_short): + def test_expected_values(self, track_short, track, chart): assert track_short.id == self.id assert track_short.timestamp == self.timestamp assert track_short.album_id == self.album_id + assert track_short.play_count == self.play_count + assert track_short.recent == self.recent + assert track_short.track == track + assert track_short.chart == chart def test_de_json_none(self, client): assert TrackShort.de_json({}, client) is None @@ -31,13 +38,19 @@ class TestTrackShort: assert track_short.id == self.id assert track_short.timestamp == self.timestamp - def test_de_json_all(self, client): - json_dict = {'id_': self.id, 'timestamp': self.timestamp, 'album_id': self.album_id} + def test_de_json_all(self, client, track, chart): + json_dict = {'id_': self.id, 'timestamp': self.timestamp, 'album_id': self.album_id, + 'play_count': self.play_count, 'recent': self.recent, + 'track': track.to_dict(), 'chart': chart.to_dict()} track_short = TrackShort.de_json(json_dict, client) assert track_short.id == self.id assert track_short.timestamp == self.timestamp assert track_short.album_id == self.album_id + assert track_short.play_count == self.play_count + assert track_short.recent == self.recent + assert track_short.track == track + assert track_short.chart == chart def test_equality(self): a = TrackShort(self.id, self.timestamp, self.album_id) diff --git a/yandex_music/landing/chart.py b/yandex_music/landing/chart.py index 83f74bd..d186078 100644 --- a/yandex_music/landing/chart.py +++ b/yandex_music/landing/chart.py @@ -17,6 +17,7 @@ class Chart(YandexMusicObject): progress (:obj:`str`): TODO. listeners (:obj:`int`): Количество слушателей. shift (:obj:`int`): Смещение. + bg_color (:obj:`str`): Цвет заднего фона. track_id (:obj:`yandex_music.TrackId` | :obj:`None`): Уникальный идентификатор трека. client (:obj:`yandex_music.Client`): Клиент Yandex Music. @@ -25,6 +26,7 @@ class Chart(YandexMusicObject): progress (:obj:`str`): TODO. listeners (:obj:`int`): Количество слушателей. shift (:obj:`int`): Смещение. + bg_color (:obj:`str`, optional): Цвет заднего фона. track_id (:obj:`yandex_music.TrackId`, optional): Уникальный идентификатор трека. client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music. **kwargs: Произвольные ключевые аргументы полученные от API. @@ -35,6 +37,7 @@ class Chart(YandexMusicObject): progress: str, listeners: int, shift: int, + bg_color: Optional[str] = None, track_id: Optional['TrackId'] = None, client: Optional['Client'] = None, **kwargs) -> None: @@ -43,6 +46,7 @@ class Chart(YandexMusicObject): self.listeners = listeners self.shift = shift + self.bg_color = bg_color self.track_id = track_id self.client = client @@ -84,8 +88,4 @@ class Chart(YandexMusicObject): if not data: return [] - charts = list() - for chart in data: - charts.append(cls.de_json(chart, client)) - - return charts + return [cls.de_json(chart, client) for chart in data] diff --git a/yandex_music/track_short.py b/yandex_music/track_short.py index 4f4551f..11be0d0 100644 --- a/yandex_music/track_short.py +++ b/yandex_music/track_short.py @@ -3,22 +3,33 @@ from typing import TYPE_CHECKING, Optional, List, Union from yandex_music import YandexMusicObject if TYPE_CHECKING: - from yandex_music import Client, Track + from yandex_music import Client, Track, Chart class TrackShort(YandexMusicObject): """Класс, представляющий укороченную версию трека с неполными данными. + Note: + Поля `chart` и `track` только у треков, полученных через метод `chart()`. + Attributes: id (:obj:`str`): Уникальный идентификатор трека. timestamp (:obj:`str`): Дата TODO. album_id (:obj:`str`): Уникальный идентификатор альбома. + play_count (:obj:`int`): Количество проигрываний. + recent (:obj:`bool`): Недавний. + chart (:obj:`yandex_music.Chart`): Позиция в чарте. + track (:obj:`yandex_music.Track`): Полная версия трека. client (:obj:`yandex_music.Client`): Клиент Yandex Music. Args: id_ (:obj:`str`): Уникальный идентификатор трека. timestamp (:obj:`str`): Дата TODO. album_id (:obj:`str`, optional): Уникальный идентификатор альбома. + play_count (:obj:`int`, optional): Количество проигрываний. + recent (:obj:`bool`, optional): Недавний. + chart (:obj:`yandex_music.Chart`, optional): Позиция в чарте. + track (:obj:`yandex_music.Track`, optional): Полная версия трека. client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music. **kwargs: Произвольные ключевые аргументы полученные от API. """ @@ -27,12 +38,20 @@ class TrackShort(YandexMusicObject): id_: Union[str, int], timestamp: str, album_id: Optional[str] = None, + play_count: Optional[int] = None, + recent: Optional[bool] = None, + chart: Optional['Chart'] = None, + track: Optional['Track'] = None, client: Optional['Client'] = None, **kwargs): self.id = id_ self.timestamp = timestamp self.album_id = album_id + self.play_count = play_count + self.recent = recent + self.chart = chart + self.track = track self._track = None @@ -41,9 +60,12 @@ class TrackShort(YandexMusicObject): super().handle_unknown_kwargs(self, **kwargs) - @property - def track(self) -> 'Track': - """:obj:`yandex_music.Track`: Полная версия трека.""" + def fetch_track(self) -> 'Track': + """Получение полной версии трека. + + Returns: + :obj:`yandex_music.Track`: Полная версия трека. + """ if self._track: return self._track @@ -74,6 +96,9 @@ class TrackShort(YandexMusicObject): return None data = super(TrackShort, cls).de_json(data, client) + from yandex_music import Track, Chart + data['track'] = Track.de_json(data.get('track'), client) + data['chart'] = Chart.de_json(data.get('chart'), client) return cls(client=client, **data) @@ -91,13 +116,11 @@ class TrackShort(YandexMusicObject): if not data: return [] - tracks = list() - for track in data: - tracks.append(cls.de_json(track, client)) - - return tracks + return [cls.de_json(track, client) for track in data] # camelCase псевдонимы + #: Псевдоним для :attr:`fetch_track` + fetchTrack = fetch_track #: Псевдоним для :attr:`track_id` trackId = track_id