status.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. """
  2. HTTP codes
  3. See HTTP Status Code Registry:
  4. https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
  5. And RFC 2324 - https://tools.ietf.org/html/rfc2324
  6. """
  7. from __future__ import annotations
  8. import warnings
  9. __all__ = (
  10. "HTTP_100_CONTINUE",
  11. "HTTP_101_SWITCHING_PROTOCOLS",
  12. "HTTP_102_PROCESSING",
  13. "HTTP_103_EARLY_HINTS",
  14. "HTTP_200_OK",
  15. "HTTP_201_CREATED",
  16. "HTTP_202_ACCEPTED",
  17. "HTTP_203_NON_AUTHORITATIVE_INFORMATION",
  18. "HTTP_204_NO_CONTENT",
  19. "HTTP_205_RESET_CONTENT",
  20. "HTTP_206_PARTIAL_CONTENT",
  21. "HTTP_207_MULTI_STATUS",
  22. "HTTP_208_ALREADY_REPORTED",
  23. "HTTP_226_IM_USED",
  24. "HTTP_300_MULTIPLE_CHOICES",
  25. "HTTP_301_MOVED_PERMANENTLY",
  26. "HTTP_302_FOUND",
  27. "HTTP_303_SEE_OTHER",
  28. "HTTP_304_NOT_MODIFIED",
  29. "HTTP_305_USE_PROXY",
  30. "HTTP_306_RESERVED",
  31. "HTTP_307_TEMPORARY_REDIRECT",
  32. "HTTP_308_PERMANENT_REDIRECT",
  33. "HTTP_400_BAD_REQUEST",
  34. "HTTP_401_UNAUTHORIZED",
  35. "HTTP_402_PAYMENT_REQUIRED",
  36. "HTTP_403_FORBIDDEN",
  37. "HTTP_404_NOT_FOUND",
  38. "HTTP_405_METHOD_NOT_ALLOWED",
  39. "HTTP_406_NOT_ACCEPTABLE",
  40. "HTTP_407_PROXY_AUTHENTICATION_REQUIRED",
  41. "HTTP_408_REQUEST_TIMEOUT",
  42. "HTTP_409_CONFLICT",
  43. "HTTP_410_GONE",
  44. "HTTP_411_LENGTH_REQUIRED",
  45. "HTTP_412_PRECONDITION_FAILED",
  46. "HTTP_413_REQUEST_ENTITY_TOO_LARGE",
  47. "HTTP_414_REQUEST_URI_TOO_LONG",
  48. "HTTP_415_UNSUPPORTED_MEDIA_TYPE",
  49. "HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE",
  50. "HTTP_417_EXPECTATION_FAILED",
  51. "HTTP_418_IM_A_TEAPOT",
  52. "HTTP_421_MISDIRECTED_REQUEST",
  53. "HTTP_422_UNPROCESSABLE_ENTITY",
  54. "HTTP_423_LOCKED",
  55. "HTTP_424_FAILED_DEPENDENCY",
  56. "HTTP_425_TOO_EARLY",
  57. "HTTP_426_UPGRADE_REQUIRED",
  58. "HTTP_428_PRECONDITION_REQUIRED",
  59. "HTTP_429_TOO_MANY_REQUESTS",
  60. "HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE",
  61. "HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS",
  62. "HTTP_500_INTERNAL_SERVER_ERROR",
  63. "HTTP_501_NOT_IMPLEMENTED",
  64. "HTTP_502_BAD_GATEWAY",
  65. "HTTP_503_SERVICE_UNAVAILABLE",
  66. "HTTP_504_GATEWAY_TIMEOUT",
  67. "HTTP_505_HTTP_VERSION_NOT_SUPPORTED",
  68. "HTTP_506_VARIANT_ALSO_NEGOTIATES",
  69. "HTTP_507_INSUFFICIENT_STORAGE",
  70. "HTTP_508_LOOP_DETECTED",
  71. "HTTP_510_NOT_EXTENDED",
  72. "HTTP_511_NETWORK_AUTHENTICATION_REQUIRED",
  73. "WS_1000_NORMAL_CLOSURE",
  74. "WS_1001_GOING_AWAY",
  75. "WS_1002_PROTOCOL_ERROR",
  76. "WS_1003_UNSUPPORTED_DATA",
  77. "WS_1005_NO_STATUS_RCVD",
  78. "WS_1006_ABNORMAL_CLOSURE",
  79. "WS_1007_INVALID_FRAME_PAYLOAD_DATA",
  80. "WS_1008_POLICY_VIOLATION",
  81. "WS_1009_MESSAGE_TOO_BIG",
  82. "WS_1010_MANDATORY_EXT",
  83. "WS_1011_INTERNAL_ERROR",
  84. "WS_1012_SERVICE_RESTART",
  85. "WS_1013_TRY_AGAIN_LATER",
  86. "WS_1014_BAD_GATEWAY",
  87. "WS_1015_TLS_HANDSHAKE",
  88. )
  89. HTTP_100_CONTINUE = 100
  90. HTTP_101_SWITCHING_PROTOCOLS = 101
  91. HTTP_102_PROCESSING = 102
  92. HTTP_103_EARLY_HINTS = 103
  93. HTTP_200_OK = 200
  94. HTTP_201_CREATED = 201
  95. HTTP_202_ACCEPTED = 202
  96. HTTP_203_NON_AUTHORITATIVE_INFORMATION = 203
  97. HTTP_204_NO_CONTENT = 204
  98. HTTP_205_RESET_CONTENT = 205
  99. HTTP_206_PARTIAL_CONTENT = 206
  100. HTTP_207_MULTI_STATUS = 207
  101. HTTP_208_ALREADY_REPORTED = 208
  102. HTTP_226_IM_USED = 226
  103. HTTP_300_MULTIPLE_CHOICES = 300
  104. HTTP_301_MOVED_PERMANENTLY = 301
  105. HTTP_302_FOUND = 302
  106. HTTP_303_SEE_OTHER = 303
  107. HTTP_304_NOT_MODIFIED = 304
  108. HTTP_305_USE_PROXY = 305
  109. HTTP_306_RESERVED = 306
  110. HTTP_307_TEMPORARY_REDIRECT = 307
  111. HTTP_308_PERMANENT_REDIRECT = 308
  112. HTTP_400_BAD_REQUEST = 400
  113. HTTP_401_UNAUTHORIZED = 401
  114. HTTP_402_PAYMENT_REQUIRED = 402
  115. HTTP_403_FORBIDDEN = 403
  116. HTTP_404_NOT_FOUND = 404
  117. HTTP_405_METHOD_NOT_ALLOWED = 405
  118. HTTP_406_NOT_ACCEPTABLE = 406
  119. HTTP_407_PROXY_AUTHENTICATION_REQUIRED = 407
  120. HTTP_408_REQUEST_TIMEOUT = 408
  121. HTTP_409_CONFLICT = 409
  122. HTTP_410_GONE = 410
  123. HTTP_411_LENGTH_REQUIRED = 411
  124. HTTP_412_PRECONDITION_FAILED = 412
  125. HTTP_413_REQUEST_ENTITY_TOO_LARGE = 413
  126. HTTP_414_REQUEST_URI_TOO_LONG = 414
  127. HTTP_415_UNSUPPORTED_MEDIA_TYPE = 415
  128. HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE = 416
  129. HTTP_417_EXPECTATION_FAILED = 417
  130. HTTP_418_IM_A_TEAPOT = 418
  131. HTTP_421_MISDIRECTED_REQUEST = 421
  132. HTTP_422_UNPROCESSABLE_ENTITY = 422
  133. HTTP_423_LOCKED = 423
  134. HTTP_424_FAILED_DEPENDENCY = 424
  135. HTTP_425_TOO_EARLY = 425
  136. HTTP_426_UPGRADE_REQUIRED = 426
  137. HTTP_428_PRECONDITION_REQUIRED = 428
  138. HTTP_429_TOO_MANY_REQUESTS = 429
  139. HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE = 431
  140. HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS = 451
  141. HTTP_500_INTERNAL_SERVER_ERROR = 500
  142. HTTP_501_NOT_IMPLEMENTED = 501
  143. HTTP_502_BAD_GATEWAY = 502
  144. HTTP_503_SERVICE_UNAVAILABLE = 503
  145. HTTP_504_GATEWAY_TIMEOUT = 504
  146. HTTP_505_HTTP_VERSION_NOT_SUPPORTED = 505
  147. HTTP_506_VARIANT_ALSO_NEGOTIATES = 506
  148. HTTP_507_INSUFFICIENT_STORAGE = 507
  149. HTTP_508_LOOP_DETECTED = 508
  150. HTTP_510_NOT_EXTENDED = 510
  151. HTTP_511_NETWORK_AUTHENTICATION_REQUIRED = 511
  152. """
  153. WebSocket codes
  154. https://www.iana.org/assignments/websocket/websocket.xml#close-code-number
  155. https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent
  156. """
  157. WS_1000_NORMAL_CLOSURE = 1000
  158. WS_1001_GOING_AWAY = 1001
  159. WS_1002_PROTOCOL_ERROR = 1002
  160. WS_1003_UNSUPPORTED_DATA = 1003
  161. WS_1005_NO_STATUS_RCVD = 1005
  162. WS_1006_ABNORMAL_CLOSURE = 1006
  163. WS_1007_INVALID_FRAME_PAYLOAD_DATA = 1007
  164. WS_1008_POLICY_VIOLATION = 1008
  165. WS_1009_MESSAGE_TOO_BIG = 1009
  166. WS_1010_MANDATORY_EXT = 1010
  167. WS_1011_INTERNAL_ERROR = 1011
  168. WS_1012_SERVICE_RESTART = 1012
  169. WS_1013_TRY_AGAIN_LATER = 1013
  170. WS_1014_BAD_GATEWAY = 1014
  171. WS_1015_TLS_HANDSHAKE = 1015
  172. __deprecated__ = {"WS_1004_NO_STATUS_RCVD": 1004, "WS_1005_ABNORMAL_CLOSURE": 1005}
  173. def __getattr__(name: str) -> int:
  174. deprecation_changes = {
  175. "WS_1004_NO_STATUS_RCVD": "WS_1005_NO_STATUS_RCVD",
  176. "WS_1005_ABNORMAL_CLOSURE": "WS_1006_ABNORMAL_CLOSURE",
  177. }
  178. deprecated = __deprecated__.get(name)
  179. if deprecated:
  180. warnings.warn(
  181. f"'{name}' is deprecated. Use '{deprecation_changes[name]}' instead.",
  182. category=DeprecationWarning,
  183. stacklevel=3,
  184. )
  185. return deprecated
  186. raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
  187. def __dir__() -> list[str]:
  188. return sorted(list(__all__) + list(__deprecated__.keys())) # pragma: no cover