From 8501aa89c0433392763e01731c7cd39ab56440e9 Mon Sep 17 00:00:00 2001 From: Gleb Liutsko Date: Thu, 7 May 2020 11:08:05 +0400 Subject: [PATCH 1/6] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=80=D0=B5=D0=BA=D0=BE=D0=BC=D0=B5=D0=BD=D0=B4=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B9=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=BB=D0=B5?= =?UTF-8?q?=D0=B9=D0=BB=D0=B8=D1=81=D1=82=D0=BE=D0=B2=20(#324)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлен класс: PlaylistsRecommendations Добавлен метод: users_playlists_recommendations --- yandex_music/__init__.py | 3 +- yandex_music/client.py | 15 ++++++++- .../playlist/playlists_recommendations.py | 32 +++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 yandex_music/playlist/playlists_recommendations.py diff --git a/yandex_music/__init__.py b/yandex_music/__init__.py index 1416049..5b99b8f 100644 --- a/yandex_music/__init__.py +++ b/yandex_music/__init__.py @@ -36,6 +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 .shot.shot_type import ShotType from .shot.shot_data import ShotData @@ -119,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'] + 'ShotType', 'ShotData', 'SimilarTracks', 'UserSettings', 'RenewableRemainder', 'PlaylistsRecommendations'] diff --git a/yandex_music/client.py b/yandex_music/client.py index 404a81c..30abb4a 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 + YandexMusicObject, PlaylistsRecommendations from yandex_music.exceptions import Captcha, InvalidToken from yandex_music.utils.difference import Difference from yandex_music.utils.request import Request @@ -764,6 +764,19 @@ class Client(YandexMusicObject): return Playlist.de_json(result, self) + @log + def users_playlists_recommendations(self, kind: Union[List[Union[str, int]], str, int], + user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, + **kwargs): + if user_id is None and self.me is not None: + user_id = self.me.account.uid + + url = f'{self.base_url}/users/{user_id}/playlists/{kind}/recommendations' + + result = self._request.get(url, timeout=timeout, *args, **kwargs) + + return PlaylistsRecommendations.de_json(result, self) + @log def users_playlists_create(self, title: str, visibility: str = 'public', user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]: diff --git a/yandex_music/playlist/playlists_recommendations.py b/yandex_music/playlist/playlists_recommendations.py new file mode 100644 index 0000000..f41d948 --- /dev/null +++ b/yandex_music/playlist/playlists_recommendations.py @@ -0,0 +1,32 @@ +from typing import TYPE_CHECKING, Optional, List + +from yandex_music import YandexMusicObject + +if TYPE_CHECKING: + from yandex_music import Client, Track + + +class PlaylistsRecommendations(YandexMusicObject): + def __init__(self, + tracks: List['Track'], + batch_id: str = None, + client: Optional['Client'] = None, + **kwargs) -> None: + super().handle_unknown_kwargs(self, **kwargs) + + self.batchId = batch_id + self.tracks = tracks + + self.client = client + self._id_attrs = (self.batchId, self.tracks) + + @classmethod + def de_json(cls, data: dict, client: 'Client') -> Optional['PlaylistsRecommendations']: + if not data: + return None + + data = super(PlaylistsRecommendations, cls).de_json(data, client) + from yandex_music import Track + data['tracks'] = Track.de_list(data.get('tracks'), client) + + return cls(client=client, **data) From 67398fd041e416187d367c313eb7bd28a57abb74 Mon Sep 17 00:00:00 2001 From: Gleb Liutsko Date: Thu, 7 May 2020 11:21:35 +0400 Subject: [PATCH 2/6] =?UTF-8?q?=D0=94=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BA=20=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D1=81=D1=81=D1=83=20PlaylistsRecommendations=20=D0=B8=20=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=B4=D1=83=20users=5Fplaylists=5Frecommenda?= =?UTF-8?q?tions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ic.playlists.playlists_recommendations.rst | 7 ++++++ yandex_music/client.py | 20 ++++++++++++--- .../playlist/playlists_recommendations.py | 25 ++++++++++++++++++- 3 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 docs/source/yandex_music.playlists.playlists_recommendations.rst diff --git a/docs/source/yandex_music.playlists.playlists_recommendations.rst b/docs/source/yandex_music.playlists.playlists_recommendations.rst new file mode 100644 index 0000000..1b0dd8f --- /dev/null +++ b/docs/source/yandex_music.playlists.playlists_recommendations.rst @@ -0,0 +1,7 @@ +yandex_music.PlaylistsRecommendations +================= + +.. autoclass:: yandex_music.PlaylistsRecommendations + :members: + :undoc-members: + :show-inheritance: diff --git a/yandex_music/client.py b/yandex_music/client.py index 30abb4a..7be9f12 100644 --- a/yandex_music/client.py +++ b/yandex_music/client.py @@ -765,9 +765,23 @@ class Client(YandexMusicObject): return Playlist.de_json(result, self) @log - def users_playlists_recommendations(self, kind: Union[List[Union[str, int]], str, int], - user_id: Union[str, int] = None, timeout: Union[int, float] = None, *args, - **kwargs): + def users_playlists_recommendations(self, kind: Union[str, int], user_id: Union[str, int] = None, + timeout: Union[int, float] = None, *args, **kwargs): + """Получение рекомендаций для плейлиста. + + Args: + kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста. + user_id (:obj:`str` | :obj:`int`): Уникальный идентификатор пользователя владеющим плейлистом. + timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания + ответа от сервера вместо указанного при создании пула. + **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). + + Returns: + :obj:`yandex_music.PlaylistsRecommendations` | :obj:`None`: Рекомендации для плейлиста или :obj:`None`. + + Raises: + :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. + """ if user_id is None and self.me is not None: user_id = self.me.account.uid diff --git a/yandex_music/playlist/playlists_recommendations.py b/yandex_music/playlist/playlists_recommendations.py index f41d948..8a4c15a 100644 --- a/yandex_music/playlist/playlists_recommendations.py +++ b/yandex_music/playlist/playlists_recommendations.py @@ -7,9 +7,23 @@ if TYPE_CHECKING: class PlaylistsRecommendations(YandexMusicObject): + """Класс, представляющий рекомендации для плейлиста. + + Attributes: + tracks (:obj:`list` из :obj:`yandex_music.Track`): Список рекомендованных треков. + batch_id (:obj:`str`): TODO. + client (:obj:`yandex_music.Client`): Клиент Yandex Music. + + Args: + tracks (:obj:`list` из :obj:`yandex_music.Track`): Список рекомендованных треков. + batch_id (:obj:`str`, optional): TODO. + client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music. + **kwargs: Произвольные ключевые аргументы полученные от API. + """ + def __init__(self, tracks: List['Track'], - batch_id: str = None, + batch_id: Optional[str] = None, client: Optional['Client'] = None, **kwargs) -> None: super().handle_unknown_kwargs(self, **kwargs) @@ -22,6 +36,15 @@ class PlaylistsRecommendations(YandexMusicObject): @classmethod def de_json(cls, data: dict, client: 'Client') -> Optional['PlaylistsRecommendations']: + """Десериализация объекта. + + Args: + data (:obj:`dict`): Поля и значения десериализуемого объекта. + client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music. + + Returns: + :obj:`yandex_music.PlaylistsRecommendations`: Рекомендации для плейлиста. + """ if not data: return None From 8ecfef6085452ae26bf9e48e0ded6ff0d80c6788 Mon Sep 17 00:00:00 2001 From: Gleb Liutsko Date: Thu, 7 May 2020 11:31:58 +0400 Subject: [PATCH 3/6] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0=20PlaylistsRecommendations?= =?UTF-8?q?=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0=D1=82=D0=BA=D0=B0=20=D0=B2=20?= =?UTF-8?q?=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B5=20PlaylistsRecommendations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_playlists_recommendations.py | 43 +++++++++++++++++++ .../playlist/playlists_recommendations.py | 4 +- 2 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 tests/test_playlists_recommendations.py diff --git a/tests/test_playlists_recommendations.py b/tests/test_playlists_recommendations.py new file mode 100644 index 0000000..1763530 --- /dev/null +++ b/tests/test_playlists_recommendations.py @@ -0,0 +1,43 @@ +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/playlist/playlists_recommendations.py b/yandex_music/playlist/playlists_recommendations.py index 8a4c15a..1494350 100644 --- a/yandex_music/playlist/playlists_recommendations.py +++ b/yandex_music/playlist/playlists_recommendations.py @@ -28,11 +28,11 @@ class PlaylistsRecommendations(YandexMusicObject): **kwargs) -> None: super().handle_unknown_kwargs(self, **kwargs) - self.batchId = batch_id + self.batch_id = batch_id self.tracks = tracks self.client = client - self._id_attrs = (self.batchId, self.tracks) + self._id_attrs = (self.batch_id, self.tracks) @classmethod def de_json(cls, data: dict, client: 'Client') -> Optional['PlaylistsRecommendations']: From de412a4a9fe2c4574d17a48f5e74dab30f1c5494 Mon Sep 17 00:00:00 2001 From: Gleb Liutsko Date: Thu, 7 May 2020 12:09:12 +0400 Subject: [PATCH 4/6] PlaylistsRecommendations -> PlaylistRecommendations --- ...usic.playlist.playlist_recommendations.rst | 7 +++ docs/source/yandex_music.playlist.rst | 1 + ...ic.playlists.playlists_recommendations.rst | 7 --- tests/test_playlist_recommendations.py | 43 +++++++++++++++++++ tests/test_playlists_recommendations.py | 43 ------------------- yandex_music/__init__.py | 4 +- yandex_music/client.py | 4 +- yandex_music/playlist/playlist.py | 10 ++++- ...ndations.py => playlist_recommendation.py} | 6 +-- 9 files changed, 67 insertions(+), 58 deletions(-) create mode 100644 docs/source/yandex_music.playlist.playlist_recommendations.rst delete mode 100644 docs/source/yandex_music.playlists.playlists_recommendations.rst create mode 100644 tests/test_playlist_recommendations.py delete mode 100644 tests/test_playlists_recommendations.py rename yandex_music/playlist/{playlists_recommendations.py => playlist_recommendation.py} (92%) 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) From ad326a189d25e52224859b8ecf1f2f4c0c0c0ba1 Mon Sep 17 00:00:00 2001 From: Gleb Liutsko Date: Thu, 7 May 2020 12:46:56 +0400 Subject: [PATCH 5/6] =?UTF-8?q?=D0=A1=D0=BE=D0=BA=D1=80=D0=B0=D1=89=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=BB=D1=8F=20Client.users=5Fplayli?= =?UTF-8?q?sts=5Frecommendations=20Playlist.get=5Frecommendations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yandex_music/client.py | 2 ++ yandex_music/playlist/playlist.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/yandex_music/client.py b/yandex_music/client.py index 81bbfc5..bcf9dc9 100644 --- a/yandex_music/client.py +++ b/yandex_music/client.py @@ -2124,6 +2124,8 @@ class Client(YandexMusicObject): searchSuggest = search_suggest #: Псевдоним для :attr:`users_playlists` usersPlaylists = users_playlists + #: Псевдоним для :attr:`users_playlists_recommendations` + usersPlaylistsRecommendations = users_playlists_recommendations #: Псевдоним для :attr:`users_playlists_create` usersPlaylistsCreate = users_playlists_create #: Псевдоним для :attr:`users_playlists_delete` diff --git a/yandex_music/playlist/playlist.py b/yandex_music/playlist/playlist.py index 6ab62d9..fcf5401 100644 --- a/yandex_music/playlist/playlist.py +++ b/yandex_music/playlist/playlist.py @@ -271,6 +271,8 @@ class Playlist(YandexMusicObject): isMine = is_mine #: Псевдоним для :attr:`playlist_id` playlistId = playlist_id + #: Псевдоним для :attr:`get_recommendations` + getRecommendations = get_recommendations #: Псевдоним для :attr:`download_animated_cover` downloadAnimatedCover = download_animated_cover #: Псевдоним для :attr:`download_og_image` From 2f7aca0d73f7ae0a3dfdb3c1da97b293225421d2 Mon Sep 17 00:00:00 2001 From: Il`ya Semyonov Date: Thu, 14 May 2020 23:36:47 +0300 Subject: [PATCH 6/6] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B2=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yandex_music.playlist.playlist_recommendations.rst | 2 +- yandex_music/client.py | 8 +++++++- yandex_music/playlist/playlist_recommendation.py | 6 +++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/docs/source/yandex_music.playlist.playlist_recommendations.rst b/docs/source/yandex_music.playlist.playlist_recommendations.rst index c6f491d..60f499d 100644 --- a/docs/source/yandex_music.playlist.playlist_recommendations.rst +++ b/docs/source/yandex_music.playlist.playlist_recommendations.rst @@ -1,5 +1,5 @@ yandex_music.PlaylistRecommendations -================= +==================================== .. autoclass:: yandex_music.PlaylistRecommendations :members: diff --git a/yandex_music/client.py b/yandex_music/client.py index bcf9dc9..915dc1d 100644 --- a/yandex_music/client.py +++ b/yandex_music/client.py @@ -777,7 +777,7 @@ class Client(YandexMusicObject): **kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос). Returns: - :obj:`yandex_music.PlaylistsRecommendations` | :obj:`None`: Рекомендации для плейлиста или :obj:`None`. + :obj:`yandex_music.PlaylistRecommendations` | :obj:`None`: Рекомендации для плейлиста или :obj:`None`. Raises: :class:`yandex_music.exceptions.YandexMusicError`: Базовое исключение библиотеки. @@ -2102,6 +2102,10 @@ class Client(YandexMusicObject): generateTokenByUsernameAndPassword = generate_token_by_username_and_password #: Псевдоним для :attr:`account_status` accountStatus = account_status + #: Псевдоним для :attr:`account_settings` + accountSettings = account_settings + #: Псевдоним для :attr:`account_settings_set` + accountSettingsSet = account_settings_set #: Псевдоним для :attr:`permission_alerts` permissionAlerts = permission_alerts #: Псевдоним для :attr:`account_experiments` @@ -2122,6 +2126,8 @@ class Client(YandexMusicObject): albumsWithTracks = albums_with_tracks #: Псевдоним для :attr:`search_suggest` searchSuggest = search_suggest + #: Псевдоним для :attr:`users_settings` + usersSettings = users_settings #: Псевдоним для :attr:`users_playlists` usersPlaylists = users_playlists #: Псевдоним для :attr:`users_playlists_recommendations` diff --git a/yandex_music/playlist/playlist_recommendation.py b/yandex_music/playlist/playlist_recommendation.py index 08b792a..e6dffc7 100644 --- a/yandex_music/playlist/playlist_recommendation.py +++ b/yandex_music/playlist/playlist_recommendation.py @@ -11,12 +11,12 @@ class PlaylistRecommendations(YandexMusicObject): Attributes: tracks (:obj:`list` из :obj:`yandex_music.Track`): Список рекомендованных треков. - batch_id (:obj:`str`): TODO. + batch_id (:obj:`str`): Уникальный идентификатор партии треков. client (:obj:`yandex_music.Client`): Клиент Yandex Music. Args: tracks (:obj:`list` из :obj:`yandex_music.Track`): Список рекомендованных треков. - batch_id (:obj:`str`, optional): TODO. + batch_id (:obj:`str`, optional): Уникальный идентификатор партии треков. client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music. **kwargs: Произвольные ключевые аргументы полученные от API. """ @@ -43,7 +43,7 @@ class PlaylistRecommendations(YandexMusicObject): client (:obj:`yandex_music.Client`, optional): Клиент Yandex Music. Returns: - :obj:`yandex_music.PlaylistsRecommendations`: Рекомендации для плейлиста. + :obj:`yandex_music.PlaylistRecommendations`: Рекомендации для плейлиста. """ if not data: return None