From e330c35573f026defd3c95f9fce6a914ec07df1d Mon Sep 17 00:00:00 2001 From: Il`ya Semyonov Date: Sun, 7 Jun 2020 15:56:37 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BA=D0=BE=D0=BB=D0=BB=D0=B1=D0=B5=D0=BA=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BD=D0=BE=D0=B2=D1=8B=D1=85=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D0=B5=D0=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yandex_music/base.py | 10 +++++++--- yandex_music/client.py | 12 +++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/yandex_music/base.py b/yandex_music/base.py index ed84454..4115ffd 100644 --- a/yandex_music/base.py +++ b/yandex_music/base.py @@ -33,12 +33,16 @@ class YandexMusicObject: def __getitem__(self, item): return self.__dict__[item] + @staticmethod + def report_new_fields_callback(obj, new_fields): + logger.warning(f'Found unknown fields received from API! Please copy warn message ' + f'and send to {new_issue_by_template_url} (github issue), thank you!') + logger.warning(f'Type: {type(obj)}; kwargs: {new_fields}') + @staticmethod def handle_unknown_kwargs(obj, **kwargs): if kwargs and obj.client.report_new_fields: - logger.warning(f'Found unknown fields received from API! Please copy warn message ' - f'and send to {new_issue_by_template_url} (github issue), thank you!') - logger.warning(f'Type: {type(obj)}; kwargs: {kwargs}') + obj.client.report_new_fields_callback(obj, kwargs) @classmethod def de_json(cls, data: dict, client: Optional['Client']) -> Optional[dict]: diff --git a/yandex_music/client.py b/yandex_music/client.py index 5d1e2c8..28f35fa 100644 --- a/yandex_music/client.py +++ b/yandex_music/client.py @@ -48,6 +48,8 @@ class Client(YandexMusicObject): При `fetch_account_status = False` многие сокращения перестанут работать в связи с тем, что неоткуда будет взять uid аккаунта для отправки запроса. Так же в большинстве методов придётся передавать `uid` явно. + Для отключения предупреждений о новых полях установите `report_new_fields` в `False`. + Attributes: logger (:obj:`logging.Logger`): Объект логгера. token (:obj:`str`): Уникальный ключ для аутентификации. @@ -55,6 +57,8 @@ class Client(YandexMusicObject): oauth_url (:obj:`str`): Ссылка на OAuth Yandex Music. me (:obj:`yandex_music.Status`): Информация об аккаунте. report_new_fields (:obj:`bool`): Включены ли сообщения о новых полях от API, которых нет в библиотеке. + report_new_fields_callback (:obj:`function`): Функция обратного вызова для обработки новых полей. + Принимает объект, в котором нет поля и kwargs с неизвестными полями. Args: token (:obj:`str`, optional): Уникальный ключ для аутентификации. @@ -64,10 +68,13 @@ class Client(YandexMusicObject): request (:obj:`yandex_music.utils.request.Request`, optional): Пре-инициализация :class:`yandex_music.utils.request.Request`. report_new_fields (:obj:`bool`, optional): Включить сообщения о новых полях от API, которых нет в библиотеке. + report_new_fields_callback (:obj:`function`, optional): Функция обратного вызова для обработки новых полей. + Принимает объект, в котором нет поля и kwargs с неизвестными полями. """ def __init__(self, token: str = None, fetch_account_status: bool = True, base_url: str = None, - oauth_url: str = None, request: Request = None, report_new_fields=True) -> None: + oauth_url: str = None, request: Request = None, + report_new_fields=True, report_new_fields_callback: Callable[[object, dict], None] = None) -> None: self.logger = logging.getLogger(__name__) self.token = token @@ -81,6 +88,9 @@ class Client(YandexMusicObject): self.report_new_fields = report_new_fields + if report_new_fields_callback is not None: + self.report_new_fields_callback = report_new_fields_callback + if request: self._request = request self._request.set_and_return_client(self)