Refactor exceptions into package
This commit is contained in:
parent
620323eab0
commit
09fcc776a7
|
@ -39,6 +39,7 @@ except ImportError:
|
||||||
# Python 3.7 and lower
|
# Python 3.7 and lower
|
||||||
import importlib_metadata # type: ignore
|
import importlib_metadata # type: ignore
|
||||||
|
|
||||||
|
from .exceptions import MalformedResponseError, NetworkError, PyLastError, WSError
|
||||||
from .utils import (
|
from .utils import (
|
||||||
_collect_nodes,
|
_collect_nodes,
|
||||||
_number,
|
_number,
|
||||||
|
@ -58,6 +59,11 @@ __email__ = "amr.hassan@gmail.com"
|
||||||
__version__ = importlib_metadata.version(__name__)
|
__version__ = importlib_metadata.version(__name__)
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
# Exceptions
|
||||||
|
MalformedResponseError,
|
||||||
|
NetworkError,
|
||||||
|
PyLastError,
|
||||||
|
WSError,
|
||||||
# Utils
|
# Utils
|
||||||
cleanup_nodes,
|
cleanup_nodes,
|
||||||
md5,
|
md5,
|
||||||
|
@ -1399,81 +1405,6 @@ class _Taggable(_BaseObject):
|
||||||
return seq
|
return seq
|
||||||
|
|
||||||
|
|
||||||
class PyLastError(Exception):
|
|
||||||
"""Generic exception raised by PyLast"""
|
|
||||||
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class WSError(PyLastError):
|
|
||||||
"""Exception related to the Network web service"""
|
|
||||||
|
|
||||||
def __init__(self, network, status, details) -> None:
|
|
||||||
self.status = status
|
|
||||||
self.details = details
|
|
||||||
self.network = network
|
|
||||||
|
|
||||||
@_string_output
|
|
||||||
def __str__(self) -> str:
|
|
||||||
return self.details
|
|
||||||
|
|
||||||
def get_id(self):
|
|
||||||
"""Returns the exception ID, from one of the following:
|
|
||||||
STATUS_INVALID_SERVICE = 2
|
|
||||||
STATUS_INVALID_METHOD = 3
|
|
||||||
STATUS_AUTH_FAILED = 4
|
|
||||||
STATUS_INVALID_FORMAT = 5
|
|
||||||
STATUS_INVALID_PARAMS = 6
|
|
||||||
STATUS_INVALID_RESOURCE = 7
|
|
||||||
STATUS_OPERATION_FAILED = 8
|
|
||||||
STATUS_INVALID_SK = 9
|
|
||||||
STATUS_INVALID_API_KEY = 10
|
|
||||||
STATUS_OFFLINE = 11
|
|
||||||
STATUS_SUBSCRIBERS_ONLY = 12
|
|
||||||
STATUS_TOKEN_UNAUTHORIZED = 14
|
|
||||||
STATUS_TOKEN_EXPIRED = 15
|
|
||||||
STATUS_TEMPORARILY_UNAVAILABLE = 16
|
|
||||||
STATUS_LOGIN_REQUIRED = 17
|
|
||||||
STATUS_TRIAL_EXPIRED = 18
|
|
||||||
STATUS_NOT_ENOUGH_CONTENT = 20
|
|
||||||
STATUS_NOT_ENOUGH_MEMBERS = 21
|
|
||||||
STATUS_NOT_ENOUGH_FANS = 22
|
|
||||||
STATUS_NOT_ENOUGH_NEIGHBOURS = 23
|
|
||||||
STATUS_NO_PEAK_RADIO = 24
|
|
||||||
STATUS_RADIO_NOT_FOUND = 25
|
|
||||||
STATUS_API_KEY_SUSPENDED = 26
|
|
||||||
STATUS_DEPRECATED = 27
|
|
||||||
STATUS_RATE_LIMIT_EXCEEDED = 29
|
|
||||||
"""
|
|
||||||
|
|
||||||
return self.status
|
|
||||||
|
|
||||||
|
|
||||||
class MalformedResponseError(PyLastError):
|
|
||||||
"""Exception conveying a malformed response from the music network."""
|
|
||||||
|
|
||||||
def __init__(self, network, underlying_error) -> None:
|
|
||||||
self.network = network
|
|
||||||
self.underlying_error = underlying_error
|
|
||||||
|
|
||||||
def __str__(self) -> str:
|
|
||||||
return (
|
|
||||||
f"Malformed response from {self.network.name}. "
|
|
||||||
f"Underlying error: {self.underlying_error}"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class NetworkError(PyLastError):
|
|
||||||
"""Exception conveying a problem in sending a request to Last.fm"""
|
|
||||||
|
|
||||||
def __init__(self, network, underlying_error) -> None:
|
|
||||||
self.network = network
|
|
||||||
self.underlying_error = underlying_error
|
|
||||||
|
|
||||||
def __str__(self) -> str:
|
|
||||||
return f"NetworkError: {self.underlying_error}"
|
|
||||||
|
|
||||||
|
|
||||||
class _Opus(_Taggable):
|
class _Opus(_Taggable):
|
||||||
"""An album or track."""
|
"""An album or track."""
|
||||||
|
|
||||||
|
|
78
src/pylast/exceptions.py
Normal file
78
src/pylast/exceptions.py
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from .utils import _string_output
|
||||||
|
|
||||||
|
|
||||||
|
class PyLastError(Exception):
|
||||||
|
"""Generic exception raised by PyLast"""
|
||||||
|
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class WSError(PyLastError):
|
||||||
|
"""Exception related to the Network web service"""
|
||||||
|
|
||||||
|
def __init__(self, network, status, details) -> None:
|
||||||
|
self.status = status
|
||||||
|
self.details = details
|
||||||
|
self.network = network
|
||||||
|
|
||||||
|
@_string_output
|
||||||
|
def __str__(self) -> str:
|
||||||
|
return self.details
|
||||||
|
|
||||||
|
def get_id(self):
|
||||||
|
"""Returns the exception ID, from one of the following:
|
||||||
|
STATUS_INVALID_SERVICE = 2
|
||||||
|
STATUS_INVALID_METHOD = 3
|
||||||
|
STATUS_AUTH_FAILED = 4
|
||||||
|
STATUS_INVALID_FORMAT = 5
|
||||||
|
STATUS_INVALID_PARAMS = 6
|
||||||
|
STATUS_INVALID_RESOURCE = 7
|
||||||
|
STATUS_OPERATION_FAILED = 8
|
||||||
|
STATUS_INVALID_SK = 9
|
||||||
|
STATUS_INVALID_API_KEY = 10
|
||||||
|
STATUS_OFFLINE = 11
|
||||||
|
STATUS_SUBSCRIBERS_ONLY = 12
|
||||||
|
STATUS_TOKEN_UNAUTHORIZED = 14
|
||||||
|
STATUS_TOKEN_EXPIRED = 15
|
||||||
|
STATUS_TEMPORARILY_UNAVAILABLE = 16
|
||||||
|
STATUS_LOGIN_REQUIRED = 17
|
||||||
|
STATUS_TRIAL_EXPIRED = 18
|
||||||
|
STATUS_NOT_ENOUGH_CONTENT = 20
|
||||||
|
STATUS_NOT_ENOUGH_MEMBERS = 21
|
||||||
|
STATUS_NOT_ENOUGH_FANS = 22
|
||||||
|
STATUS_NOT_ENOUGH_NEIGHBOURS = 23
|
||||||
|
STATUS_NO_PEAK_RADIO = 24
|
||||||
|
STATUS_RADIO_NOT_FOUND = 25
|
||||||
|
STATUS_API_KEY_SUSPENDED = 26
|
||||||
|
STATUS_DEPRECATED = 27
|
||||||
|
STATUS_RATE_LIMIT_EXCEEDED = 29
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self.status
|
||||||
|
|
||||||
|
|
||||||
|
class MalformedResponseError(PyLastError):
|
||||||
|
"""Exception conveying a malformed response from the music network."""
|
||||||
|
|
||||||
|
def __init__(self, network, underlying_error) -> None:
|
||||||
|
self.network = network
|
||||||
|
self.underlying_error = underlying_error
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
return (
|
||||||
|
f"Malformed response from {self.network.name}. "
|
||||||
|
f"Underlying error: {self.underlying_error}"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class NetworkError(PyLastError):
|
||||||
|
"""Exception conveying a problem in sending a request to Last.fm"""
|
||||||
|
|
||||||
|
def __init__(self, network, underlying_error) -> None:
|
||||||
|
self.network = network
|
||||||
|
self.underlying_error = underlying_error
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
return f"NetworkError: {self.underlying_error}"
|
Loading…
Reference in a new issue