# -*- coding: utf-8 -*-
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 ' , ) , # 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 ) )
if __doc__ is not None else None )
_init ( )