Merge pull request #199 from MarshalX/issue-195

Добавлены настройки пользователя и их изменение
このコミットが含まれているのは:
Il'ya 2020-01-26 03:23:15 +03:00 committed by GitHub
コミット 8450d5937a
この署名に対応する既知のキーがデータベースに存在しません
GPGキーID: 4AEE18F83AFDEB23
44個のファイルの変更522行の追加122行の削除

15
docs/source/yandex_music.account.rst ノーマルファイル
ファイルの表示

@ -0,0 +1,15 @@
Пакет yandex_music.account
==========================
.. toctree::
yandex_music.account.status
yandex_music.account.account
yandex_music.account.passport_phone
yandex_music.account.plus
yandex_music.account.permissions
yandex_music.account.subscription
yandex_music.account.auto_renewable
yandex_music.account.product
yandex_music.account.price
yandex_music.account.user_settings

ファイルの表示

@ -0,0 +1,6 @@
yandex_music.UserSettings
=========================
.. autoclass:: yandex_music.UserSettings
:members:
:show-inheritance:

ファイルの表示

@ -8,7 +8,7 @@
yandex_music.utils
yandex_music.genre
yandex_music.track
yandex_music.status
yandex_music.account
yandex_music.likes
yandex_music.album
yandex_music.search

ファイルの表示

@ -1,14 +0,0 @@
Пакет yandex_music.status
=========================
.. toctree::
yandex_music.status.status
yandex_music.status.account
yandex_music.status.passport_phone
yandex_music.status.plus
yandex_music.status.permissions
yandex_music.status.subscription
yandex_music.status.auto_renewable
yandex_music.status.product
yandex_music.status.price

132
tests/test_user_settings.py ノーマルファイル
ファイルの表示

@ -0,0 +1,132 @@
import pytest
from yandex_music import UserSettings
@pytest.fixture(scope='class')
def user_settings(shot):
return UserSettings(TestUserSettings.uid, TestUserSettings.last_fm_scrobbling_enabled,
TestUserSettings.shuffle_enabled, TestUserSettings.volume_percents, TestUserSettings.modified,
TestUserSettings.facebook_scrobbling_enabled, TestUserSettings.add_new_track_on_playlist_top,
TestUserSettings.user_music_visibility, TestUserSettings.user_social_visibility,
TestUserSettings.rbt_disabled, TestUserSettings.theme, TestUserSettings.promos_disabled,
TestUserSettings.auto_play_radio, TestUserSettings.ads_disabled, TestUserSettings.disk_enabled,
TestUserSettings.show_disk_tracks_in_library)
class TestUserSettings:
uid = 1130000002804400
last_fm_scrobbling_enabled = False
shuffle_enabled = False
volume_percents = 70
modified = '2020-01-25T22:52:21+00:00'
facebook_scrobbling_enabled = False
add_new_track_on_playlist_top = False
user_music_visibility = 'public'
user_social_visibility = 'public'
rbt_disabled = False
theme = 'black'
promos_disabled = True
auto_play_radio = True
ads_disabled = None
disk_enabled = False
show_disk_tracks_in_library = False
def test_expected_values(self, user_settings):
assert user_settings.uid == self.uid
assert user_settings.last_fm_scrobbling_enabled == self.last_fm_scrobbling_enabled
assert user_settings.shuffle_enabled == self.shuffle_enabled
assert user_settings.volume_percents == self.volume_percents
assert user_settings.modified == self.modified
assert user_settings.facebook_scrobbling_enabled == self.facebook_scrobbling_enabled
assert user_settings.add_new_track_on_playlist_top == self.add_new_track_on_playlist_top
assert user_settings.user_music_visibility == self.user_music_visibility
assert user_settings.user_social_visibility == self.user_social_visibility
assert user_settings.rbt_disabled == self.rbt_disabled
assert user_settings.theme == self.theme
assert user_settings.promos_disabled == self.promos_disabled
assert user_settings.auto_play_radio == self.auto_play_radio
assert user_settings.ads_disabled == self.ads_disabled
assert user_settings.disk_enabled == self.disk_enabled
assert user_settings.show_disk_tracks_in_library == self.show_disk_tracks_in_library
def test_de_json_none(self, client):
assert UserSettings.de_json({}, client) is None
def test_de_json_required(self, client):
json_dict = {'uid': self.uid, 'last_fm_scrobbling_enabled': self.last_fm_scrobbling_enabled,
'shuffle_enabled': self.shuffle_enabled, 'volume_percents': self.volume_percents,
'modified': self.modified, 'facebook_scrobbling_enabled': self.facebook_scrobbling_enabled,
'add_new_track_on_playlist_top': self.add_new_track_on_playlist_top,
'user_music_visibility': self.user_music_visibility,
'user_social_visibility': self.user_social_visibility, 'rbt_disabled': self.rbt_disabled,
'theme': self.theme, 'promos_disabled': self.promos_disabled,
'auto_play_radio': self.auto_play_radio}
user_settings = UserSettings.de_json(json_dict, client)
assert user_settings.uid == self.uid
assert user_settings.last_fm_scrobbling_enabled == self.last_fm_scrobbling_enabled
assert user_settings.shuffle_enabled == self.shuffle_enabled
assert user_settings.volume_percents == self.volume_percents
assert user_settings.modified == self.modified
assert user_settings.facebook_scrobbling_enabled == self.facebook_scrobbling_enabled
assert user_settings.add_new_track_on_playlist_top == self.add_new_track_on_playlist_top
assert user_settings.user_music_visibility == self.user_music_visibility
assert user_settings.user_social_visibility == self.user_social_visibility
assert user_settings.rbt_disabled == self.rbt_disabled
assert user_settings.theme == self.theme
assert user_settings.promos_disabled == self.promos_disabled
assert user_settings.auto_play_radio == self.auto_play_radio
def test_de_json_all(self, client):
json_dict = {'uid': self.uid, 'last_fm_scrobbling_enabled': self.last_fm_scrobbling_enabled,
'shuffle_enabled': self.shuffle_enabled, 'volume_percents': self.volume_percents,
'modified': self.modified, 'facebook_scrobbling_enabled': self.facebook_scrobbling_enabled,
'add_new_track_on_playlist_top': self.add_new_track_on_playlist_top,
'user_music_visibility': self.user_music_visibility,
'user_social_visibility': self.user_social_visibility, 'rbt_disabled': self.rbt_disabled,
'theme': self.theme, 'promos_disabled': self.promos_disabled,
'auto_play_radio': self.auto_play_radio, 'ads_disabled': self.ads_disabled,
'disk_enabled': self.disk_enabled, 'show_disk_tracks_in_library': self.show_disk_tracks_in_library}
user_settings = UserSettings.de_json(json_dict, client)
assert user_settings.uid == self.uid
assert user_settings.last_fm_scrobbling_enabled == self.last_fm_scrobbling_enabled
assert user_settings.shuffle_enabled == self.shuffle_enabled
assert user_settings.volume_percents == self.volume_percents
assert user_settings.modified == self.modified
assert user_settings.facebook_scrobbling_enabled == self.facebook_scrobbling_enabled
assert user_settings.add_new_track_on_playlist_top == self.add_new_track_on_playlist_top
assert user_settings.user_music_visibility == self.user_music_visibility
assert user_settings.user_social_visibility == self.user_social_visibility
assert user_settings.rbt_disabled == self.rbt_disabled
assert user_settings.theme == self.theme
assert user_settings.promos_disabled == self.promos_disabled
assert user_settings.auto_play_radio == self.auto_play_radio
assert user_settings.ads_disabled == self.ads_disabled
assert user_settings.disk_enabled == self.disk_enabled
assert user_settings.show_disk_tracks_in_library == self.show_disk_tracks_in_library
def test_equality(self):
a = UserSettings(self.uid, self.last_fm_scrobbling_enabled, self.shuffle_enabled, self.volume_percents,
self.modified, self.facebook_scrobbling_enabled, self.add_new_track_on_playlist_top,
self.user_music_visibility, self.user_social_visibility, self.rbt_disabled, self.theme,
self.promos_disabled, self.auto_play_radio, self.ads_disabled, self.disk_enabled,
self.show_disk_tracks_in_library)
b = UserSettings(self.uid, self.last_fm_scrobbling_enabled, self.shuffle_enabled, self.volume_percents,
self.modified, self.facebook_scrobbling_enabled, self.add_new_track_on_playlist_top,
'private', self.user_social_visibility, self.rbt_disabled, 'white',
self.promos_disabled, self.auto_play_radio, self.ads_disabled, True,
self.show_disk_tracks_in_library)
c = UserSettings(self.uid, self.last_fm_scrobbling_enabled, self.shuffle_enabled, self.volume_percents,
self.modified, self.facebook_scrobbling_enabled, self.add_new_track_on_playlist_top,
self.user_music_visibility, self.user_social_visibility, self.rbt_disabled, self.theme,
self.promos_disabled, self.auto_play_radio, self.ads_disabled, self.disk_enabled,
self.show_disk_tracks_in_library)
assert a != b != c
assert hash(a) != hash(b) != hash(c)
assert a is not b is not c
assert a == c
assert hash(a) == hash(c)

