всем исключениям добавлен суффикс Error;

добавлено новое исключение NotFoundError при 404.
このコミットが含まれているのは:
Il'ya (Marshal) 2022-02-20 22:15:27 +01:00
コミット b6c29573b9
6個のファイルの変更44行の追加37行の削除

ファイルの表示

@ -42,7 +42,7 @@ from yandex_music import (
__license__, __license__,
__version__, __version__,
) )
from yandex_music.exceptions import BadRequest from yandex_music.exceptions import BadRequestError
from yandex_music.utils.difference import Difference from yandex_music.utils.difference import Difference
from yandex_music.utils.request import Request from yandex_music.utils.request import Request
@ -765,7 +765,7 @@ class Client(YandexMusicObject):
result = self._request.get(url, params, timeout=timeout, *args, **kwargs) result = self._request.get(url, params, timeout=timeout, *args, **kwargs)
if isinstance(result, str): if isinstance(result, str):
raise BadRequest(result) raise BadRequestError(result)
return Search.de_json(result, self) return Search.de_json(result, self)

ファイルの表示

@ -46,7 +46,7 @@ from yandex_music import (
__license__, __license__,
__version__, __version__,
) )
from yandex_music.exceptions import BadRequest from yandex_music.exceptions import BadRequestError
from yandex_music.utils.difference import Difference from yandex_music.utils.difference import Difference
from yandex_music.utils.request_async import Request 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) result = await self._request.get(url, params, timeout=timeout, *args, **kwargs)
if isinstance(result, str): if isinstance(result, str):
raise BadRequest(result) raise BadRequestError(result)
return Search.de_json(result, self) return Search.de_json(result, self)

ファイルの表示

@ -1,16 +1,14 @@
# TODO (MarshalX) все исключения должны заканчиваться на Error
class YandexMusicError(Exception): 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): def __init__(self):

ファイルの表示

