1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
| 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()
|
|