Новые поля класса TrackShort: play_count, recent, chart, track.

Новые поля класса Chart: bg_color.
このコミットが含まれているのは:
Il`ya Semyonov 2020-05-15 22:41:30 +03:00
コミット 6354d730cd
5個のファイルの変更62行の追加22行の削除

ファイルの表示

@ -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