diff --git a/docs/source/yandex_music.playlist.playlist_recommendations.rst b/docs/source/yandex_music.playlist.playlist_recommendations.rst new file mode 100644 index 0000000..c6f491d --- /dev/null +++ b/docs/source/yandex_music.playlist.playlist_recommendations.rst @@ -0,0 +1,7 @@ +yandex_music.PlaylistRecommendations +================= + +.. autoclass:: yandex_music.PlaylistRecommendations + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/yandex_music.playlist.rst b/docs/source/yandex_music.playlist.rst index 29a8455..eb9c5c6 100644 --- a/docs/source/yandex_music.playlist.rst +++ b/docs/source/yandex_music.playlist.rst @@ -10,3 +10,4 @@ yandex_music.playlist.playlist yandex_music.playlist.case_forms yandex_music.playlist.playlist_id + yandex_music.playlist.playlist_recommendations diff --git a/docs/source/yandex_music.playlists.playlists_recommendations.rst b/docs/source/yandex_music.playlists.playlists_recommendations.rst deleted file mode 100644 index 1b0dd8f..0000000 --- a/docs/source/yandex_music.playlists.playlists_recommendations.rst +++ /dev/null @@ -1,7 +0,0 @@ -yandex_music.PlaylistsRecommendations -================= - -.. autoclass:: yandex_music.PlaylistsRecommendations - :members: - :undoc-members: - :show-inheritance: diff --git a/tests/test_playlist_recommendations.py b/tests/test_playlist_recommendations.py new file mode 100644 index 0000000..292d98f --- /dev/null +++ b/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 diff --git a/tests/test_playlists_recommendations.py b/tests/test_playlists_recommendations.py deleted file mode 100644 index 1763530..0000000 --- a/tests/test_playlists_recommendations.py +++ /dev/null @@ -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 diff --git a/yandex_music/__init__.py b/yandex_music/__init__.py index 5b99b8f..ca41d23 100644 --- a/yandex_music/__init__.py +++ b/yandex_music/__init__.py @@ -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'] diff --git a/yandex_music/client.py b/yandex_music/client.py index 7be9f12..81bbfc5 100644 --- a/yandex_music/client.py +++ b/yandex_music/client.py @@ -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, diff --git a/yandex_music/playlist/playlist.py b/yandex_music/playlist/playlist.py index d55c0d4..6ab62d9 100644 --- a/yandex_music/playlist/playlist.py +++ b/yandex_music/playlist/playlist.py @@ -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: """Загрузка анимированной обложки. diff --git a/yandex_music/playlist/playlists_recommendations.py b/yandex_music/playlist/playlist_recommendation.py similarity index 92% rename from yandex_music/playlist/playlists_recommendations.py rename to yandex_music/playlist/playlist_recommendation.py index 1494350..08b792a 100644 --- a/yandex_music/playlist/playlists_recommendations.py +++ b/yandex_music/playlist/playlist_recommendation.py @@ -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)