Добавлен декоратор для логирования (https://github.com/MarshalX/yandex-music-api/issues/17).

このコミットが含まれているのは:
Il`ya 2019-08-25 11:49:02 +03:00
コミット 7340c2db26
2個のファイルの変更72行の追加2行の削除

ファイルの表示

@ -25,6 +25,25 @@ de_list_likes = {
}
logging.getLogger(__name__).addHandler(logging.NullHandler())
def log(method):
logger = logging.getLogger(method.__module__)
def wrapper(*args, **kwargs):
logger.debug(f'Entering: {method.__name__}')
result = method(*args, **kwargs)
logger.debug(result)
logger.debug(f'Exiting: {method.__name__}')
return result
return wrapper
class Client(YandexMusicObject):
"""Класс представляющий клиент Yandex Music.
@ -94,6 +113,7 @@ class Client(YandexMusicObject):
return cls(token=token, *args, **kwargs)
@log
def generate_token_by_username_and_password(self, username, password, grant_type='password',
timeout=None, *args, **kwargs):
"""Метод получения OAuth токена по логину и паролю.
@ -154,6 +174,7 @@ class Client(YandexMusicObject):
""":obj:`yandex_music.utils.request.Request`: Объект вспомогательного класса для отправки запросов."""
return self._request
@log
def account_status(self, timeout=None, *args, **kwargs):
"""Получение статуса аккаунта. Нет обязательных параметров.
@ -176,6 +197,7 @@ class Client(YandexMusicObject):
return Status.de_json(result, self)
@log
def settings(self, timeout=None, *args, **kwargs):
"""Получение предложений по покупке. Нет обязательных параметров.
@ -198,6 +220,7 @@ class Client(YandexMusicObject):
return Settings.de_json(result, self)
@log
def permission_alerts(self, timeout=None, *args, **kwargs):
"""Получение оповещений. Нет обязательных параметров.
@ -220,6 +243,7 @@ class Client(YandexMusicObject):
return PermissionAlerts.de_json(result, self)
@log
def account_experiments(self, timeout=None, *args, **kwargs):
"""Получение значений экспериментальных функций аккаунта.
@ -242,6 +266,7 @@ class Client(YandexMusicObject):
return Experiments.de_json(result, self)
@log
def consume_promo_code(self, code: str, language: str = 'en', timeout=None, *args, **kwargs):
"""Активация промо-кода.
@ -266,6 +291,7 @@ class Client(YandexMusicObject):
return PromoCodeStatus.de_json(result, self)
@log
def feed(self, timeout=None, *args, **kwargs):
"""Получение потока информации (фида) подобранного под пользователя. Содержит умные плейлисты.
@ -288,6 +314,7 @@ class Client(YandexMusicObject):
return Feed.de_json(result, self)
@log
def feed_wizard_is_passed(self, timeout=None, *args, **kwargs):
url = f'{self.base_url}/feed/wizard/is-passed'
@ -295,6 +322,7 @@ class Client(YandexMusicObject):
return result.get('is_wizard_passed') or False
@log
def landing(self, blocks: str or list, timeout=None, *args, **kwargs):
"""Получение лендинг-страницы содержащий блоки с новыми релизами, чартами, плейлистами с новинками и т.д.
@ -321,6 +349,7 @@ class Client(YandexMusicObject):
return Landing.de_json(result, self)
@log
def genres(self, timeout=None, *args, **kwargs):
"""Получение жанров музыки.
@ -343,6 +372,7 @@ class Client(YandexMusicObject):
return Genre.de_list(result, self)
@log
def tracks_download_info(self, track_id: str or int, get_direct_links: bool = False, timeout=None, *args, **kwargs):
"""Получение информации о доступных вариантах загрузки трека.
@ -367,6 +397,7 @@ class Client(YandexMusicObject):
return DownloadInfo.de_list(result, self, get_direct_links)
@log
def play_audio(self,
track_id: str or int,
from_: str,
@ -429,6 +460,7 @@ class Client(YandexMusicObject):
return result == 'ok'
@log
def search(self,
text: str,
nocorrect: bool = False,
@ -471,6 +503,7 @@ class Client(YandexMusicObject):
return Search.de_json(result, self)
@log
def search_suggest(self, part: str, timeout=None, *args, **kwargs):
"""Получение подсказок по введенной части поискового запроса.
@ -494,6 +527,7 @@ class Client(YandexMusicObject):
return Suggestions.de_json(result, self)
@log
def users_playlists(self, kind: str or int or list, user_id: str = None, timeout=None, *args, **kwargs):
"""Получение плейлиста или списка плейлистов по уникальным идентификаторам.
@ -526,6 +560,7 @@ class Client(YandexMusicObject):
return Playlist.de_list(result, self)
@log
def users_playlists_create(self, title: str, visibility: str = 'public', user_id: str = None,
timeout=None, *args, **kwargs):
"""Создание плейлиста.
@ -560,6 +595,7 @@ class Client(YandexMusicObject):
return Playlist.de_json(result, self)
@log
def users_playlists_delete(self, kind: str or int, user_id: str = None,
timeout=None, *args, **kwargs):
"""Удаление плейлиста.
@ -587,6 +623,7 @@ class Client(YandexMusicObject):
return result == 'ok'
@log
def users_playlists_name(self, kind: str or int, name: str, user_id: str = None, timeout=None, *args, **kwargs):
"""Изменение названия плейлиста.
@ -615,6 +652,7 @@ class Client(YandexMusicObject):
return Playlist.de_json(result, self)
@log
def users_playlists_change(self, kind: str or int, diff: str, revision: int = 1, user_id: str = None,
timeout=None, *args, **kwargs):
"""Изменение плейлиста.
@ -654,6 +692,7 @@ class Client(YandexMusicObject):
return Playlist.de_json(result, self)
@log
def users_playlists_insert_track(self, kind: str or int, track_id: str or int, album_id: str or int, at: int = 0,
revision: int = 1, user_id: str = None, timeout=None, *args, **kwargs):
"""Добавление трека в плейлист.
@ -686,6 +725,7 @@ class Client(YandexMusicObject):
return self.users_playlists_change(kind, diff.to_json(), revision, user_id, timeout, *args, **kwargs)
@log
def users_playlists_delete_track(self, kind: str or int, from_: int, to: int, revision: int = 1,
user_id: str = None, timeout=None, *args, **kwargs):
"""Удаление треков из плейлиста.
@ -717,6 +757,7 @@ class Client(YandexMusicObject):
return self.users_playlists_change(kind, diff.to_json(), revision, user_id, timeout, *args, **kwargs)
@log
def rotor_account_status(self, timeout=None, *args, **kwargs):
url = f'{self.base_url}/rotor/account/status'
@ -724,6 +765,7 @@ class Client(YandexMusicObject):
return Status.de_json(result, self)
@log
def rotor_stations_dashboard(self, timeout=None, *args, **kwargs):
url = f'{self.base_url}/rotor/stations/dashboard'
@ -731,6 +773,7 @@ class Client(YandexMusicObject):
return Dashboard.de_json(result, self)
@log
def rotor_stations_list(self, language: str = 'en', timeout=None, *args, **kwargs):
url = f'{self.base_url}/rotor/stations/list'
@ -738,6 +781,7 @@ class Client(YandexMusicObject):
return StationResult.de_list(result, self)
@log
def rotor_station_genre_feedback(self, genre: str, type_: str, timestamp=None, from_: str = None,
batch_id: str or int = None, track_id: str = None, timeout=None, *args, **kwargs):
if timestamp is None:
@ -762,15 +806,18 @@ class Client(YandexMusicObject):
return result == 'ok'
@log
def rotor_station_genre_feedback_radio_started(self, genre: str, from_: str, timestamp=None,
timeout=None, *args, **kwargs):
return self.rotor_station_genre_feedback(genre, 'radioStarted', timestamp, from_, timeout, *args, **kwargs)
@log
def rotor_station_genre_feedback_track_started(self, genre: str, track_id: str, batch_id: str or int,
timestamp=None, timeout=None, *args, **kwargs):
return self.rotor_station_genre_feedback(genre, 'trackStarted', timestamp, track_id=track_id, batch_id=batch_id,
timeout=timeout, *args, **kwargs)
@log
def rotor_station_genre_info(self, genre: str, timeout=None, *args, **kwargs):
url = f'{self.base_url}/rotor/station/genre:{genre}/info'
@ -778,6 +825,7 @@ class Client(YandexMusicObject):
return StationResult.de_list(result, self)
@log
def rotor_station_genre_tracks(self, genre: str, timeout=None, *args, **kwargs):
url = f'{self.base_url}/rotor/station/genre:{genre}/tracks'
@ -800,14 +848,17 @@ class Client(YandexMusicObject):
return result == 'ok'
@log
def users_likes_tracks_add(self, track_ids: str or list, user_id: str or int = None,
timeout=None, *args, **kwargs):
return self._like_action('track', track_ids, user_id, timeout, *args, **kwargs)
@log
def users_likes_tracks_remove(self, track_ids: str or list, user_id: str or int = None,
timeout=None, *args, **kwargs):
return self._like_action('track', track_ids, True, user_id, timeout, *args, **kwargs)
@log
def users_likes_artists_add(self, artist_ids: str or int or list, user_id: str or int = None,
timeout=None, *args, **kwargs):
return self._like_action('artist', artist_ids, user_id, timeout, *args, **kwargs)
@ -816,18 +867,22 @@ class Client(YandexMusicObject):
timeout=None, *args, **kwargs):
return self._like_action('artist', artist_ids, True, user_id, timeout, *args, **kwargs)
@log
def users_likes_playlists_add(self, playlist_ids: str or list, user_id: str or int = None,
timeout=None, *args, **kwargs):
return self._like_action('playlist', playlist_ids, user_id, timeout, *args, **kwargs)
@log
def users_likes_playlists_remove(self, playlist_ids: str or list, user_id: str or int = None,
timeout=None, *args, **kwargs):
return self._like_action('playlist', playlist_ids, True, user_id, timeout, *args, **kwargs)
@log
def users_likes_albums_add(self, album_ids: str or list, user_id: str or int = None,
timeout=None, *args, **kwargs):
return self._like_action('album', album_ids, user_id, timeout, *args, **kwargs)
@log
def users_likes_albums_remove(self, album_ids: str or list, user_id: str or int = None,
timeout=None, *args, **kwargs):
return self._like_action('album', album_ids, True, user_id, timeout, *args, **kwargs)
@ -843,18 +898,23 @@ class Client(YandexMusicObject):
return de_list.get(object_type)(result, self)
@log
def artists(self, artist_ids: list or int or str, timeout=None, *args, **kwargs):
return self._get_list('artist', artist_ids, timeout, *args, **kwargs)
@log
def albums(self, album_ids: list or int or str, timeout=None, *args, **kwargs):
return self._get_list('album', album_ids, timeout, *args, **kwargs)
@log
def tracks(self, track_ids: int or str, with_positions=True, timeout=None, *args, **kwargs):
return self._get_list('track', track_ids, {'with-positions': with_positions}, timeout, *args, **kwargs)
@log
def playlists_list(self, playlist_ids: list or int or str, timeout=None, *args, **kwargs):
return self._get_list('playlist', playlist_ids, timeout, *args, **kwargs)
@log
def users_playlists_list(self, user_id: int or str = None, timeout=None, *args, **kwargs):
if user_id is None:
user_id = self.account.uid
@ -878,20 +938,25 @@ class Client(YandexMusicObject):
return de_list_likes.get(object_type)(result, self)
@log
def users_likes_tracks(self, user_id: int or str = None, if_modified_since_revision=0, timeout=None,
*args, **kwargs):
return self._get_likes('track', user_id, {'if-modified-since-revision': if_modified_since_revision}, timeout,
*args, **kwargs)
@log
def users_likes_albums(self, user_id: int or str = None, rich=True, timeout=None, *args, **kwargs):
return self._get_likes('album', user_id, {'rich': rich}, timeout, *args, **kwargs)
@log
def users_likes_artists(self, user_id: int or str = None, with_timestamps=True, timeout=None, *args, **kwargs):
return self._get_likes('artist', user_id, {'with-timestamps': with_timestamps}, timeout, *args, **kwargs)
@log
def users_likes_playlists(self, user_id: int or str = None, timeout=None, *args, **kwargs):
return self._get_likes('playlist', user_id, timeout=timeout, *args, **kwargs)
@log
def users_dislikes_tracks(self, user_id: int or str = None, if_modified_since_revision=0,
timeout=None, *args, **kwargs):
if user_id is None:
@ -916,10 +981,12 @@ class Client(YandexMusicObject):
return 'revision' in result
@log
def users_dislikes_tracks_add(self, track_ids: str or list, user_id: str or int = None,
timeout=None, *args, **kwargs):
return self._dislike_action(track_ids, user_id, timeout, *args, **kwargs)
@log
def users_dislikes_tracks_remove(self, track_ids: str or list, user_id: str or int = None,
timeout=None, *args, **kwargs):
return self._dislike_action(track_ids, True, user_id, timeout, *args, **kwargs)

ファイルの表示

@ -17,9 +17,12 @@ HEADERS = {
}
logging.getLogger('urllib3').setLevel(logging.WARNING)
class Request:
"""
Вспомогателньный класс для yandex_music предоставляющий методы для выполнения POST и GET запросов, скачивания файлов.
"""Вспомогателньный класс для yandex_music предоставляющий методы для выполнения POST и GET запросов, скачивания
файлов.
Args:
client (:obj:`yandex_music.Client`): Объект класса :class:`yandex_music.Client` представляющий клиент Yandex