From b6c29573b95006cf89b07026f83395ceb06d7142 Mon Sep 17 00:00:00 2001 From: "Il'ya (Marshal)" Date: Sun, 20 Feb 2022 22:15:27 +0100 Subject: [PATCH] =?UTF-8?q?=D0=B2=D1=81=D0=B5=D0=BC=20=D0=B8=D1=81=D0=BA?= =?UTF-8?q?=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=D0=BC=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D1=81=D1=83=D1=84=D1=84?= =?UTF-8?q?=D0=B8=D0=BA=D1=81=20Error;=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BD=D0=BE=D0=B2=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?NotFoundError=20=D0=BF=D1=80=D0=B8=20404.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yandex_music/client.py | 4 ++-- yandex_music/client_async.py | 4 ++-- yandex_music/exceptions.py | 15 +++++++++------ yandex_music/track/track.py | 10 +++++----- yandex_music/utils/request.py | 24 +++++++++++++----------- yandex_music/utils/request_async.py | 24 +++++++++++++----------- 6 files changed, 44 insertions(+), 37 deletions(-) diff --git a/yandex_music/client.py b/yandex_music/client.py index 349c81b..e7cfef4 100644 --- a/yandex_music/client.py +++ b/yandex_music/client.py @@ -42,7 +42,7 @@ from yandex_music import ( __license__, __version__, ) -from yandex_music.exceptions import BadRequest +from yandex_music.exceptions import BadRequestError from yandex_music.utils.difference import Difference from yandex_music.utils.request import Request @@ -765,7 +765,7 @@ class Client(YandexMusicObject): result = self._request.get(url, params, timeout=timeout, *args, **kwargs) if isinstance(result, str): - raise BadRequest(result) + raise BadRequestError(result) return Search.de_json(result, self) diff --git a/yandex_music/client_async.py b/yandex_music/client_async.py index 0a3ab7e..b2dd449 100644 --- a/yandex_music/client_async.py +++ b/yandex_music/client_async.py @@ -46,7 +46,7 @@ from yandex_music import ( __license__, __version__, ) -from yandex_music.exceptions import BadRequest +from yandex_music.exceptions import BadRequestError from yandex_music.utils.difference import Difference from yandex_music.utils.request_async import Request @@ -771,7 +771,7 @@ class ClientAsync(YandexMusicObject): result = await self._request.get(url, params, timeout=timeout, *args, **kwargs) if isinstance(result, str): - raise BadRequest(result) + raise BadRequestError(result) return Search.de_json(result, self) diff --git a/yandex_music/exceptions.py b/yandex_music/exceptions.py index 21436c1..ef892f4 100644 --- a/yandex_music/exceptions.py +++ b/yandex_music/exceptions.py @@ -1,16 +1,14 @@ -# TODO (MarshalX) все исключения должны заканчиваться на Error - class YandexMusicError(Exception): """Базовый класс, представляющий исключения общего характера.""" -class Unauthorized(YandexMusicError): +class UnauthorizedError(YandexMusicError): """Класс исключения, вызываемого для случаев ошибок аутентификации и авторизации. """ -class InvalidBitrate(YandexMusicError): +class InvalidBitrateError(YandexMusicError): """Класс исключения, вызываемого при попытке загрузки трека с недоступным битрейтом. """ @@ -22,11 +20,16 @@ class NetworkError(YandexMusicError): """ -class BadRequest(NetworkError): +class BadRequestError(NetworkError): """Класс исключения, вызываемый в случае отправки неправильного запроса.""" -class TimedOut(NetworkError): +class NotFoundError(NetworkError): + """Класс исключения, вызываемый в случае ответа от сервера со статус кодом 404.""" + + +# TimeoutError builtin. И не знаю хотим ли использовать его для синк и asyncio.TimeoutError для асинк +class TimedOutError(NetworkError): """Класс исключения, вызываемого для случаев истечения времени ожидания.""" def __init__(self): diff --git a/yandex_music/track/track.py b/yandex_music/track/track.py index 91f8784..aba42f7 100644 --- a/yandex_music/track/track.py +++ b/yandex_music/track/track.py @@ -2,7 +2,7 @@ from typing import TYPE_CHECKING, Optional, List, Union from yandex_music import YandexMusicObject from yandex_music.utils import model -from yandex_music.exceptions import InvalidBitrate +from yandex_music.exceptions import InvalidBitrateError if TYPE_CHECKING: from yandex_music import ( @@ -208,7 +208,7 @@ class Track(YandexMusicObject): bitrate_in_kbps (:obj:`int`, optional): Битрейт из доступных в `self.download_info` для данного кодека. Raises: - :class:`yandex_music.exceptions.InvalidBitrate`: Если в `self.download_info` не найден подходящий трек. + :class:`yandex_music.exceptions.InvalidBitrateError`: Если в `self.download_info` не найден подходящий трек. """ if self.download_info is None: self.get_download_info() @@ -218,7 +218,7 @@ class Track(YandexMusicObject): info.download(filename) break else: - raise InvalidBitrate('Unavailable bitrate') + raise InvalidBitrateError('Unavailable bitrate') async def download_async(self, filename: str, codec: str = 'mp3', bitrate_in_kbps: int = 192) -> None: """Загрузка трека. @@ -234,7 +234,7 @@ class Track(YandexMusicObject): bitrate_in_kbps (:obj:`int`, optional): Битрейт из доступных в `self.download_info` для данного кодека. Raises: - :class:`yandex_music.exceptions.InvalidBitrate`: Если в `self.download_info` не найден подходящий трек. + :class:`yandex_music.exceptions.InvalidBitrateError`: Если в `self.download_info` не найден подходящий трек. """ if self.download_info is None: await self.get_download_info_async() @@ -244,7 +244,7 @@ class Track(YandexMusicObject): await info.download_async(filename) break else: - raise InvalidBitrate('Unavailable bitrate') + raise InvalidBitrateError('Unavailable bitrate') def like(self, *args, **kwargs) -> bool: """Сокращение для:: diff --git a/yandex_music/utils/request.py b/yandex_music/utils/request.py index 11d5167..71257b5 100644 --- a/yandex_music/utils/request.py +++ b/yandex_music/utils/request.py @@ -13,11 +13,12 @@ import requests from yandex_music.utils.response import Response from yandex_music.exceptions import ( - Unauthorized, - BadRequest, + UnauthorizedError, + BadRequestError, NetworkError, YandexMusicError, - TimedOut, + TimedOutError, + NotFoundError, ) if TYPE_CHECKING: @@ -181,9 +182,9 @@ class Request: :obj:`bytes`: Тело ответа. Raises: - :class:`yandex_music.exceptions.TimedOut`: При превышении времени ожидания. - :class:`yandex_music.exceptions.Unauthorized`: При невалидном токене, долгом ожидании прямой ссылки на файл. - :class:`yandex_music.exceptions.BadRequest`: При неправильном запросе. + :class:`yandex_music.exceptions.TimedOutError`: При превышении времени ожидания. + :class:`yandex_music.exceptions.UnauthorizedError`: При невалидном токене, долгом ожидании прямой ссылки на файл. + :class:`yandex_music.exceptions.BadRequestError`: При неправильном запросе. :class:`yandex_music.exceptions.NetworkError`: При проблемах с сетью. """ if 'headers' not in kwargs: @@ -194,7 +195,7 @@ class Request: try: resp = requests.request(*args, **kwargs) except requests.Timeout: - raise TimedOut() + raise TimedOutError() except requests.RequestException as e: raise NetworkError(e) @@ -208,11 +209,12 @@ class Request: message = 'Unknown HTTPError' if resp.status_code in (401, 403): - raise Unauthorized(message) + raise UnauthorizedError(message) elif resp.status_code == 400: - raise BadRequest(message) - elif resp.status_code in (404, 409, 413): - # TODO (MarshalX) было бы удобнее при 404 выбрасывать NotFoundError. Наследник NetworkError + raise BadRequestError(message) + elif resp.status_code == 404: + raise NotFoundError(message) + elif resp.status_code in (409, 413): raise NetworkError(message) elif resp.status_code == 502: diff --git a/yandex_music/utils/request_async.py b/yandex_music/utils/request_async.py index 92f1660..62d2d0a 100644 --- a/yandex_music/utils/request_async.py +++ b/yandex_music/utils/request_async.py @@ -19,11 +19,12 @@ import aiofiles from yandex_music.utils.response import Response from yandex_music.exceptions import ( - Unauthorized, - BadRequest, + UnauthorizedError, + BadRequestError, NetworkError, YandexMusicError, - TimedOut, + TimedOutError, + NotFoundError, ) if TYPE_CHECKING: @@ -187,9 +188,9 @@ class Request: :obj:`bytes`: Тело ответа. Raises: - :class:`yandex_music.exceptions.TimedOut`: При превышении времени ожидания. - :class:`yandex_music.exceptions.Unauthorized`: При невалидном токене, долгом ожидании прямой ссылки на файл. - :class:`yandex_music.exceptions.BadRequest`: При неправильном запросе. + :class:`yandex_music.exceptions.TimedOutError`: При превышении времени ожидания. + :class:`yandex_music.exceptions.UnauthorizedError`: При невалидном токене, долгом ожидании прямой ссылки на файл. + :class:`yandex_music.exceptions.BadRequestError`: При неправильном запросе. :class:`yandex_music.exceptions.NetworkError`: При проблемах с сетью. """ if 'headers' not in kwargs: @@ -202,7 +203,7 @@ class Request: resp = _resp content = await resp.content.read() except asyncio.TimeoutError: - raise TimedOut() + raise TimedOutError() except aiohttp.ClientError as e: raise NetworkError(e) @@ -216,11 +217,12 @@ class Request: message = 'Unknown HTTPError' if resp.status in (401, 403): - raise Unauthorized(message) + raise UnauthorizedError(message) elif resp.status == 400: - raise BadRequest(message) - elif resp.status in (404, 409, 413): - # TODO (MarshalX) было бы удобнее при 404 выбрасывать NotFoundError. Наследник NetworkError + raise BadRequestError(message) + elif resp.status == 404: + raise NotFoundError(message) + elif resp.status in (409, 413): raise NetworkError(message) elif resp.status == 502: