всем исключениям добавлен суффикс Error;
добавлено новое исключение NotFoundError при 404.
このコミットが含まれているのは:
コミット
b6c29573b9
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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:
|
||||
"""Сокращение для::
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
読み込み中…
新しいイシューから参照