Source code for clashroyale.errors
__all__ = [
'RequestError', 'StatusError', 'NotResponding', 'NetworkError',
'BadRequest', 'NotFoundError', 'ServerError', 'Unauthorized',
'NotTrackedError', 'RatelimitError', 'UnexpectedError',
'RatelimitErrorDetected'
]
[docs]class RequestError(Exception):
"""Base class for all errors"""
pass
[docs]class StatusError(RequestError):
"""Base class for all errors except NotResponding and RatelimitDetectedError"""
def __init__(self, resp, data):
self.response = resp
self.code = getattr(resp, 'status', None) or getattr(resp, 'status_code')
self.method = getattr(resp, 'method', None)
self.reason = resp.reason
if isinstance(data, dict):
self.error = data.get('error')
if 'message' in data:
self.error = data.get('message')
else:
self.error = data
self.fmt = '{0.reason} ({0.code}): {0.error}'.format(self)
super().__init__(self.fmt)
[docs]class NotResponding(RequestError):
"""Raised if the API request timed out"""
def __init__(self):
self.code = 504
self.error = 'API request timed out, please be patient.'
super().__init__(self.error)
[docs]class NetworkError(RequestError):
"""Raised if there is an issue with the network
(i.e. aiohttp.ServerDisconnectedError or requests.ConnectionError)
"""
def __init__(self):
self.code = 503
self.error = 'Network down.'
super().__init__(self.error)
[docs]class BadRequest(StatusError):
"""Raised when status code 400 is returned.
Typically when at least one search parameter
was not provided
"""
pass
[docs]class NotFoundError(StatusError):
"""Raised if the player/clan is not found"""
pass
[docs]class ServerError(StatusError):
"""Raised if the api service is having issues"""
pass
[docs]class Unauthorized(StatusError):
"""Raised if you passed an invalid token."""
pass
[docs]class NotTrackedError(StatusError):
"""Raised if the requested clan is not tracked (RoyaleAPI)"""
pass
[docs]class RatelimitError(StatusError):
"""Raised if ratelimit is hit"""
pass
[docs]class UnexpectedError(StatusError):
"""Raised if the error was not caught"""
pass
[docs]class RatelimitErrorDetected(RequestError):
"""Raised when a ratelimit error is detected"""
def __init__(self, retry_when):
self.code = 429
self.retry_when = retry_when
self.reason = self.error = 'Too many requests detected, retry in ' + str(self.retry_when)
self.fmt = '{0.reason} ({0.code}): {0.error}'.format(self)
super().__init__(self.fmt)