Добавлен класс UserSettings.

Добавлен метод для получения своих настроек.
Добавлен метод для получения настроек другого пользователя.
Добавлен метод для изменения настроек.
Изменено название пакета с status на account. #195
このコミットが含まれているのは:
Il`ya 2020-01-25 21:09:03 +03:00
コミット 5afeaa244b
14個のファイルの変更200行の追加38行の削除

ファイルの表示

@ -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,7 +7,7 @@ from yandex_music import YandexMusicObject
class Status(YandexMusicObject):
"""Класс представляющий подробную информацию об аккаунте пользователя.
"""Класс, представляющий подробную информацию об аккаунте пользователя.
Attributes:
account (:obj:`yandex_music.Account`): Объект класса :class:`yandex_music.Account` предоставляющий основную

ファイルの表示

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

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

@ -0,0 +1,82 @@
from typing import TYPE_CHECKING, Optional
if TYPE_CHECKING:
from yandex_music import Client
from yandex_music import YandexMusicObject
class UserSettings(YandexMusicObject):
"""Класс, предоставляющий настройки пользователя.
Доступные значения для поля `theme`: `white`, `black`.
Доступные значения для полей `user_music_visibility` и `user_social_visibility`: `private`, `public`.
Attributes:
client (:obj:`yandex_music.Client`): Объект класса :class:`yandex_music.Client` представляющий клиент Yandex
Music.
Args:
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, )
@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)

ファイルの表示

@ -6,7 +6,7 @@ from typing import Callable, Union, List, Optional
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
@ -239,6 +239,55 @@ 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, value: Union[str, int, bool], timeout: Union[int, float] = None,
*args, **kwargs) -> Optional[Settings]:
"""Изменение настроек текущего пользователя.
Доступные названия параметров есть поля в классе :class:`yandex_music.UserSettings`, только в CamelCase.
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, params={param: value}, timeout=timeout, *args, **kwargs)
return UserSettings.de_json(result, self)
@log
def settings(self, timeout: Union[int, float] = None, *args, **kwargs) -> Optional[Settings]:
"""Получение предложений по покупке. Нет обязательных параметров.
@ -651,14 +700,43 @@ 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]:
"""Получение настроек пользователя.
Для получения настроек пользователя нужно быть авторизованным или владеть `user_id`.
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`
"""
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 +763,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 +798,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 +826,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,7 +856,7 @@ 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]:
"""Изменение видимости плейлиста.
@ -787,7 +865,7 @@ class Client(YandexMusicObject):
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,8 +888,9 @@ 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`.
@ -821,7 +900,7 @@ class Client(YandexMusicObject):
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,7 +930,7 @@ 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]:
"""Добавление трека в плейлист.
@ -863,7 +942,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,7 +964,7 @@ 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]:
"""Удаление треков из плейлиста.
@ -896,7 +975,7 @@ class Client(YandexMusicObject):
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): Произвольные аргументы (будут переданы в запрос).

ファイルの表示

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