| | r""" |
| | The ``codes`` object defines a mapping from common names for HTTP statuses |
| | to their numerical codes, accessible either as attributes or as dictionary |
| | items. |
| | |
| | Example:: |
| | |
| | >>> import requests |
| | >>> requests.codes['temporary_redirect'] |
| | 307 |
| | >>> requests.codes.teapot |
| | 418 |
| | >>> requests.codes['\o/'] |
| | 200 |
| | |
| | Some codes have multiple names, and both upper- and lower-case versions of |
| | the names are allowed. For example, ``codes.ok``, ``codes.OK``, and |
| | ``codes.okay`` all correspond to the HTTP status code 200. |
| | """ |
| |
|
| | from .structures import LookupDict |
| |
|
| | _codes = { |
| | |
| | 100: ("continue",), |
| | 101: ("switching_protocols",), |
| | 102: ("processing", "early-hints"), |
| | 103: ("checkpoint",), |
| | 122: ("uri_too_long", "request_uri_too_long"), |
| | 200: ("ok", "okay", "all_ok", "all_okay", "all_good", "\\o/", "✓"), |
| | 201: ("created",), |
| | 202: ("accepted",), |
| | 203: ("non_authoritative_info", "non_authoritative_information"), |
| | 204: ("no_content",), |
| | 205: ("reset_content", "reset"), |
| | 206: ("partial_content", "partial"), |
| | 207: ("multi_status", "multiple_status", "multi_stati", "multiple_stati"), |
| | 208: ("already_reported",), |
| | 226: ("im_used",), |
| | |
| | 300: ("multiple_choices",), |
| | 301: ("moved_permanently", "moved", "\\o-"), |
| | 302: ("found",), |
| | 303: ("see_other", "other"), |
| | 304: ("not_modified",), |
| | 305: ("use_proxy",), |
| | 306: ("switch_proxy",), |
| | 307: ("temporary_redirect", "temporary_moved", "temporary"), |
| | 308: ( |
| | "permanent_redirect", |
| | "resume_incomplete", |
| | "resume", |
| | ), |
| | |
| | 400: ("bad_request", "bad"), |
| | 401: ("unauthorized",), |
| | 402: ("payment_required", "payment"), |
| | 403: ("forbidden",), |
| | 404: ("not_found", "-o-"), |
| | 405: ("method_not_allowed", "not_allowed"), |
| | 406: ("not_acceptable",), |
| | 407: ("proxy_authentication_required", "proxy_auth", "proxy_authentication"), |
| | 408: ("request_timeout", "timeout"), |
| | 409: ("conflict",), |
| | 410: ("gone",), |
| | 411: ("length_required",), |
| | 412: ("precondition_failed", "precondition"), |
| | 413: ("request_entity_too_large", "content_too_large"), |
| | 414: ("request_uri_too_large", "uri_too_long"), |
| | 415: ("unsupported_media_type", "unsupported_media", "media_type"), |
| | 416: ( |
| | "requested_range_not_satisfiable", |
| | "requested_range", |
| | "range_not_satisfiable", |
| | ), |
| | 417: ("expectation_failed",), |
| | 418: ("im_a_teapot", "teapot", "i_am_a_teapot"), |
| | 421: ("misdirected_request",), |
| | 422: ("unprocessable_entity", "unprocessable", "unprocessable_content"), |
| | 423: ("locked",), |
| | 424: ("failed_dependency", "dependency"), |
| | 425: ("unordered_collection", "unordered", "too_early"), |
| | 426: ("upgrade_required", "upgrade"), |
| | 428: ("precondition_required", "precondition"), |
| | 429: ("too_many_requests", "too_many"), |
| | 431: ("header_fields_too_large", "fields_too_large"), |
| | 444: ("no_response", "none"), |
| | 449: ("retry_with", "retry"), |
| | 450: ("blocked_by_windows_parental_controls", "parental_controls"), |
| | 451: ("unavailable_for_legal_reasons", "legal_reasons"), |
| | 499: ("client_closed_request",), |
| | |
| | 500: ("internal_server_error", "server_error", "/o\\", "✗"), |
| | 501: ("not_implemented",), |
| | 502: ("bad_gateway",), |
| | 503: ("service_unavailable", "unavailable"), |
| | 504: ("gateway_timeout",), |
| | 505: ("http_version_not_supported", "http_version"), |
| | 506: ("variant_also_negotiates",), |
| | 507: ("insufficient_storage",), |
| | 509: ("bandwidth_limit_exceeded", "bandwidth"), |
| | 510: ("not_extended",), |
| | 511: ("network_authentication_required", "network_auth", "network_authentication"), |
| | } |
| |
|
| | codes = LookupDict(name="status_codes") |
| |
|
| |
|
| | def _init(): |
| | for code, titles in _codes.items(): |
| | for title in titles: |
| | setattr(codes, title, code) |
| | if not title.startswith(("\\", "/")): |
| | setattr(codes, title.upper(), code) |
| |
|
| | def doc(code): |
| | names = ", ".join(f"``{n}``" for n in _codes[code]) |
| | return "* %d: %s" % (code, names) |
| |
|
| | global __doc__ |
| | __doc__ = ( |
| | __doc__ + "\n" + "\n".join(doc(code) for code in sorted(_codes)) |
| | if __doc__ is not None |
| | else None |
| | ) |
| |
|
| |
|
| | _init() |
| |
|