from typing import Optional, Union
# -- API ERRORS --
[docs]
class SuperbAIError(Exception):
def __init__(
self,
message: Union[str, dict] = "",
http_status=None,
code: Optional[int] = None,
error_body=None,
):
super(SuperbAIError, self).__init__(message)
self._message = message
self.http_status = http_status
self.code = code
self.raw_error_body = error_body
self.error = self.build_error_object()
def __str__(self):
msg = self._message or "<empty message>"
return msg
def __repr__(self):
return (
f"{self.__class__.__name__}(message={self._message}, "
f"http_status={self.http_status})"
)
[docs]
def build_error_object(self):
if self.raw_error_body is None:
return None
if isinstance(self.raw_error_body, str) or isinstance(
self.raw_error_body, dict
):
return self.raw_error_body
return None
[docs]
class APIConnectionError(SuperbAIError):
def __init__(
self,
message: Union[str, dict] = "",
http_status=None,
code: Optional[int] = None,
error_body=None,
should_retry=False,
):
super().__init__(
message=message, http_status=http_status, code=code, error_body=error_body
)
self.should_retry = should_retry
# generic case
[docs]
class APIError(SuperbAIError):
pass
[docs]
class AuthenticationError(SuperbAIError):
"""HTTP CODE: 401"""
pass
[docs]
class BadRequestError(SuperbAIError):
"""HTTP CODE: 400"""
pass
[docs]
class ConflictError(SuperbAIError):
"""HTTP CODE: 409"""
pass
[docs]
class QuerySyntaxError(BadRequestError):
"""HTTP CODE: 400"""
pass
[docs]
class SystemError(SuperbAIError):
"""HTTP CODE: 500"""
pass
[docs]
class MaxFieldCountReachedError(SuperbAIError):
"""HTTP CODE: 403"""
pass
[docs]
class NotFoundError(SuperbAIError):
"""HTTP CODE: 404"""
pass
[docs]
class RetryableError(SuperbAIError):
pass
[docs]
class TooManyRequestsError(SuperbAIError):
"""HTTP CODE: 429"""
pass
# -- SDK ERRORS --
[docs]
class DependencyError(Exception):
pass
[docs]
class ValidationError(Exception):
pass