1# encoding: utf-8 2""" 3This file is backported from Python 3.5 http built-in module. 4""" 5 6from enum import IntEnum 7 8 9class HTTPStatus(IntEnum): 10 """HTTP status codes and reason phrases 11 12 Status codes from the following RFCs are all observed: 13 14 * RFC 7231: Hypertext Transfer Protocol (HTTP/1.1), obsoletes 2616 15 * RFC 6585: Additional HTTP Status Codes 16 * RFC 3229: Delta encoding in HTTP 17 * RFC 4918: HTTP Extensions for WebDAV, obsoletes 2518 18 * RFC 5842: Binding Extensions to WebDAV 19 * RFC 7238: Permanent Redirect 20 * RFC 2295: Transparent Content Negotiation in HTTP 21 * RFC 2774: An HTTP Extension Framework 22 """ 23 24 def __new__(cls, value, phrase, description=""): 25 obj = int.__new__(cls, value) 26 obj._value_ = value 27 28 obj.phrase = phrase 29 obj.description = description 30 return obj 31 32 def __str__(self): 33 return str(self.value) 34 35 # informational 36 CONTINUE = 100, "Continue", "Request received, please continue" 37 SWITCHING_PROTOCOLS = ( 38 101, 39 "Switching Protocols", 40 "Switching to new protocol; obey Upgrade header", 41 ) 42 PROCESSING = 102, "Processing" 43 44 # success 45 OK = 200, "OK", "Request fulfilled, document follows" 46 CREATED = 201, "Created", "Document created, URL follows" 47 ACCEPTED = (202, "Accepted", "Request accepted, processing continues off-line") 48 NON_AUTHORITATIVE_INFORMATION = ( 49 203, 50 "Non-Authoritative Information", 51 "Request fulfilled from cache", 52 ) 53 NO_CONTENT = 204, "No Content", "Request fulfilled, nothing follows" 54 RESET_CONTENT = 205, "Reset Content", "Clear input form for further input" 55 PARTIAL_CONTENT = 206, "Partial Content", "Partial content follows" 56 MULTI_STATUS = 207, "Multi-Status" 57 ALREADY_REPORTED = 208, "Already Reported" 58 IM_USED = 226, "IM Used" 59 60 # redirection 61 MULTIPLE_CHOICES = ( 62 300, 63 "Multiple Choices", 64 "Object has several resources -- see URI list", 65 ) 66 MOVED_PERMANENTLY = ( 67 301, 68 "Moved Permanently", 69 "Object moved permanently -- see URI list", 70 ) 71 FOUND = 302, "Found", "Object moved temporarily -- see URI list" 72 SEE_OTHER = 303, "See Other", "Object moved -- see Method and URL list" 73 NOT_MODIFIED = (304, "Not Modified", "Document has not changed since given time") 74 USE_PROXY = ( 75 305, 76 "Use Proxy", 77 "You must use proxy specified in Location to access this resource", 78 ) 79 TEMPORARY_REDIRECT = ( 80 307, 81 "Temporary Redirect", 82 "Object moved temporarily -- see URI list", 83 ) 84 PERMANENT_REDIRECT = ( 85 308, 86 "Permanent Redirect", 87 "Object moved temporarily -- see URI list", 88 ) 89 90 # client error 91 BAD_REQUEST = (400, "Bad Request", "Bad request syntax or unsupported method") 92 UNAUTHORIZED = (401, "Unauthorized", "No permission -- see authorization schemes") 93 PAYMENT_REQUIRED = (402, "Payment Required", "No payment -- see charging schemes") 94 FORBIDDEN = (403, "Forbidden", "Request forbidden -- authorization will not help") 95 NOT_FOUND = (404, "Not Found", "Nothing matches the given URI") 96 METHOD_NOT_ALLOWED = ( 97 405, 98 "Method Not Allowed", 99 "Specified method is invalid for this resource", 100 ) 101 NOT_ACCEPTABLE = (406, "Not Acceptable", "URI not available in preferred format") 102 PROXY_AUTHENTICATION_REQUIRED = ( 103 407, 104 "Proxy Authentication Required", 105 "You must authenticate with this proxy before proceeding", 106 ) 107 REQUEST_TIMEOUT = (408, "Request Timeout", "Request timed out; try again later") 108 CONFLICT = 409, "Conflict", "Request conflict" 109 GONE = (410, "Gone", "URI no longer exists and has been permanently removed") 110 LENGTH_REQUIRED = (411, "Length Required", "Client must specify Content-Length") 111 PRECONDITION_FAILED = ( 112 412, 113 "Precondition Failed", 114 "Precondition in headers is false", 115 ) 116 REQUEST_ENTITY_TOO_LARGE = (413, "Request Entity Too Large", "Entity is too large") 117 REQUEST_URI_TOO_LONG = (414, "Request-URI Too Long", "URI is too long") 118 UNSUPPORTED_MEDIA_TYPE = ( 119 415, 120 "Unsupported Media Type", 121 "Entity body in unsupported format", 122 ) 123 REQUESTED_RANGE_NOT_SATISFIABLE = ( 124 416, 125 "Requested Range Not Satisfiable", 126 "Cannot satisfy request range", 127 ) 128 EXPECTATION_FAILED = ( 129 417, 130 "Expectation Failed", 131 "Expect condition could not be satisfied", 132 ) 133 UNPROCESSABLE_ENTITY = 422, "Unprocessable Entity" 134 LOCKED = 423, "Locked" 135 FAILED_DEPENDENCY = 424, "Failed Dependency" 136 UPGRADE_REQUIRED = 426, "Upgrade Required" 137 PRECONDITION_REQUIRED = ( 138 428, 139 "Precondition Required", 140 "The origin server requires the request to be conditional", 141 ) 142 TOO_MANY_REQUESTS = ( 143 429, 144 "Too Many Requests", 145 "The user has sent too many requests in " 146 'a given amount of time ("rate limiting")', 147 ) 148 REQUEST_HEADER_FIELDS_TOO_LARGE = ( 149 431, 150 "Request Header Fields Too Large", 151 "The server is unwilling to process the request because its header " 152 "fields are too large", 153 ) 154 155 # server errors 156 INTERNAL_SERVER_ERROR = ( 157 500, 158 "Internal Server Error", 159 "Server got itself in trouble", 160 ) 161 NOT_IMPLEMENTED = (501, "Not Implemented", "Server does not support this operation") 162 BAD_GATEWAY = (502, "Bad Gateway", "Invalid responses from another server/proxy") 163 SERVICE_UNAVAILABLE = ( 164 503, 165 "Service Unavailable", 166 "The server cannot process the request due to a high load", 167 ) 168 GATEWAY_TIMEOUT = ( 169 504, 170 "Gateway Timeout", 171 "The gateway server did not receive a timely response", 172 ) 173 HTTP_VERSION_NOT_SUPPORTED = ( 174 505, 175 "HTTP Version Not Supported", 176 "Cannot fulfill request", 177 ) 178 VARIANT_ALSO_NEGOTIATES = 506, "Variant Also Negotiates" 179 INSUFFICIENT_STORAGE = 507, "Insufficient Storage" 180 LOOP_DETECTED = 508, "Loop Detected" 181 NOT_EXTENDED = 510, "Not Extended" 182 NETWORK_AUTHENTICATION_REQUIRED = ( 183 511, 184 "Network Authentication Required", 185 "The client needs to authenticate to gain network access", 186 ) 187