HTTP_STATUS_CODES = {
# 1xx: Informational
100: '100 Continue',
101: '101 Switching Protocols',
102: '102 Processing',
# 2xx: Successful status codes.
200: '200 OK',
201: '201 Created',
202: '202 Accepted',
203: '203 Non-Authoritative Information',
204: '204 No Content',
205: '205 Reset Content',
206: '206 Partial Content',
207: '207 Multi-Status',
208: '208 Already Reported',
# 3xx: Redirections.
300: '300 Multiple Choices',
301: '301 Moved Permanently',
302: '302 Moved Temporarily',
303: '303 See Other',
304: '304 Not Modified',
305: '305 Use Proxy',
306: '306 Switch Proxy',
307: '307 Temporary Redirect',
308: '308 Permanent Redirect',
# 4xx: Client Errors.
400: '400 Bad Request',
401: '401 Unauthorized',
402: '402 Payment Required',
403: '403 Forbidden',
404: '404 Not Found',
405: '405 Method Not Allowed',
406: '406 Not Acceptable',
407: '407 Proxy Authentication Required',
408: '408 Request Timeout',
409: '409 Conflict',
410: '410 Gone',
411: '411 Length Required',
412: '412 Precondition Failed',
413: '413 Payload Too Large',
414: '414 URI Too Long',
415: '415 Unsupported Media Type',
416: '416 Range Not Satisfiable',
417: '417 Expectation Failed',
418: "418 I'm a teapot",
429: '429 Too Many Requests',
451: '451 Unavailable For Legal Reasons',
# 5xx: Server Errors.
500: '500 Internal Server Error',
501: '501 Not Implemented',
502: '502 Bad Gateway',
503: '503 Service Unavailable',
504: '504 Gateway Timeout',
505: '505 HTTP Version Not Supported',
506: '506 Variant Also Negotiates',
507: '507 Insufficient Storage',
508: '508 Loop Detected',
510: '510 Not Extended',
511: '511 Network Authentication Required',
}
HTTP_GATEWAY_ERRORS = {502, 503, 504}
"""Status codes used for HTTP Gateway errors."""
RATE_LIMIT_ERRORS = {415, 429}
"""Status codes used for rate limiting errors."""
SERVER_ERRORS = {500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511}
"""Status codes used for all server-side errors."""
[docs]
def get_status_text(status_code: int) -> str:
"""
Gets a human-friendly description of the status code.
Example::
>>> get_status_text(404)
'404 Not Found'
:param status_code: Status code.
:return: Status code description, or status code itself when a non-standard status code is passed.
"""
key = int(status_code)
if key in HTTP_STATUS_CODES:
return HTTP_STATUS_CODES[key]
else:
return str(status_code)
[docs]
def is_gateway_error(status_code: int) -> bool:
"""
Checks if the given status code is a gateway error.
:param status_code: Status code.
:return: ``True`` if the status code represents a gateway error.
"""
return status_code in HTTP_GATEWAY_ERRORS
[docs]
def is_server_error(status_code):
"""
Checks if the given status code is a server error.
:param status_code: Status code.
:return: ``True`` if the status code represents a server error.
"""
return status_code in SERVER_ERRORS
[docs]
def is_rate_limit_error(status_code):
"""
Checks if the given status code is a rate limiting error.
:param status_code: Status code.
:return: ``True`` if the status code represents a commonly used rate limiting error.
"""
return status_code in RATE_LIMIT_ERRORS