Добавлены настройки пользователя и их изменение
このコミットが含まれているのは:
コミット
8450d5937a
|
@ -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
|
|
@ -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`): Список объектов класса
|
|
@ -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:
|
||||
|
|
読み込み中…
新しいイシューから参照