exceptions - standard error classes

Use these error types if you want to propagate errors across your apps.

If you want to create your own error class you should inherit it from ClientError or InternalError depending on what type of exception it is and then you should register it in ERROR_CLASSES registry so the RPC client will be able to reconstruct the exception from a json response.

from kaiju_tools.exceptions import ClientError, ERROR_CLASSES

class ClientIsBanned(ClientError):
  """Client account is banned."""

ERROR_CLASSES.register(ClientError)

The difference between ClientError and InternalError is that the former is not considered an error from the application perspective, i.e. it will not produce an error log and trace records.

ClientError

  • Does not print stack trace

  • Has ‘INFO’ log level

  • All error data is sent to the client

InternalError

  • May print stack trace

  • Has ‘ERROR’ log level

  • Error data is not sent to the client

Choose between these two base depending on your error purpose. If you raise an error to signal a client that something is wrong with the client input (validation, object not found or can’t be accessed, etc) you should use ClientError. For server errors use InternalError.

ERROR_CLASSES

Global registry of error classes, see ClassRegistry.

class APIException[source]

Bases: Serializable, Exception

Base exception.

You should use this class as a base when creating an exception which is meant to propagated across services, since this class is serializable.

status_code = 500

RPC error status code.

__init__(message: str = '', *, id: int | None = None, base_exc: Exception = None, debug: bool = False, data: dict = None, **extras)[source]

Initialize.

Parameters:
  • message – error messages

  • id – request id

  • base_exc – base exception object (when used as a wrapper)

  • debug – debug mode error

  • data – additional data

  • extras – will be merged with data

class ClientError[source]

Bases: APIException

Any kind of error happened because of a client’s actions.

status_code = 400

RPC error status code.

__init__(message: str = '', *, id: int | None = None, base_exc: Exception = None, debug: bool = False, data: dict = None, **extras)

Initialize.

Parameters:
  • message – error messages

  • id – request id

  • base_exc – base exception object (when used as a wrapper)

  • debug – debug mode error

  • data – additional data

  • extras – will be merged with data

class JSONParseError[source]

Bases: ClientError, ValueError

Wrongly formatted JSON data.

status_code = -32700

RPC error status code.

__init__(message: str = '', *, id: int | None = None, base_exc: Exception = None, debug: bool = False, data: dict = None, **extras)

Initialize.

Parameters:
  • message – error messages

  • id – request id

  • base_exc – base exception object (when used as a wrapper)

  • debug – debug mode error

  • data – additional data

  • extras – will be merged with data

class InvalidRequest[source]

Bases: JSONRPCError

Invalid RPC request format.

status_code = -32600

RPC error status code.

__init__(message: str = '', *, id: int | None = None, base_exc: Exception = None, debug: bool = False, data: dict = None, **extras)

Initialize.

Parameters:
  • message – error messages

  • id – request id

  • base_exc – base exception object (when used as a wrapper)

  • debug – debug mode error

  • data – additional data

  • extras – will be merged with data

class MethodNotFound[source]

Bases: JSONRPCError

RPC method does not exist or not available for this type of user.

status_code = -32601

RPC error status code.

__init__(message: str = '', *, id: int | None = None, base_exc: Exception = None, debug: bool = False, data: dict = None, **extras)

Initialize.

Parameters:
  • message – error messages

  • id – request id

  • base_exc – base exception object (when used as a wrapper)

  • debug – debug mode error

  • data – additional data

  • extras – will be merged with data

class InvalidParams[source]

Bases: JSONRPCError

JSONSchema validation error.

status_code = -32602

RPC error status code.

__init__(message: str = '', *, id: int | None = None, base_exc: Exception = None, debug: bool = False, data: dict = None, **extras)

Initialize.

Parameters:
  • message – error messages

  • id – request id

  • base_exc – base exception object (when used as a wrapper)

  • debug – debug mode error

  • data – additional data

  • extras – will be merged with data

class RequestTimeout[source]

Bases: ClientError

Request reached its timeout.

status_code = -32002

RPC error status code.

__init__(message: str = '', *, id: int | None = None, base_exc: Exception = None, debug: bool = False, data: dict = None, **extras)

Initialize.

Parameters:
  • message – error messages

  • id – request id

  • base_exc – base exception object (when used as a wrapper)

  • debug – debug mode error

  • data – additional data

  • extras – will be merged with data

class Aborted[source]

Bases: ClientError

Aborted by the server due to timeout or other conditions.

status_code = -32001

RPC error status code.

__init__(message: str = '', *, id: int | None = None, base_exc: Exception = None, debug: bool = False, data: dict = None, **extras)

Initialize.

Parameters:
  • message – error messages

  • id – request id

  • base_exc – base exception object (when used as a wrapper)

  • debug – debug mode error

  • data – additional data

  • extras – will be merged with data

class InternalError[source]

Bases: APIException

Any internal error happened on the server and not caused by a client.

status_code = -32603

RPC error status code.

__init__(message: str = '', *, id: int | None = None, base_exc: Exception = None, debug: bool = False, data: dict = None, **extras)

Initialize.

Parameters:
  • message – error messages

  • id – request id

  • base_exc – base exception object (when used as a wrapper)

  • debug – debug mode error

  • data – additional data

  • extras – will be merged with data

class HTTPRequestError[source]

Bases: InternalError

HTTP response error.

status_code = -32603

RPC error status code.

__init__(message: str = '', *, id: int | None = None, base_exc: Exception = None, debug: bool = False, data: dict = None, **extras)

Initialize.

Parameters:
  • message – error messages

  • id – request id

  • base_exc – base exception object (when used as a wrapper)

  • debug – debug mode error

  • data – additional data

  • extras – will be merged with data

class NotAuthorized[source]

Bases: ClientError

Authorization required.

status_code = -32000

RPC error status code.

__init__(message: str = '', *, id: int | None = None, base_exc: Exception = None, debug: bool = False, data: dict = None, **extras)

Initialize.

Parameters:
  • message – error messages

  • id – request id

  • base_exc – base exception object (when used as a wrapper)

  • debug – debug mode error

  • data – additional data

  • extras – will be merged with data

class NotFound[source]

Bases: ClientError

Requested object or resource doesn’t exist.

status_code = 404

RPC error status code.

__init__(message: str = '', *, id: int | None = None, base_exc: Exception = None, debug: bool = False, data: dict = None, **extras)

Initialize.

Parameters:
  • message – error messages

  • id – request id

  • base_exc – base exception object (when used as a wrapper)

  • debug – debug mode error

  • data – additional data

  • extras – will be merged with data

class Conflict[source]

Bases: ClientError

New object/data is in conflict with existing.

status_code = 409

RPC error status code.

__init__(message: str = '', *, id: int | None = None, base_exc: Exception = None, debug: bool = False, data: dict = None, **extras)

Initialize.

Parameters:
  • message – error messages

  • id – request id

  • base_exc – base exception object (when used as a wrapper)

  • debug – debug mode error

  • data – additional data

  • extras – will be merged with data

class FailedDependency[source]

Bases: APIException

Something.

status_code = 424

RPC error status code.

__init__(message: str = '', *, id: int | None = None, base_exc: Exception = None, debug: bool = False, data: dict = None, **extras)

Initialize.

Parameters:
  • message – error messages

  • id – request id

  • base_exc – base exception object (when used as a wrapper)

  • debug – debug mode error

  • data – additional data

  • extras – will be merged with data

class InvalidLicense[source]

Bases: ClientError

Invalid license exception.

status_code = 451

RPC error status code.

__init__(message: str = '', *, id: int | None = None, base_exc: Exception = None, debug: bool = False, data: dict = None, **extras)

Initialize.

Parameters:
  • message – error messages

  • id – request id

  • base_exc – base exception object (when used as a wrapper)

  • debug – debug mode error

  • data – additional data

  • extras – will be merged with data