"""JSON-based Exception classes which generate proper HTTP Status Codes."""
[docs]class EndpointException(Exception):
"""Base class for all Exceptions."""
def __init__(self, message=None, payload=None):
super(EndpointException, self).__init__(message)
self.message = message
self.payload = payload
[docs] def to_dict(self):
"""Return a dictionary representation of the exception."""
as_dict = dict(self.payload or ())
as_dict['message'] = self.message
return as_dict
[docs]class BadRequestException(EndpointException):
"""Raised when a request contains illegal arguments, is missing arguments,
can't be decoded properly, or the request is trying to do something that
doesn't make sense."""
code = 400
[docs]class ForbiddenException(EndpointException):
"""Raised when a request asks us to do something that we won't do because it
violates the application logic.
*Does not refer to an authentication failure.* Rather, it means the action
requested is forbidden by the application."""
code = 403
[docs]class NotFoundException(EndpointException):
"""Raised when the endpoint (or a resource it refers to) is not found. Can
also be used if a resource referred to in a request (e.g. a specific job in
a /job_status request) can not be found."""
code = 404
[docs]class NotAcceptableException(EndpointException):
"""Raised when the client does not Accept any of the Content-Types we are
capable of generating."""
code = 406
[docs]class ConflictException(EndpointException):
"""Similar to a ServerErrorException (HTTP 500) but there is some action the
client may take to resolve the conflict, after which the request can be
resubmitted. A request to reprocess a job not marked for reprocessing, for
example, could cause this exception to be raised."""
code = 409
[docs]class ServerErrorException(EndpointException):
"""Raised when the application itself encounters an error not related to the
request itself (for example, a database error)."""
code = 500
[docs]class NotImplementedException(EndpointException):
"""Raised when the application does not implement the functionality being
requested. Note that this doesn't refer to an HTTP method not being
implemented for a given endpoint (which would be a 405 error)."""
code = 501
[docs]class ServiceUnavailableException(EndpointException):
"""Raised when a resource is temporarily unavailable (e.g. not being able to
get a database connection). Setting the *Retry-After* header gives the
length of the delay, if it is known. Otherwise, this is treated as a 500
error."""
code = 503