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: