Новые поля класса TrackShort: play_count, recent, chart, track.
Новые поля класса Chart: bg_color.
このコミットが含まれているのは:
コミット
6354d730cd
|
@ -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')
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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
|
||||
|
|
読み込み中…
新しいイシューから参照