PlaylistsRecommendations -> PlaylistRecommendations

このコミットが含まれているのは:
Gleb Liutsko 2020-05-07 12:09:12 +04:00
コミット de412a4a9f
9個のファイルの変更67行の追加58行の削除

ファイルの表示

@ -0,0 +1,7 @@
yandex_music.PlaylistRecommendations
=================
.. autoclass:: yandex_music.PlaylistRecommendations
:members:
:undoc-members:
:show-inheritance:

ファイルの表示

@ -10,3 +10,4 @@
yandex_music.playlist.playlist
yandex_music.playlist.case_forms
yandex_music.playlist.playlist_id
yandex_music.playlist.playlist_recommendations

ファイルの表示

@ -1,7 +0,0 @@
yandex_music.PlaylistsRecommendations
=================
.. autoclass:: yandex_music.PlaylistsRecommendations
:members:
:undoc-members:
:show-inheritance:

43
tests/test_playlist_recommendations.py ノーマルファイル
ファイルの表示

@ -0,0 +1,43 @@
import pytest
from yandex_music import PlaylistRecommendations
@pytest.fixture(scope='class')
def playlist_recommendations(track):
return PlaylistRecommendations([track], TestPlaylistRecommendations.batch_id)
class TestPlaylistRecommendations:
batch_id = '1588835234913188-6341822935848536902'
def test_expected_values(self, playlist_recommendations, track):
assert playlist_recommendations.batch_id == self.batch_id
assert playlist_recommendations.tracks == [track]
def test_de_json_none(self, client):
assert PlaylistRecommendations.de_json({}, client) is None
def test_de_json_required(self, client, track):
json_dict = {'tracks': [track.to_dict()]}
playlist_recommendations = PlaylistRecommendations.de_json(json_dict, client)
assert playlist_recommendations.tracks == [track]
def test_de_json_all(self, client, track):
json_dict = {'batch_id': self.batch_id, 'tracks': [track.to_dict()]}
playlist_recommendations = PlaylistRecommendations.de_json(json_dict, client)
assert playlist_recommendations.batch_id == self.batch_id
assert playlist_recommendations.tracks == [track]
def test_equality(self, track):
a = PlaylistRecommendations([track])
b = PlaylistRecommendations([])
c = PlaylistRecommendations([track])
assert a != b
assert hash(a) != hash(b)
assert a is not b
assert a == c

ファイルの表示

@ -1,43 +0,0 @@
import pytest
from yandex_music import PlaylistsRecommendations
@pytest.fixture(scope='class')
def playlists_recommendations(track):
return PlaylistsRecommendations([track], TestPlaylistsRecommendations.batch_id)
class TestPlaylistsRecommendations:
batch_id = '1588835234913188-6341822935848536902'
def test_expected_values(self, playlists_recommendations, track):
assert playlists_recommendations.batch_id == self.batch_id
assert playlists_recommendations.tracks == [track]
def test_de_json_none(self, client):
assert PlaylistsRecommendations.de_json({}, client) is None
def test_de_json_required(self, client, track):
json_dict = {'tracks': [track.to_dict()]}
playlists_recommendations = PlaylistsRecommendations.de_json(json_dict, client)
assert playlists_recommendations.tracks == [track]
def test_de_json_all(self, client, track):
json_dict = {'batch_id': self.batch_id, 'tracks': [track.to_dict()]}
playlists_recommendations = PlaylistsRecommendations.de_json(json_dict, client)
assert playlists_recommendations.batch_id == self.batch_id
assert playlists_recommendations.tracks == [track]
def test_equality(self, track):
a = PlaylistsRecommendations([track])
b = PlaylistsRecommendations([])
c = PlaylistsRecommendations([track])
assert a != b
assert hash(a) != hash(b)
assert a is not b
assert a == c

ファイルの表示

