mirror of
https://github.com/kennethreitz/requests3.git
synced 2026-06-05 23:10:16 +00:00
19919b44c4
There was no way to determine what actual names were available outside
of looking at the source code. They were not listed in the documentation
or accessible through the interactive help.
In addition, doing `pydoc requests.status_codes` displayed some pretty
unhelpful information - the utf-8 encoding string was included in the
module name, there was no description, and internal variables used for
initialisation leaked into the module scope:
DATA
code = 511
codes = <lookup 'status_codes'>
title = 'network_authentication'
titles = ('network_authentication_required', 'network_auth', ...
This change prevents the internal variables from leaking, adds a
docstring (which has the side-effect of correcting the module name), and
appends information on the allowed status code names to the docstring
when the module is initialised.
The improved module documentation is then used in the API documentation
to provide another easy reference to the complete list of status codes.
120 lines
4.0 KiB
Python
120 lines
4.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
The ``codes`` object defines a mapping from common names for HTTP statuses
|
|
to their numerical codes, accessible either as attributes or as dictionary
|
|
items.
|
|
|
|
>>> 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',), # These 2 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('``%s``' % 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)))
|
|
|
|
_init()
|