| 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 = { |
| # Informational. |
| 100: ("continue",), |
| 101: ("switching_protocols",), |
| 102: ("processing",), |
| 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",), |
| # Redirection. |
| 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", |
| ), # "resume" and "resume_incomplete" to be removed in 3.0 |
| # Client Error. |
| 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",), |
| 414: ("request_uri_too_large",), |
| 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"), |
| 423: ("locked",), |
| 424: ("failed_dependency", "dependency"), |
| 425: ("unordered_collection", "unordered"), |
| 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",), |
| # Server Error. |
| 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() |