@ -2,7 +2,7 @@ from typing import TYPE_CHECKING, Optional, List, Union
from yandex_music import YandexMusicObject from yandex_music import YandexMusicObject
from yandex_music.utils import model from yandex_music.utils import model
from yandex_music.exceptions import InvalidBitrate from yandex_music.exceptions import InvalidBitrateError
if TYPE_CHECKING: if TYPE_CHECKING:
from yandex_music import ( from yandex_music import (
@ -208,7 +208,7 @@ class Track(YandexMusicObject):
bitrate_in_kbps (:obj:`int`, optional): Битрейт из доступных в `self.download_info` для данного кодека. bitrate_in_kbps (:obj:`int`, optional): Битрейт из доступных в `self.download_info` для данного кодека.
Raises: Raises:
:class:`yandex_music.exceptions.InvalidBitrate`: Если в `self.download_info` не найден подходящий трек. :class:`yandex_music.exceptions.InvalidBitrateError`: Если в `self.download_info` не найден подходящий трек.
""" """
if self.download_info is None: if self.download_info is None:
self.get_download_info() self.get_download_info()
@ -218,7 +218,7 @@ class Track(YandexMusicObject):
info.download(filename) info.download(filename)
break break
else: 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: 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` для данного кодека. bitrate_in_kbps (:obj:`int`, optional): Битрейт из доступных в `self.download_info` для данного кодека.
Raises: Raises:
:class:`yandex_music.exceptions.InvalidBitrate`: Если в `self.download_info` не найден подходящий трек. :class:`yandex_music.exceptions.InvalidBitrateError`: Если в `self.download_info` не найден подходящий трек.
""" """
if self.download_info is None: if self.download_info is None:
await self.get_download_info_async() await self.get_download_info_async()
@ -244,7 +244,7 @@ class Track(YandexMusicObject):
await info.download_async(filename) await info.download_async(filename)
break break
else: else:
raise InvalidBitrate('Unavailable bitrate') raise InvalidBitrateError('Unavailable bitrate')
def like(self, *args, **kwargs) -> bool: def like(self, *args, **kwargs) -> bool:
"""Сокращение для:: """Сокращение для::

ファイルの表示

@ -13,11 +13,12 @@ import requests
from yandex_music.utils.response import Response from yandex_music.utils.response import Response
from yandex_music.exceptions import ( from yandex_music.exceptions import (
Unauthorized, UnauthorizedError,
BadRequest, BadRequestError,
NetworkError, NetworkError,
YandexMusicError, YandexMusicError,
TimedOut, TimedOutError,
NotFoundError,
) )
if TYPE_CHECKING: if TYPE_CHECKING:
@ -181,9 +182,9 @@ class Request:
:obj:`bytes`: Тело ответа. :obj:`bytes`: Тело ответа.
Raises: Raises:
:class:`yandex_music.exceptions.TimedOut`: При превышении времени ожидания. :class:`yandex_music.exceptions.TimedOutError`: При превышении времени ожидания.
:class:`yandex_music.exceptions.Unauthorized`: При невалидном токене, долгом ожидании прямой ссылки на файл. :class:`yandex_music.exceptions.UnauthorizedError`: При невалидном токене, долгом ожидании прямой ссылки на файл.
:class:`yandex_music.exceptions.BadRequest`: При неправильном запросе. :class:`yandex_music.exceptions.BadRequestError`: При неправильном запросе.
:class:`yandex_music.exceptions.NetworkError`: При проблемах с сетью. :class:`yandex_music.exceptions.NetworkError`: При проблемах с сетью.
""" """
if 'headers' not in kwargs: if 'headers' not in kwargs:
@ -194,7 +195,7 @@ class Request:
try: try:
resp = requests.request(*args, **kwargs) resp = requests.request(*args, **kwargs)
except requests.Timeout: except requests.Timeout:
raise TimedOut() raise TimedOutError()
except requests.RequestException as e: except requests.RequestException as e:
raise NetworkError(e) raise NetworkError(e)
@ -208,11 +209,12 @@ class Request:
message = 'Unknown HTTPError' message = 'Unknown HTTPError'
if resp.status_code in (401, 403): if resp.status_code in (401, 403):
raise Unauthorized(message) raise UnauthorizedError(message)
elif resp.status_code == 400: elif resp.status_code == 400:
raise BadRequest(message) raise BadRequestError(message)
elif resp.status_code in (404, 409, 413): elif resp.status_code == 404:
# TODO (MarshalX) было бы удобнее при 404 выбрасывать NotFoundError. Наследник NetworkError raise NotFoundError(message)
elif resp.status_code in (409, 413):
raise NetworkError(message) raise NetworkError(message)
elif resp.status_code == 502: elif resp.status_code == 502:

ファイルの表示

@ -19,11 +19,12 @@ import aiofiles
from yandex_music.utils.response import Response from yandex_music.utils.response import Response
from yandex_music.exceptions import ( from yandex_music.exceptions import (
Unauthorized, UnauthorizedError,
BadRequest, BadRequestError,
NetworkError, NetworkError,
YandexMusicError, YandexMusicError,
TimedOut, TimedOutError,
NotFoundError,
) )
if TYPE_CHECKING: if TYPE_CHECKING:
@ -187,9 +188,9 @@ class Request:
:obj:`bytes`: Тело ответа. :obj:`bytes`: Тело ответа.
Raises: Raises:
:class:`yandex_music.exceptions.TimedOut`: При превышении времени ожидания. :class:`yandex_music.exceptions.TimedOutError`: При превышении времени ожидания.
:class:`yandex_music.exceptions.Unauthorized`: При невалидном токене, долгом ожидании прямой ссылки на файл. :class:`yandex_music.exceptions.UnauthorizedError`: При невалидном токене, долгом ожидании прямой ссылки на файл.
:class:`yandex_music.exceptions.BadRequest`: При неправильном запросе. :class:`yandex_music.exceptions.BadRequestError`: При неправильном запросе.
:class:`yandex_music.exceptions.NetworkError`: При проблемах с сетью. :class:`yandex_music.exceptions.NetworkError`: При проблемах с сетью.
""" """
if 'headers' not in kwargs: if 'headers' not in kwargs:
@ -202,7 +203,7 @@ class Request:
resp = _resp resp = _resp
content = await resp.content.read() content = await resp.content.read()
except asyncio.TimeoutError: except asyncio.TimeoutError:
raise TimedOut() raise TimedOutError()
except aiohttp.ClientError as e: except aiohttp.ClientError as e:
raise NetworkError(e) raise NetworkError(e)
@ -216,11 +217,12 @@ class Request:
message = 'Unknown HTTPError' message = 'Unknown HTTPError'
if resp.status in (401, 403): if resp.status in (401, 403):
raise Unauthorized(message) raise UnauthorizedError(message)
elif resp.status == 400: elif resp.status == 400:
raise BadRequest(message) raise BadRequestError(message)
elif resp.status in (404, 409, 413): elif resp.status == 404:
# TODO (MarshalX) было бы удобнее при 404 выбрасывать NotFoundError. Наследник NetworkError raise NotFoundError(message)
elif resp.status in (409, 413):
raise NetworkError(message) raise NetworkError(message)
elif resp.status == 502: elif resp.status == 502: