APIException
Documentation for the `APIException` class.
Namespace blazingapi.exceptions
The APIException
class is the base class for all exceptions that can be raised by the API.
All exceptions that inherit from APIException
will be caught by the underlying API and will return a JSON response with the exception message and status code.
Important to know
If an exception that DOES NOT inherit from APIException
is raised, the underlying API will return a 500 status code and a generic error message.
Class Definition
import sys
import traceback
from blazingapi.settings import settings
class APIException(Exception):
status_code = 500
default_detail = 'A server error occurred.'
default_code = 'error'
def __init__(self, detail=None, status_code=None):
if detail is not None:
self.detail = detail
else:
self.detail = self.default_detail
if status_code is not None:
self.status_code = status_code
super().__init__(self.detail)
def serialize(self, request=None):
result = {
"code": self.default_code,
"detail": self.detail
}
if settings.DEBUG:
result["debug"] = {
"info": "You are seeing this because you have DEBUG=True in your settings.py file.",
"traceback": self._get_traceback()
}
if request is not None and isinstance(request, Request):
result["debug"]["request"] = {
"method": request.method,
"path": request.path,
"headers": {k: v for k, v in request.headers.items()},
"body": request.data
}
return result
def _get_traceback(self):
exc_type, exc_value, tb = sys.exc_info()
tb_list = traceback.format_exception(exc_type, exc_value, tb)
return tb_list