from structures import lookupdict codes informational 100 continue 101 switchingprotocols 102 processing 103 checkpoint 122 uritoolong requesturitoolong 200 ok okay allok allokay allgood o 201 created 202 accepted 203 nonitativeinfo nonitativeinformation 204 nocontent 205 resetcontent reset 206 partialcontent partial 207 multistatus multiplestatus multistati multiplestati 208 alreadyreported 226 imused redirection 300 multiplechoices 301 movedpermanently moved o 302 found 303 seeother other 304 notmodified 305 useproxy 306 switchproxy 307 temporaryredirect temporarymoved temporary 308 permanentredirect resumeincomplete resume resume and resumeincomplete to be removed in 3 0 client error 400 badrequest bad 401 unized 402 paymentrequired payment 403 forbidden 404 notfound o 405 methodnotallowed notallowed 406 notacceptable 407 proxyauthenticationrequired proxyauth proxyauthentication 408 requesttimeout timeout 409 conflict 410 gone 411 lengthrequired 412 preconditionfailed precondition 413 requestentitytoolarge 414 requesturitoolarge 415 unsupportedmediatype unsupportedmedia mediatype 416 requestedrangenotsatisfiable requestedrange rangenotsatisfiable 417 expectationfailed 418 imateapot teapot iamateapot 421 misdirectedrequest 422 unprocessableentity unprocessable 423 locked 424 faileddependency dependency 425 unorderedcollection unordered 426 upgraderequired upgrade 428 preconditionrequired precondition 429 toomanyrequests toomany 431 headerfieldstoolarge fieldstoolarge 444 noresponse none 449 retrywith retry 450 blockedbywindowsparentalcontrols parentalcontrols 451 unavailableforlegalreasons legalreasons 499 clientclosedrequest server error 500 internalservererror servererror o 501 notimplemented 502 badgateway 503 serviceunavailable unavailable 504 gatewaytimeout 505 httpversionnotsupported httpversion 506 variantalsonegotiates 507 insufficientstorage 509 bandwidthlimitexceeded bandwidth 510 notextended 511 networkauthenticationrequired networkauth networkauthentication codes lookupdictnamestatuscodes def init for code titles in codes items for title in titles setattrcodes title code if not title startswith setattrcodes title upper code def doccode names joinfn for n in codescode return d s code names global doc doc doc n n joindoccode for code in sortedcodes if doc is not none else none init 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 informational redirection resume and resume_incomplete to be removed in 3 0 client error server error
r

from .structures import LookupDict

_codes = {
    
    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",),
    
    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",),
    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",),
    
    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()