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