ファイルの表示

@ -4,15 +4,16 @@ from .settings import Settings
from .permission_alerts import PermissionAlerts
from .experiments import Experiments
from .status.status import Status
from .status.account import Account
from .status.plus import Plus
from .status.subscription import Subscription
from .status.price import Price
from .status.product import Product
from .status.auto_renewable import AutoRenewable
from .status.passport_phone import PassportPhone
from .status.permissions import Permissions
from .account.status import Status
from .account.account import Account
from .account.plus import Plus
from .account.user_settings import UserSettings
from .account.subscription import Subscription
from .account.price import Price
from .account.product import Product
from .account.auto_renewable import AutoRenewable
from .account.passport_phone import PassportPhone
from .account.permissions import Permissions
from .album.album import Album
from .album.label import Label
@ -120,4 +121,4 @@ __all__ = ['YandexMusicObject', 'Client', 'Account', 'PassportPhone', 'Invocatio
'Icon', 'Images', 'Id', 'Station', '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']
'PlaylistAbsence', 'Shot', 'ShotEvent', 'ShotType', 'ShotData', 'SimilarTracks', 'UserSettings']

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class Account(YandexMusicObject):
"""Класс предоставляющий основную информацию об аккаунте пользователя.
"""Класс, представляющий основную информацию об аккаунте пользователя.
Attributes:
now (:obj:`str`): Текущая дата и время.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class AutoRenewable(YandexMusicObject):
"""Класс представляющий автопродление подписки.
"""Класс, представляющий автопродление подписки.
Attributes:
expires (:obj:`str`): Дата истечения подписки.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class PassportPhone(YandexMusicObject):
"""Класс представляющий номер телефона пользователя.
"""Класс, представляющий номер телефона пользователя.
Attributes:
phone (:obj:`str`): Номер телефона.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class Permissions(YandexMusicObject):
"""Класс предоставляющий информацию о правах пользователя, их изначальных значениях и даты окончания.
"""Класс, представляющий информацию о правах пользователя, их изначальных значениях и даты окончания.
Attributes:
until (:obj:`str`): Дата окончания прав.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class Plus(YandexMusicObject):
"""Класс представляющий Plus подписку.
"""Класс, представляющий Plus подписку.
Attributes:
has_plus (:obj:`bool`): Наличие.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class Price(YandexMusicObject):
"""Класс представляющий цену.
"""Класс, представляющий цену.
Attributes:
amount (:obj:`int`): Количество единиц.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class Product(YandexMusicObject):
"""Класс представляющий продаваемый продукт.
"""Класс, представляющий продаваемый продукт.
Attributes:
product_id (:obj:`str`): Уникальный идентификатор.

