feat: Add 5xx error classes (#1066)
* feat: Add 501 Not Implemented error class * feat: Add 504 Gateway Timeout class * feat: Add 505 Version Not Supported class * refactor: Update tests to rebase on master * doc: Remove duplicates from docstrings
This commit is contained in:
parent
ef03f4c880
commit
fe1dfd0fad
148
falcon/errors.py
148
falcon/errors.py
|
@ -1250,6 +1250,57 @@ class HTTPInternalServerError(HTTPError):
|
||||||
description, **kwargs)
|
description, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class HTTPNotImplemented(HTTPError):
|
||||||
|
"""501 Not Implemented.
|
||||||
|
|
||||||
|
The 501 (Not Implemented) status code indicates that the server does
|
||||||
|
not support the functionality required to fulfill the request. This
|
||||||
|
is the appropriate response when the server does not recognize the
|
||||||
|
request method and is not capable of supporting it for any resource.
|
||||||
|
|
||||||
|
A 501 response is cacheable by default; i.e., unless otherwise
|
||||||
|
indicated by the method definition or explicit cache controls (see
|
||||||
|
Section 4.2.2 of [RFC7234]).
|
||||||
|
|
||||||
|
(See also: RFC 7231, Section 6.6.2)
|
||||||
|
|
||||||
|
Keyword Args:
|
||||||
|
title (str): Error title (default '500 Internal Server Error').
|
||||||
|
description (str): Human-friendly description of the error, along with
|
||||||
|
a helpful suggestion or two.
|
||||||
|
headers (dict or list): A ``dict`` of header names and values
|
||||||
|
to set, or a ``list`` of (*name*, *value*) tuples. Both *name* and
|
||||||
|
*value* must be of type ``str`` or ``StringType``, and only
|
||||||
|
character values 0x00 through 0xFF may be used on platforms that
|
||||||
|
use wide characters.
|
||||||
|
|
||||||
|
Note:
|
||||||
|
The Content-Type header, if present, will be overridden. If
|
||||||
|
you wish to return custom error messages, you can create
|
||||||
|
your own HTTP error class, and install an error handler
|
||||||
|
to convert it into an appropriate HTTP response for the
|
||||||
|
client
|
||||||
|
|
||||||
|
Note:
|
||||||
|
Falcon can process a list of ``tuple`` slightly faster
|
||||||
|
than a ``dict``.
|
||||||
|
|
||||||
|
href (str): A URL someone can visit to find out more information
|
||||||
|
(default ``None``). Unicode characters are percent-encoded.
|
||||||
|
href_text (str): If href is given, use this as the friendly
|
||||||
|
title/description for the link (default 'API documentation
|
||||||
|
for this error').
|
||||||
|
code (int): An internal code that customers can reference in their
|
||||||
|
support request or to help them when searching for knowledge
|
||||||
|
base articles related to this error (default ``None``).
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, title=None, description=None, **kwargs):
|
||||||
|
super(HTTPNotImplemented, self).__init__(status.HTTP_501, title,
|
||||||
|
description, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class HTTPBadGateway(HTTPError):
|
class HTTPBadGateway(HTTPError):
|
||||||
"""502 Bad Gateway.
|
"""502 Bad Gateway.
|
||||||
|
|
||||||
|
@ -1365,6 +1416,103 @@ class HTTPServiceUnavailable(HTTPError):
|
||||||
**kwargs)
|
**kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class HTTPGatewayTimeout(HTTPError):
|
||||||
|
"""504 Gateway Timeout.
|
||||||
|
|
||||||
|
The 504 (Gateway Timeout) status code indicates that the server,
|
||||||
|
while acting as a gateway or proxy, did not receive a timely response
|
||||||
|
from an upstream server it needed to access in order to complete the
|
||||||
|
request.
|
||||||
|
|
||||||
|
(See also: RFC 7231, Section 6.6.5)
|
||||||
|
|
||||||
|
Keyword Args:
|
||||||
|
title (str): Error title (default '503 Service Unavailable').
|
||||||
|
description (str): Human-friendly description of the error, along with
|
||||||
|
a helpful suggestion or two.
|
||||||
|
headers (dict or list): A ``dict`` of header names and values
|
||||||
|
to set, or a ``list`` of (*name*, *value*) tuples. Both *name* and
|
||||||
|
*value* must be of type ``str`` or ``StringType``, and only
|
||||||
|
character values 0x00 through 0xFF may be used on platforms that
|
||||||
|
use wide characters.
|
||||||
|
|
||||||
|
Note:
|
||||||
|
The Content-Type header, if present, will be overridden. If
|
||||||
|
you wish to return custom error messages, you can create
|
||||||
|
your own HTTP error class, and install an error handler
|
||||||
|
to convert it into an appropriate HTTP response for the
|
||||||
|
client
|
||||||
|
|
||||||
|
Note:
|
||||||
|
Falcon can process a list of ``tuple`` slightly faster
|
||||||
|
than a ``dict``.
|
||||||
|
|
||||||
|
href (str): A URL someone can visit to find out more information
|
||||||
|
(default ``None``). Unicode characters are percent-encoded.
|
||||||
|
href_text (str): If href is given, use this as the friendly
|
||||||
|
title/description for the link (default 'API documentation
|
||||||
|
for this error').
|
||||||
|
code (int): An internal code that customers can reference in their
|
||||||
|
support request or to help them when searching for knowledge
|
||||||
|
base articles related to this error (default ``None``).
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, title=None, description=None, **kwargs):
|
||||||
|
super(HTTPGatewayTimeout, self).__init__(status.HTTP_504, title,
|
||||||
|
description, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class HTTPVersionNotSupported(HTTPError):
|
||||||
|
"""505 HTTP Version Not Supported
|
||||||
|
|
||||||
|
The 505 (HTTP Version Not Supported) status code indicates that the
|
||||||
|
server does not support, or refuses to support, the major version of
|
||||||
|
HTTP that was used in the request message. The server is indicating
|
||||||
|
that it is unable or unwilling to complete the request using the same
|
||||||
|
major version as the client, as described in Section 2.6 of
|
||||||
|
[RFC7230], other than with this error message. The server SHOULD
|
||||||
|
generate a representation for the 505 response that describes why
|
||||||
|
that version is not supported and what other protocols are supported
|
||||||
|
by that server.
|
||||||
|
|
||||||
|
(See also: RFC 7231, Section 6.6.6)
|
||||||
|
|
||||||
|
Keyword Args:
|
||||||
|
title (str): Error title (default '503 Service Unavailable').
|
||||||
|
description (str): Human-friendly description of the error, along with
|
||||||
|
a helpful suggestion or two.
|
||||||
|
headers (dict or list): A ``dict`` of header names and values
|
||||||
|
to set, or a ``list`` of (*name*, *value*) tuples. Both *name* and
|
||||||
|
*value* must be of type ``str`` or ``StringType``, and only
|
||||||
|
character values 0x00 through 0xFF may be used on platforms that
|
||||||
|
use wide characters.
|
||||||
|
|
||||||
|
Note:
|
||||||
|
The Content-Type header, if present, will be overridden. If
|
||||||
|
you wish to return custom error messages, you can create
|
||||||
|
your own HTTP error class, and install an error handler
|
||||||
|
to convert it into an appropriate HTTP response for the
|
||||||
|
client
|
||||||
|
|
||||||
|
Note:
|
||||||
|
Falcon can process a list of ``tuple`` slightly faster
|
||||||
|
than a ``dict``.
|
||||||
|
|
||||||
|
href (str): A URL someone can visit to find out more information
|
||||||
|
(default ``None``). Unicode characters are percent-encoded.
|
||||||
|
href_text (str): If href is given, use this as the friendly
|
||||||
|
title/description for the link (default 'API documentation
|
||||||
|
for this error').
|
||||||
|
code (int): An internal code that customers can reference in their
|
||||||
|
support request or to help them when searching for knowledge
|
||||||
|
base articles related to this error (default ``None``).
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, title=None, description=None, **kwargs):
|
||||||
|
super(HTTPVersionNotSupported, self).__init__(status.HTTP_505, title,
|
||||||
|
description, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class HTTPInsufficientStorage(HTTPError):
|
class HTTPInsufficientStorage(HTTPError):
|
||||||
"""507 Insufficient Storage.
|
"""507 Insufficient Storage.
|
||||||
|
|
||||||
|
|
|
@ -122,9 +122,9 @@ HTTP_502 = '502 Bad Gateway'
|
||||||
HTTP_BAD_GATEWAY = HTTP_502
|
HTTP_BAD_GATEWAY = HTTP_502
|
||||||
HTTP_503 = '503 Service Unavailable'
|
HTTP_503 = '503 Service Unavailable'
|
||||||
HTTP_SERVICE_UNAVAILABLE = HTTP_503
|
HTTP_SERVICE_UNAVAILABLE = HTTP_503
|
||||||
HTTP_504 = '504 Gateway Time-out'
|
HTTP_504 = '504 Gateway Timeout'
|
||||||
HTTP_GATEWAY_TIMEOUT = HTTP_504
|
HTTP_GATEWAY_TIMEOUT = HTTP_504
|
||||||
HTTP_505 = '505 HTTP Version not supported'
|
HTTP_505 = '505 HTTP Version Not Supported'
|
||||||
HTTP_HTTP_VERSION_NOT_SUPPORTED = HTTP_505
|
HTTP_HTTP_VERSION_NOT_SUPPORTED = HTTP_505
|
||||||
HTTP_507 = '507 Insufficient Storage'
|
HTTP_507 = '507 Insufficient Storage'
|
||||||
HTTP_INSUFFICIENT_STORAGE = HTTP_507
|
HTTP_INSUFFICIENT_STORAGE = HTTP_507
|
||||||
|
|
|
@ -20,8 +20,11 @@ import falcon.status_codes as status
|
||||||
(falcon.HTTPRequestHeaderFieldsTooLarge, status.HTTP_431),
|
(falcon.HTTPRequestHeaderFieldsTooLarge, status.HTTP_431),
|
||||||
(falcon.HTTPUnavailableForLegalReasons, status.HTTP_451),
|
(falcon.HTTPUnavailableForLegalReasons, status.HTTP_451),
|
||||||
(falcon.HTTPInternalServerError, status.HTTP_500),
|
(falcon.HTTPInternalServerError, status.HTTP_500),
|
||||||
|
(falcon.HTTPNotImplemented, status.HTTP_501),
|
||||||
(falcon.HTTPBadGateway, status.HTTP_502),
|
(falcon.HTTPBadGateway, status.HTTP_502),
|
||||||
(falcon.HTTPServiceUnavailable, status.HTTP_503),
|
(falcon.HTTPServiceUnavailable, status.HTTP_503),
|
||||||
|
(falcon.HTTPGatewayTimeout, status.HTTP_504),
|
||||||
|
(falcon.HTTPVersionNotSupported, status.HTTP_505),
|
||||||
(falcon.HTTPInsufficientStorage, status.HTTP_507),
|
(falcon.HTTPInsufficientStorage, status.HTTP_507),
|
||||||
(falcon.HTTPLoopDetected, status.HTTP_508),
|
(falcon.HTTPLoopDetected, status.HTTP_508),
|
||||||
(falcon.HTTPNetworkAuthenticationRequired, status.HTTP_511),
|
(falcon.HTTPNetworkAuthenticationRequired, status.HTTP_511),
|
||||||
|
@ -49,9 +52,13 @@ def test_with_default_title_and_desc(err, title):
|
||||||
falcon.HTTPLocked,
|
falcon.HTTPLocked,
|
||||||
falcon.HTTPFailedDependency,
|
falcon.HTTPFailedDependency,
|
||||||
falcon.HTTPRequestHeaderFieldsTooLarge,
|
falcon.HTTPRequestHeaderFieldsTooLarge,
|
||||||
falcon.HTTPInternalServerError,
|
|
||||||
falcon.HTTPUnavailableForLegalReasons,
|
falcon.HTTPUnavailableForLegalReasons,
|
||||||
|
falcon.HTTPInternalServerError,
|
||||||
|
falcon.HTTPNotImplemented,
|
||||||
falcon.HTTPBadGateway,
|
falcon.HTTPBadGateway,
|
||||||
|
falcon.HTTPServiceUnavailable,
|
||||||
|
falcon.HTTPGatewayTimeout,
|
||||||
|
falcon.HTTPVersionNotSupported,
|
||||||
falcon.HTTPInsufficientStorage,
|
falcon.HTTPInsufficientStorage,
|
||||||
falcon.HTTPLoopDetected,
|
falcon.HTTPLoopDetected,
|
||||||
falcon.HTTPNetworkAuthenticationRequired,
|
falcon.HTTPNetworkAuthenticationRequired,
|
||||||
|
|
Loading…
Reference in New Issue