@ -36,7 +36,7 @@ from .playlist.play_counter import PlayCounter
from .playlist.playlist_id import PlaylistId
from .playlist.playlist_absence import PlaylistAbsence
from .playlist.playlist import Playlist
from .playlist.playlists_recommendations import PlaylistsRecommendations
from .playlist.playlist_recommendation import PlaylistRecommendations
from .shot.shot_type import ShotType
from .shot.shot_data import ShotData
@ -120,4 +120,4 @@ __all__ = ['YandexMusicObject', 'Client', 'Account', 'PassportPhone', 'Invocatio
'Dashboard', 'RotorSettings', 'AdParams', 'Restrictions', 'Value', 'Enum', 'DiscreteScale', 'StationResult',
'Sequence', 'StationTracksResult', 'BriefInfo', 'Description', 'PlaylistId', 'Vinyl', 'Supplement', 'Lyrics',
'VideoSupplement', 'ArtistTracks', 'Pager', 'ArtistAlbums', 'PlaylistAbsence', 'Shot', 'ShotEvent',
'ShotType', 'ShotData', 'SimilarTracks', 'UserSettings', 'RenewableRemainder', 'PlaylistsRecommendations']
'ShotType', 'ShotData', 'SimilarTracks', 'UserSettings', 'RenewableRemainder', 'PlaylistRecommendations']

ファイルの表示

@ -6,7 +6,7 @@ from typing import Callable, Dict, List, Optional, Union
from yandex_music import Album, Artist, ArtistAlbums, ArtistTracks, BriefInfo, Dashboard, DownloadInfo, Experiments, \
Feed, Genre, Landing, Like, PermissionAlerts, Playlist, PromoCodeStatus, Search, Settings, ShotEvent, SimilarTracks, \
StationResult, StationTracksResult, Status, Suggestions, Supplement, Track, TracksList, UserSettings, \
YandexMusicObject, PlaylistsRecommendations
YandexMusicObject, PlaylistRecommendations
from yandex_music.exceptions import Captcha, InvalidToken
from yandex_music.utils.difference import Difference
from yandex_music.utils.request import Request
@ -789,7 +789,7 @@ class Client(YandexMusicObject):
result = self._request.get(url, timeout=timeout, *args, **kwargs)
return PlaylistsRecommendations.de_json(result, self)
return PlaylistRecommendations.de_json(result, self)
@log
def users_playlists_create(self, title: str, visibility: str = 'public', user_id: Union[str, int] = None,

ファイルの表示

@ -3,7 +3,8 @@ from typing import TYPE_CHECKING, Optional, List
from yandex_music import YandexMusicObject
if TYPE_CHECKING:
from yandex_music import Client, User, Cover, MadeFor, TrackShort, PlaylistAbsence, PlayCounter
from yandex_music import Client, User, Cover, MadeFor, TrackShort, PlaylistAbsence, PlayCounter,\
PlaylistRecommendations
class Playlist(YandexMusicObject):
@ -168,6 +169,13 @@ class Playlist(YandexMusicObject):
def playlist_id(self) -> str:
return f'{self.owner.uid}:{self.kind}'
def get_recommendations(self, *args, **kwargs) -> Optional['PlaylistRecommendations']:
"""Сокращение для::
client.users_playlists_recommendations(playlist.kind, playlist.owner.uid, *args, **kwargs)
"""
return self.client.users_playlists_recommendations(self.kind, self.owner.uid, *args, **kwargs)
def download_animated_cover(self, filename: str, size: str = '200x200') -> None:
"""Загрузка анимированной обложки.

ファイルの表示

@ -6,7 +6,7 @@ if TYPE_CHECKING:
from yandex_music import Client, Track
class PlaylistsRecommendations(YandexMusicObject):
class PlaylistRecommendations(YandexMusicObject):
"""Класс, представляющий рекомендации для плейлиста.
Attributes:
@ -35,7 +35,7 @@ class PlaylistsRecommendations(YandexMusicObject):
self._id_attrs = (self.batch_id, self.tracks)
@classmethod
def de_json(cls, data: dict, client: 'Client') -> Optional['PlaylistsRecommendations']:
def de_json(cls, data: dict, client: 'Client') -> Optional['PlaylistRecommendations']:
"""Десериализация объекта.
Args:
@ -48,7 +48,7 @@ class PlaylistsRecommendations(YandexMusicObject):
if not data:
return None
data = super(PlaylistsRecommendations, cls).de_json(data, client)
data = super(PlaylistRecommendations, cls).de_json(data, client)
from yandex_music import Track
data['tracks'] = Track.de_list(data.get('tracks'), client)