ファイルの表示

@ -7,19 +7,19 @@ from yandex_music import YandexMusicObject
class Status(YandexMusicObject):
"""Класс представляющий подробную информацию об аккаунте пользователя.
"""Класс, представляющий подробную информацию об аккаунте пользователя.
Attributes:
account (:obj:`yandex_music.Account`): Объект класса :class:`yandex_music.Account` предоставляющий основную
account (:obj:`yandex_music.Account`): Объект класса :class:`yandex_music.Account` представляющий основную
информацию об аккаунте.
permissions (:obj:`yandex_music.Permissions`): Объект класса :class:`yandex_music.Permissions` предоставляющий
permissions (:obj:`yandex_music.Permissions`): Объект класса :class:`yandex_music.Permissions` представляющий
информацию о правах пользователя.
subscription (:obj:`yandex_music.Subscription`): Объект класса :class:`yandex_music.Subscription` предоставляющий
subscription (:obj:`yandex_music.Subscription`): Объект класса :class:`yandex_music.Subscription` представляющий
информацию о подписках
cache_limit (:obj:`int`): Максимальное количество загруженных треков.
subeditor (:obj:`bool`): Наличие статуса модератора проверки корректности информации.
subeditor_level (:obj:`int`): Уровень статуса модератора.
plus (:obj:`yandex_music.Plus`): Объект класса :class:`yandex_music.Plus` предоставляющий информацию о Plus
plus (:obj:`yandex_music.Plus`): Объект класса :class:`yandex_music.Plus` представляющий информацию о Plus
подписке.
default_email (:obj:`str`): Основной e-mail адрес аккаунта.
skips_per_hour (:obj:`int`): Количество переключение треков на радио в час.
@ -29,16 +29,16 @@ class Status(YandexMusicObject):
Music.
Args:
account (:obj:`yandex_music.Account`): Объект класса :class:`yandex_music.Account` предоставляющий основную
account (:obj:`yandex_music.Account`): Объект класса :class:`yandex_music.Account` представляющий основную
информацию об аккаунте.
permissions (:obj:`yandex_music.Permissions`): Объект класса :class:`yandex_music.Permissions` предоставляющий
permissions (:obj:`yandex_music.Permissions`): Объект класса :class:`yandex_music.Permissions` представляющий
информацию о правах пользователя.
subscription (:obj:`yandex_music.Subscription`): Объект класса :class:`yandex_music.Subscription` предоставляющий
subscription (:obj:`yandex_music.Subscription`): Объект класса :class:`yandex_music.Subscription` представляющий
информацию о подписках
cache_limit (:obj:`int`, optional): Максимальное количество загруженных треков.
subeditor (:obj:`bool`, optional): Наличие статуса модератора проверки корректности информации.
subeditor_level (:obj:`int`, optional): Уровень статуса модератора.
plus (:obj:`yandex_music.Plus`, optional): Объект класса :class:`yandex_music.Plus` предоставляющий информацию о
plus (:obj:`yandex_music.Plus`, optional): Объект класса :class:`yandex_music.Plus` представляющий информацию о
Plus подписке.
default_email (:obj:`str`, optional): Основной e-mail адрес аккаунта.
skips_per_hour (:obj:`int`, optional): Количество переключение треков на радио в час.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class Subscription(YandexMusicObject):
"""Класс предоставляющий информацию о подписках пользователя.
"""Класс, представляющий информацию о подписках пользователя.
Attributes:
auto_renewable (:obj:`list` из :obj:`yandex_music.AutoRenewable`): Список объектов класса

125
yandex_music/account/user_settings.py ノーマルファイル
ファイルの表示

@ -0,0 +1,125 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject
class UserSettings(YandexMusicObject):
"""Класс, представляющий настройки пользователя.
Note:
Доступные значения для поля `theme`: `white`, `black`.
Доступные значения для полей `user_music_visibility` и `user_social_visibility`: `private`, `public`.
Notes:
`promos_disabled`, `ads_disabled`, `rbt_disabled` устарели и не работают.
`last_fm_scrobbling_enabled`, `facebook_scrobbling_enabled` выглядят устаревшими.
Attributes:
uid (:obj:`int`): Уникальный идентификатор пользователя.
last_fm_scrobbling_enabled (:obj:`bool`): Скробблинг lastfm.
shuffle_enabled (:obj:`bool`): Переключать треки в случайном порядке.
volume_percents (:obj:`int`): Громкость звука в процентах.
modified (:obj:`str`): Дата изменения настроек.
facebook_scrobbling_enabled (:obj:`bool`): Скробблинг facebook.
add_new_track_on_playlist_top (:obj:`bool`): Добавлять новые треки в начало плейлиста.
user_music_visibility (:obj:`str`): Публичный доступ к моей фонотеке.
user_social_visibility (:obj:`str`): Показывать соцсети на странице.
rbt_disabled (:obj:`bool`): TODO (неиспользуемая фича).
theme (:obj:`str`): Тема оформления.
promos_disabled (:obj:`bool`): Не показывать рекламируемый контент).
auto_play_radio (:obj:`bool`): Бесконечный поток музыки.
ads_disabled (:obj:`bool`): Не показывать рекламу.
disk_enabled (:obj:`bool`): TODO.
show_disk_tracks_in_library (:obj:`bool`): Показывать локальные треки в библиотеке.
client (:obj:`yandex_music.Client`): Объект класса :class:`yandex_music.Client` представляющий клиент Yandex
Music.
Args:
uid (:obj:`int`): Уникальный идентификатор пользователя.
last_fm_scrobbling_enabled (:obj:`bool`): Скробблинг lastfm.
shuffle_enabled (:obj:`bool`): Переключать треки в случайном порядке.
volume_percents (:obj:`int`): Громкость звука в процентах.
modified (:obj:`str`): Дата изменения настроек.
facebook_scrobbling_enabled (:obj:`bool`): Скробблинг facebook.
add_new_track_on_playlist_top (:obj:`bool`): Добавлять новые треки в начало плейлиста.
user_music_visibility (:obj:`str`): Публичный доступ к моей фонотеке.
user_social_visibility (:obj:`str`): Показывать соцсети на странице.
rbt_disabled (:obj:`bool`): TODO (неиспользуемая фича).
theme (:obj:`str`): Тема оформления.
promos_disabled (:obj:`bool`): Не показывать рекламируемый контент).
auto_play_radio (:obj:`bool`): Бесконечный поток музыки.
ads_disabled (:obj:`bool`, optional): Не показывать рекламу.
disk_enabled (:obj:`bool`, optional): TODO.
show_disk_tracks_in_library (:obj:`bool`, optional): Показывать локальные треки в библиотеке.
client (:obj:`yandex_music.Client`, optional): Объект класса :class:`yandex_music.Client` представляющий клиент
Yandex Music.
**kwargs: Произвольные ключевые аргументы полученные от API.
"""
def __init__(self,
uid: int,
last_fm_scrobbling_enabled: bool,
shuffle_enabled: bool,
volume_percents: int,
modified: str,
facebook_scrobbling_enabled: bool,
add_new_track_on_playlist_top: bool,
user_music_visibility: str,
user_social_visibility: str,
rbt_disabled: bool,
theme: str,
promos_disabled: bool,
auto_play_radio: bool,
ads_disabled: Optional[bool] = None,
disk_enabled: Optional[bool] = None,
show_disk_tracks_in_library: Optional[bool] = None,
client: Optional['Client'] = None,
**kwargs) -> None:
self.uid = uid
self.last_fm_scrobbling_enabled = last_fm_scrobbling_enabled
self.shuffle_enabled = shuffle_enabled
self.volume_percents = volume_percents
self.modified = modified
self.facebook_scrobbling_enabled = facebook_scrobbling_enabled
self.add_new_track_on_playlist_top = add_new_track_on_playlist_top
self.user_music_visibility = user_music_visibility
self.user_social_visibility = user_social_visibility
self.rbt_disabled = rbt_disabled
self.theme = theme
self.promos_disabled = promos_disabled
self.auto_play_radio = auto_play_radio
self.ads_disabled = ads_disabled
self.disk_enabled = disk_enabled
self.show_disk_tracks_in_library = show_disk_tracks_in_library
self.client = client
self._id_attrs = (self.uid, self.last_fm_scrobbling_enabled, self.shuffle_enabled, self.volume_percents,
self.modified, self.facebook_scrobbling_enabled, self.add_new_track_on_playlist_top,
self.user_music_visibility, self.user_social_visibility, self.rbt_disabled, self.theme,
self.promos_disabled, self.auto_play_radio, self.ads_disabled, self.disk_enabled,
self.show_disk_tracks_in_library)
@classmethod
def de_json(cls, data: dict, client: 'Client') -> Optional['UserSettings']:
"""Десериализация объекта.
Args:
data (:obj:`dict`): Поля и значения десериализуемого объекта.
client (:obj:`yandex_music.Client`): Объект класса :class:`yandex_music.Client` представляющий клиент Yandex
Music.
Returns:
:obj:`yandex_music.UserSettings`: Объект класса :class:`yandex_music.UserSettings`.
"""
if not data:
return None
data = super(UserSettings, cls).de_json(data, client)
return cls(client=client, **data)

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class ArtistAlbums(YandexMusicObject):
"""Класс представляющий страницу списка альбомов артиста.
"""Класс, представляющий страницу списка альбомов артиста.
Attributes:
albums (:obj:`list` из :obj:`yandex_music.Album`): Список альбомов артиста.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class ArtistTracks(YandexMusicObject):
"""Класс представляющий страницу списка треков артиста.
"""Класс, представляющий страницу списка треков артиста.
Attributes:
tracks (:obj:`list` из :obj:`yandex_music.Track`): Список треков артиста.

ファイルの表示

@ -1,12 +1,13 @@
import logging
import functools
from datetime import datetime
from typing import Callable, Union, List, Optional
from typing import Callable, Union, List, Optional, Dict
from yandex_music import YandexMusicObject, Status, Settings, PermissionAlerts, Experiments, Artist, Album, Playlist, \
TracksList, Track, AlbumsLikes, ArtistsLikes, PlaylistsLikes, Feed, PromoCodeStatus, DownloadInfo, Search, \
Suggestions, Landing, Genre, Dashboard, StationResult, StationTracksResult, BriefInfo, Supplement, ArtistTracks, \
ArtistAlbums, ShotEvent, SimilarTracks
ArtistAlbums, ShotEvent, SimilarTracks, UserSettings
from yandex_music.utils.request import Request
from yandex_music.utils.difference import Difference
from yandex_music.exceptions import InvalidToken, Captcha
@ -48,17 +49,18 @@ def log(method):
class Client(YandexMusicObject):
"""Класс представляющий клиент Yandex Music.
"""Класс, представляющий клиент Yandex Music.
При `fetch_account_status = False` многие сокращения перестанут работать в связи с тем, что неоткуда будет взять
uid аккаунта для отправки запроса. Так же в большинстве методов придётся передавать uid явно.
Note:
При `fetch_account_status = False` многие сокращения перестанут работать в связи с тем, что неоткуда будет взять
uid аккаунта для отправки запроса. Так же в большинстве методов придётся передавать `uid` явно.
Attributes:
logger (:obj:`logging.Logger`): Объект логера.
token (:obj:`str`): Уникальный ключ для аутентификации.
base_url (:obj:`str`): Ссылка на API Yandex Music.
oauth_url (:obj:`str`): Ссылка на OAuth Yandex Music.
me (:obj:`yandex_music.Status`): Объект класса :class:`yandex_music.Status` предоставляющего основную
me (:obj:`yandex_music.Status`): Объект класса :class:`yandex_music.Status` представляющего основную
информацию об аккаунте.
Args:
@ -137,7 +139,8 @@ class Client(YandexMusicObject):
def from_token(cls, token: str, *args, **kwargs) -> 'Client':
"""Инициализция клиента по токену.
Ничем не отличается от Client(token). Так исторически сложилось.
Note:
Ничем не отличается от `Client(token)`. Так исторически сложилось.
Args:
token (:obj:`str`, optional): Уникальный ключ для аутентификации.
@ -226,7 +229,7 @@ class Client(YandexMusicObject):
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
Returns:
:obj:`yandex_music.Status`: Объекта класса :class:`yandex_music.Status` предоставляющий информацию об
:obj:`yandex_music.Status`: Объекта класса :class:`yandex_music.Status` представляющий информацию об
аккаунте если валиден, иначе :obj:`None`.
Raises:
@ -239,6 +242,63 @@ class Client(YandexMusicObject):
return Status.de_json(result, self)
@log
def account_settings(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Settings]:
"""Получение настроек текущего пользователя.
Args:
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
ответа от сервера вместо указанного при создании пула.
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
Returns:
:obj:`yandex_music.UserSettings`: Объекта класса :class:`yandex_music.UserSettings` представляющий
настройки пользователя, иначе :obj:`None`.
Raises:
:class:`yandex_music.YandexMusicError`
"""
url = f'{self.base_url}/account/settings'
result = self._request.get(url, timeout=timeout, *args, **kwargs)
return UserSettings.de_json(result, self)
@log
def account_settings_set(self, param: str = None, value: Union[str, int, bool] = None,
data: Dict[str, Union[str, int, bool]] = None, timeout: Union[int, float] = None,
*args, **kwargs) -> Optional[Settings]:
"""Изменение настроек текущего пользователя.
Note:
Доступные названия параметров есть поля в классе :class:`yandex_music.UserSettings`, только в CamelCase.
Args:
param (:obj:`str`): Название параметра для изменения.
value (:obj:`str` | :obj:`int` | :obj:`bool`): Значение параметра.
data (:obj:`dict`): Словарь параметров и значений для множественного изменения.
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
ответа от сервера вместо указанного при создании пула.
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
Returns:
:obj:`yandex_music.UserSettings`: Объекта класса :class:`yandex_music.UserSettings` представляющий
настройки пользователя, иначе :obj:`None`.
Raises:
:class:`yandex_music.YandexMusicError`
"""
url = f'{self.base_url}/account/settings'
if not data:
data = {param: value}
result = self._request.post(url, data=data, timeout=timeout, *args, **kwargs)
return UserSettings.de_json(result, self)
@log
def settings(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Settings]:
"""Получение предложений по покупке. Нет обязательных параметров.
@ -249,7 +309,7 @@ class Client(YandexMusicObject):
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
Returns:
:obj:`yandex_music.Settings`: Объекта класса :class:`yandex_music.Settings` предоставляющий информацию о
:obj:`yandex_music.Settings`: Объекта класса :class:`yandex_music.Settings` представляющий информацию о
предлагаемых продуктах, иначе :obj:`None`.
Raises:
@ -370,8 +430,9 @@ class Client(YandexMusicObject):
*args, **kwargs) -> Optional[Landing]:
"""Получение лендинг-страницы содержащий блоки с новыми релизами, чартами, плейлистами с новинками и т.д.
Поддерживаемые типы блоков: personalplaylists, promotions, new-releases, new-playlists, mixes,c hart, artists,
albums, playlists, play_contexts.
Note:
Поддерживаемые типы блоков: `personalplaylists`, `promotions`, `new-releases`, `new-playlists`, `mixes`,
`chart`, `artists`, `albums`, `playlists`, `play_contexts`.
Args:
blocks (:obj:`str` | :obj:`list` из :obj:`str`): Блок или список блоков необходимых для выдачи.
@ -455,7 +516,7 @@ class Client(YandexMusicObject):
Returns:
:obj:`yandex_music.Supplement`: Объект класса `yandex_music.Supplement` представляющий дополнительную
информацию о треке.
информацию о треке.
Raises:
:class:`yandex_music.YandexMusicError`
@ -480,7 +541,7 @@ class Client(YandexMusicObject):
Returns:
:obj:`yandex_music.SimilarTracks`: Объект класса `yandex_music.SimilarTracks` представляющий список похожих
треков на другой трек.
треков на другой трек.
Raises:
:class:`yandex_music.YandexMusicError`
@ -651,14 +712,46 @@ class Client(YandexMusicObject):
return Suggestions.de_json(result, self)
@log
def users_playlists(self, kind: Union[List[Union[str, int]], str, int], user_id: str = None,
def users_settings(self, user_id: Union[str, int] = None, timeout: Union[int, float] = None,
*args, **kwargs) -> Optional[Settings]:
"""Получение настроек пользователя.
Note:
Для получения настроек пользователя нужно быть авторизованным или владеть `user_id`.
Args:
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя чьи настройки хотим
получить.
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
ответа от сервера вместо указанного при создании пула.
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
Returns:
:obj:`yandex_music.UserSettings`: Объекта класса :class:`yandex_music.UserSettings` представляющий
настройки пользователя, иначе :obj:`None`.
Raises:
:class:`yandex_music.YandexMusicError`
"""
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}/settings'
result = self._request.get(url, timeout=timeout, *args, **kwargs)
return UserSettings.de_json(result.get('user_settings'), self)
@log
def users_playlists(self, kind: Union[List[Union[str, int]], str, int], user_id: Union[str, int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> List[Playlist]:
"""Получение плейлиста или списка плейлистов по уникальным идентификаторам.
Args:
kind (:obj:`str` | :obj:`int` | :obj:`list` из :obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста
или их список.
user_id: (:obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
ответа от сервера вместо указанного при создании пула.
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
@ -685,14 +778,14 @@ class Client(YandexMusicObject):
return Playlist.de_list(result, self)
@log
def users_playlists_create(self, title: str, visibility: str = 'public', user_id: str = None,
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]:
"""Создание плейлиста.
Args:
title (:obj:`str`): Название.
visibility (:obj:`str`, optional): Модификатор доступа.
user_id: (:obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
ответа от сервера вместо указанного при создании пула.
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
@ -720,13 +813,13 @@ class Client(YandexMusicObject):
return Playlist.de_json(result, self)
@log
def users_playlists_delete(self, kind: Union[str, int], user_id: str = None,
def users_playlists_delete(self, kind: Union[str, int], user_id: Union[str, int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
"""Удаление плейлиста.
Args:
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
user_id: (:obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
ответа от сервера вместо указанного при создании пула.
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
@ -748,14 +841,14 @@ class Client(YandexMusicObject):
return result == 'ok'
@log
def users_playlists_name(self, kind: Union[str, int], name: str, user_id: str = None,
def users_playlists_name(self, kind: Union[str, int], name: str, user_id: Union[str, int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]:
"""Изменение названия плейлиста.
Args:
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
name (:obj:`str`): Новое название.
user_id: (:obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
ответа от сервера вместо указанного при создании пула.
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
@ -778,16 +871,17 @@ class Client(YandexMusicObject):
return Playlist.de_json(result, self)
@log
def users_playlists_visibility(self, kind: Union[str, int], visibility: str, user_id: str = None,
def users_playlists_visibility(self, kind: Union[str, int], visibility: str, user_id: Union[str, int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]:
"""Изменение видимости плейлиста.
Видимость (visibility) может быть задана только одним из двух значений: private, public.
Note:
Видимость (`visibility`) может быть задана только одним из двух значений: `private`, `public`.
Args:
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
visibility (:obj:`str`): Новое название.
user_id: (:obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
ответа от сервера вместо указанного при создании пула.
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
@ -810,18 +904,21 @@ class Client(YandexMusicObject):
return Playlist.de_json(result, self)
@log
def users_playlists_change(self, kind: Union[str, int], diff: str, revision: int = 1, user_id: str = None,
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]:
def users_playlists_change(self, kind: Union[str, int], diff: str, revision: int = 1,
user_id: Union[str, int] = None, timeout: Union[int, float] = None,
*args, **kwargs) -> Optional[Playlist]:
"""Изменение плейлиста.
Для получения отличий есть вспомогательный класс :class:`from yandex_music.utils.difference.Difference`.
Так же существуют уже готовые методы-обёртки над операциями.
Note:
Для получения отличий есть вспомогательный класс :class:`yandex_music.utils.difference.Difference`.
Так же существуют уже готовые методы-обёртки над операциями.
Args:
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
revision (:obj:`int`): TODO.
diff (:obj:`str`): JSON представления отличий старого и нового плейлиста.
user_id: (:obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
ответа от сервера вместо указанного при создании пула.
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
@ -851,11 +948,12 @@ class Client(YandexMusicObject):
@log
def users_playlists_insert_track(self, kind: Union[str, int], track_id: Union[str, int], album_id: Union[str, int],
at: int = 0, revision: int = 1, user_id: str = None,
at: int = 0, revision: int = 1, user_id: Union[str, int] = None,
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Playlist]:
"""Добавление трека в плейлист.
Трек можно вставить с любое место плейлиста задав индекс вставки (аргумент at).
Note:
Трек можно вставить с любое место плейлиста задав индекс вставки (аргумент `at`).
Args:
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
@ -863,7 +961,7 @@ class Client(YandexMusicObject):
album_id (:obj:`str` | :obj:`int`): Уникальный идентификатор альбома.
at (:obj:`int`): Индекс для вставки.
revision (:obj:`int`): TODO.
user_id: (:obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
ответа от сервера вместо указанного при создании пула.
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
@ -885,18 +983,19 @@ class Client(YandexMusicObject):
@log
def users_playlists_delete_track(self, kind: Union[str, int], from_: int, to: int, revision: int = 1,
user_id: str = None, timeout: Union[int, float] = None,
user_id: Union[str, int] = None, timeout: Union[int, float] = None,
*args, **kwargs) -> Optional[Playlist]:
"""Удаление треков из плейлиста.
Для удаление необходимо указать границы с какого по какой элемент (трек) удалить.
Note:
Для удаление необходимо указать границы с какого по какой элемент (трек) удалить.
Args:
kind (:obj:`str` | :obj:`int`): Уникальный идентификатор плейлиста.
from_ (:obj:`int`): С какого индекса.
to (:obj:`int`): По какой индекс.
revision (:obj:`int`): TODO.
user_id: (:obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
user_id (:obj:`str` | :obj:`int`, optional): Уникальный идентификатор пользователя владеющим плейлистом.
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
ответа от сервера вместо указанного при создании пула.
**kwargs (:obj:`dict`, optional): Произвольные аргументы (будут переданы в запрос).
@ -920,7 +1019,8 @@ class Client(YandexMusicObject):
def rotor_account_status(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Status]:
"""Получение статуса пользователя с дополнителньыми полями.
Данный статус отличается от обычного наличием дополнительных полей, например, `skips_per_hour`.
Note:
Данный статус отличается от обычного наличием дополнительных полей, например, `skips_per_hour`.
Args:
timeout (:obj:`int` | :obj:`float`, optional): Если это значение указано, используется как время ожидания
@ -970,7 +1070,9 @@ class Client(YandexMusicObject):
*args, **kwargs) -> List[StationResult]:
"""Получение всех радиостанций с настройками пользователя.
Чтобы определить что за тип станции (жанры, настроения, занятие и т.д.) необходимо смотреть в пол `id_for_from`.
Note:
Чтобы определить что за тип станции (жанры, настроения, занятие и т.д.) необходимо смотреть в поле
`id_for_from`.
Args:
language (:obj:`str`): Язык, на котором будет информация о станциях.
@ -999,11 +1101,14 @@ class Client(YandexMusicObject):
*args, **kwargs) -> bool:
"""Отправка ответной реакции на происходящее при прослушивании радио.
Сообщения о начале прослушивания радио, начале и конце трека, его пропуска.
Note:
Сообщения о начале прослушивания радио, начале и конце трека, его пропуска.
Известные типы фидбека: `radioStarted`, `trackStarted`, `trackFinished`, `skip`.
Пример `station`: `user:onyourwave`, `genre:allrock`.
Пример `from_`: `mobile-radio-user-123456789`.
Известные типы фидбека: `radioStarted`, `trackStarted`, `trackFinished`, `skip`.
Пример `station`: `user:onyourwave`, `genre:allrock`.
Пример `from_`: `mobile-radio-user-123456789`.
Args:
station (:obj:`str`): Станция.
@ -1059,6 +1164,12 @@ class Client(YandexMusicObject):
"""Сокращение для::
client.rotor_station_feedback(station, 'radioStarted', timestamp, from, *args, **kwargs)
Returns:
:obj:`bool`: :obj:`True` при успешном выполнении запроса, иначе :obj:`False`.
Raises:
:class:`yandex_music.YandexMusicError`
"""
return self.rotor_station_feedback(station, 'radioStarted', timestamp, from_=from_, batch_id=batch_id,
timeout=timeout, *args, **kwargs)
@ -1070,6 +1181,12 @@ class Client(YandexMusicObject):
"""Сокращение для::
client.rotor_station_feedback(station, 'trackStarted', timestamp, track_id, *args, **kwargs)
Returns:
:obj:`bool`: :obj:`True` при успешном выполнении запроса, иначе :obj:`False`.
Raises:
:class:`yandex_music.YandexMusicError`
"""
return self.rotor_station_feedback(station, 'trackStarted', timestamp, track_id=track_id, batch_id=batch_id,
timeout=timeout, *args, **kwargs)
@ -1082,7 +1199,13 @@ class Client(YandexMusicObject):
"""Сокращение для::
client.rotor_station_feedback(station, 'trackFinished', timestamp, track_id, total_played_seconds,
*args, **kwargs)
*args, **kwargs)
Returns:
:obj:`bool`: :obj:`True` при успешном выполнении запроса, иначе :obj:`False`.
Raises:
:class:`yandex_music.YandexMusicError`
"""
return self.rotor_station_feedback(station, 'trackFinished', timestamp, track_id=track_id,
total_played_seconds=total_played_seconds, batch_id=batch_id,
@ -1096,7 +1219,13 @@ class Client(YandexMusicObject):
"""Сокращение для::
client.rotor_station_feedback(station, 'skip', timestamp, track_id, total_played_seconds,
*args, **kwargs)
*args, **kwargs)
Returns:
:obj:`bool`: :obj:`True` при успешном выполнении запроса, иначе :obj:`False`.
Raises:
:class:`yandex_music.YandexMusicError`
"""
return self.rotor_station_feedback(station, 'skip', timestamp, track_id=track_id,
total_played_seconds=total_played_seconds, batch_id=batch_id,
@ -1132,13 +1261,14 @@ class Client(YandexMusicObject):
timeout: Union[int, float] = None, *args, **kwargs) -> bool:
"""Изменение настроек определённой станции.
Доступные значения для `mood_energy`: `fun`, `active`, `calm`, `sad`, `all`.
Доступные значения для `diversity`: `favorite`, `popular`, `discover`, `default`.
Доступные значения для `language`: `not-russian`, `russian`, `any`.
Note:
Доступные значения для `mood_energy`: `fun`, `active`, `calm`, `sad`, `all`.
У станций в `restrictions` есть Enum'ы, а в них `possible_values` - доступные значения для поля.
Доступные значения для `diversity`: `favorite`, `popular`, `discover`, `default`.
Не некоторых аккаунтах не меняется язык...
Доступные значения для `language`: `not-russian`, `russian`, `any`.
У станций в `restrictions` есть Enum'ы, а в них `possible_values` - доступные значения для поля.
Args:
station (:obj:`str`): Станция.
@ -1175,15 +1305,17 @@ class Client(YandexMusicObject):
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[StationTracksResult]:
"""Получение цепочки треков определённой станции.
Для продолжения цепочки треков необходимо:
1. Передавать ID трека, что был до этого (первый в цепочки).
2. Отправить фидбек о конче или скипе трека, что был передан в `queue`.
3. Отправить фидбек о начале следующего трека (второй в цепочки).
4. Выполнить запрос получения треков. В ответе придёт новые треки или произойдёт сдвиг цепочки на 1 элемент.
Note:
Для продолжения цепочки треков необходимо:
Проход по цепочке до коцна не изучен. Часто встречаются дубликаты.
1. Передавать `ID` трека, что был до этого (первый в цепочки).
2. Отправить фидбек о конче или скипе трека, что был передан в `queue`.
3. Отправить фидбек о начале следующего трека (второй в цепочки).
4. Выполнить запрос получения треков. В ответе придёт новые треки или произойдёт сдвиг цепочки на 1 элемент.
Все официальные клиенты выполняют запросы с `settings2 = True`.
Проход по цепочке до коцна не изучен. Часто встречаются дубликаты.
Все официальные клиенты выполняют запросы с `settings2 = True`.
Args:
station (:obj:`str`): Станция.
@ -1261,7 +1393,8 @@ class Client(YandexMusicObject):
*args, **kwargs) -> Optional[ArtistAlbums]:
"""Получение альбомов артиста.
Известные значения для sort_by: year, rating.
Note:
Известные значения для `sort_by`: `year`, `rating`.
Args:
artist_id (:obj:`str` | :obj:`int`): Уникальный идентификатор артиста.
@ -1476,15 +1609,17 @@ class Client(YandexMusicObject):
timeout: Union[int, float] = None, *args, **kwargs) -> Optional[ShotEvent]:
"""Получение рекламы или шота от Алисы после трека.
При получения шота от Алисы `prev_track_id` можно не указывать.
Note:
При получения шота от Алисы `prev_track_id` можно не указывать.
Если `context = 'playlist'`, то в `context_item` необходимо передать `{OWNER_PLAYLIST}:{ID_PLAYLIST}`.
Плейлист с Алисой имеет владельца с `id = 940441070`.
Если `context = 'playlist'`, то в `context_item` необходимо передать `{OWNER_PLAYLIST}:{ID_PLAYLIST}`.
Плейлист с Алисой имеет владельца с `id = 940441070`.
ID плейлиста можно получить из блоков landing'a. Получить шот чужого плейлиста нельзя.
ID плейлиста можно получить из блоков landing'a. Получить шот чужого плейлиста нельзя.
Известные значения `context`: `playlist`.
Известные значения `types`: `shot`, `ad`.
Известные значения `context`: `playlist`.
Известные значения `types`: `shot`, `ad`.
Args:
prev_track_id (:obj:`str` | :obj:`int`): Уникальный идентификатор предыдущего трека.
@ -1499,7 +1634,7 @@ class Client(YandexMusicObject):
Returns:
:obj:`yandex_music.ShotEvent`: Объекта класса :class:`yandex_music.ShotEvent`
представляющий шоты от Алисы, иначе :obj:`None`.
представляющий шоты от Алисы, иначе :obj:`None`.
Raises:
:class:`yandex_music.YandexMusicError`

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class Cover(YandexMusicObject):
"""Класс представляющий обложку.
"""Класс, представляющий обложку.
Attributes:
type (:obj:`str`): Тип обложки.

ファイルの表示

@ -11,7 +11,7 @@ from yandex_music import YandexMusicObject
class DownloadInfo(YandexMusicObject):
"""Класс представляющий информацию о вариантах загрузки трека.
"""Класс, представляющий информацию о вариантах загрузки трека.
Attributes:
codec (:obj:`str`): Кодек аудиофайла.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class Icon(YandexMusicObject):
"""Класс представляющий иконку.
"""Класс, представляющий иконку.
Attributes:
background_color (:obj:`str`): Цвет заднего фона в HEX.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class InvocationInfo(YandexMusicObject):
"""Класс представляющий информацию о запросе.
"""Класс, представляющий информацию о запросе.
Attributes:
hostname (:obj:`str`): Имя удалённого сервера.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class Pager(YandexMusicObject):
"""Класс представляющий пагинатор.
"""Класс, представляющий пагинатор.
Attributes:
total (:obj:`int`): Всего треков.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class PermissionAlerts(YandexMusicObject):
"""Класс представляющий оповещения.
"""Класс, представляющий оповещения.
Attributes:
alerts (:obj:`list` из :obj:`str`): Список оповещений.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class PlaylistAbsence(YandexMusicObject):
"""Класс представляющий причину отсутствия плейлиста.
"""Класс, представляющий причину отсутствия плейлиста.
Attributes:
kind (:obj:`int`): Уникальный идентификатор плейлиста.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class User(YandexMusicObject):
"""Класс представляющий пользователя.
"""Класс, представляющий пользователя.
Attributes:
uid (:obj:`int`): Идентификатор пользователя.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class PromoCodeStatus(YandexMusicObject):
"""Класс представляющий статус активации промо-кода.
"""Класс, представляющий статус активации промо-кода.
Attributes:
status (:obj:`str`): Статус операции.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class Search(YandexMusicObject):
"""Класс представляющий результаты поиска.
"""Класс, представляющий результаты поиска.
Attributes:
search_request_id (:obj:`str`): ID запроса.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class Settings(YandexMusicObject):
"""Класс представляющий предложения по покупке.
"""Класс, представляющий предложения по покупке.
Attributes:
in_app_products (:obj:`list` из :obj:`yandex_music.Product`): Список объектов класса

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class TrackShort(YandexMusicObject):
"""Класс представляющий укороченную версию трека с неполными данными.
"""Класс, представляющий укороченную версию трека с неполными данными.
Attributes:
id (:obj:`str`): Уникальный идентификатор трека.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class TracksList(YandexMusicObject):
"""Класс представляющий список треков.
"""Класс, представляющий список треков.
Attributes:
uid (:obj:`int`): Уникальный идентификатор пользователя.

ファイルの表示

@ -7,7 +7,7 @@ from yandex_music import YandexMusicObject
class CaptchaResponse(YandexMusicObject):
"""Класс представляющий ответ сервера с запросом на ввод капчи.
"""Класс, представляющий ответ сервера с запросом на ввод капчи.
Attributes:
x_captcha_url (:obj:`str`): Ссылка на изображение с капчей.

ファイルの表示

@ -26,7 +26,7 @@ logging.getLogger('urllib3').setLevel(logging.WARNING)
class Request:
"""Вспомогателньный класс для yandex_music предоставляющий методы для выполнения POST и GET запросов, скачивания
"""Вспомогателньный класс для yandex_music представляющий методы для выполнения POST и GET запросов, скачивания
файлов.
Args: