diff --git a/yandex_music/exceptions.py b/yandex_music/exceptions.py index 4458caf..21436c1 100644 --- a/yandex_music/exceptions.py +++ b/yandex_music/exceptions.py @@ -1,3 +1,5 @@ +# TODO (MarshalX) все исключения должны заканчиваться на Error + class YandexMusicError(Exception): """Базовый класс, представляющий исключения общего характера.""" diff --git a/yandex_music/utils/request.py b/yandex_music/utils/request.py index 369cf75..11d5167 100644 --- a/yandex_music/utils/request.py +++ b/yandex_music/utils/request.py @@ -201,20 +201,24 @@ class Request: if 200 <= resp.status_code <= 299: return resp.content - parse = self._parse(resp.content) - message = parse.get_error() or 'Unknown HTTPError' + try: + parse = self._parse(resp.content) + message = parse.get_error() + except YandexMusicError: + message = 'Unknown HTTPError' if resp.status_code in (401, 403): raise Unauthorized(message) elif resp.status_code == 400: raise BadRequest(message) elif resp.status_code in (404, 409, 413): + # TODO (MarshalX) было бы удобнее при 404 выбрасывать NotFoundError. Наследник NetworkError raise NetworkError(message) elif resp.status_code == 502: raise NetworkError('Bad Gateway') else: - raise NetworkError(f'{message} ({resp.status_code})') + raise NetworkError(f'{message} ({resp.status_code}): {resp.content}') def get(self, url: str, params: dict = None, timeout: Union[int, float] = 5, *args, **kwargs) -> Union[dict, str]: """Отправка GET запроса. diff --git a/yandex_music/utils/request_async.py b/yandex_music/utils/request_async.py index 358be94..92f1660 100644 --- a/yandex_music/utils/request_async.py +++ b/yandex_music/utils/request_async.py @@ -209,20 +209,24 @@ class Request: if 200 <= resp.status <= 299: return content - parse = self._parse(content) - message = parse.get_error() or 'Unknown HTTPError' + try: + parse = self._parse(content) + message = parse.get_error() + except YandexMusicError: + message = 'Unknown HTTPError' if resp.status in (401, 403): raise Unauthorized(message) elif resp.status == 400: raise BadRequest(message) elif resp.status in (404, 409, 413): + # TODO (MarshalX) было бы удобнее при 404 выбрасывать NotFoundError. Наследник NetworkError raise NetworkError(message) elif resp.status == 502: raise NetworkError('Bad Gateway') else: - raise NetworkError(f'{message} ({resp.status})') + raise NetworkError(f'{message} ({resp.status}): {content}') async def get( self, url: str, params: dict = None, timeout: Union[int, float] = 5, *args, **kwargs