Coverage for nexios\status.py: 92%

92 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-05-21 20:31 +0100

1""" 

2HTTP codes 

3See HTTP Status Code Registry: 

4https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml 

5 

6And RFC 2324 - https://tools.ietf.org/html/rfc2324 

7""" 

8 

9from __future__ import annotations 

10 

11import warnings 

12 

13__all__ = ( 

14 "HTTP_100_CONTINUE", 

15 "HTTP_101_SWITCHING_PROTOCOLS", 

16 "HTTP_102_PROCESSING", 

17 "HTTP_103_EARLY_HINTS", 

18 "HTTP_200_OK", 

19 "HTTP_201_CREATED", 

20 "HTTP_202_ACCEPTED", 

21 "HTTP_203_NON_AUTHORITATIVE_INFORMATION", 

22 "HTTP_204_NO_CONTENT", 

23 "HTTP_205_RESET_CONTENT", 

24 "HTTP_206_PARTIAL_CONTENT", 

25 "HTTP_207_MULTI_STATUS", 

26 "HTTP_208_ALREADY_REPORTED", 

27 "HTTP_226_IM_USED", 

28 "HTTP_300_MULTIPLE_CHOICES", 

29 "HTTP_301_MOVED_PERMANENTLY", 

30 "HTTP_302_FOUND", 

31 "HTTP_303_SEE_OTHER", 

32 "HTTP_304_NOT_MODIFIED", 

33 "HTTP_305_USE_PROXY", 

34 "HTTP_306_RESERVED", 

35 "HTTP_307_TEMPORARY_REDIRECT", 

36 "HTTP_308_PERMANENT_REDIRECT", 

37 "HTTP_400_BAD_REQUEST", 

38 "HTTP_401_UNAUTHORIZED", 

39 "HTTP_402_PAYMENT_REQUIRED", 

40 "HTTP_403_FORBIDDEN", 

41 "HTTP_404_NOT_FOUND", 

42 "HTTP_405_METHOD_NOT_ALLOWED", 

43 "HTTP_406_NOT_ACCEPTABLE", 

44 "HTTP_407_PROXY_AUTHENTICATION_REQUIRED", 

45 "HTTP_408_REQUEST_TIMEOUT", 

46 "HTTP_409_CONFLICT", 

47 "HTTP_410_GONE", 

48 "HTTP_411_LENGTH_REQUIRED", 

49 "HTTP_412_PRECONDITION_FAILED", 

50 "HTTP_413_REQUEST_ENTITY_TOO_LARGE", 

51 "HTTP_414_REQUEST_URI_TOO_LONG", 

52 "HTTP_415_UNSUPPORTED_MEDIA_TYPE", 

53 "HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE", 

54 "HTTP_417_EXPECTATION_FAILED", 

55 "HTTP_418_IM_A_TEAPOT", 

56 "HTTP_421_MISDIRECTED_REQUEST", 

57 "HTTP_422_UNPROCESSABLE_ENTITY", 

58 "HTTP_423_LOCKED", 

59 "HTTP_424_FAILED_DEPENDENCY", 

60 "HTTP_425_TOO_EARLY", 

61 "HTTP_426_UPGRADE_REQUIRED", 

62 "HTTP_428_PRECONDITION_REQUIRED", 

63 "HTTP_429_TOO_MANY_REQUESTS", 

64 "HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE", 

65 "HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS", 

66 "HTTP_500_INTERNAL_SERVER_ERROR", 

67 "HTTP_501_NOT_IMPLEMENTED", 

68 "HTTP_502_BAD_GATEWAY", 

69 "HTTP_503_SERVICE_UNAVAILABLE", 

70 "HTTP_504_GATEWAY_TIMEOUT", 

71 "HTTP_505_HTTP_VERSION_NOT_SUPPORTED", 

72 "HTTP_506_VARIANT_ALSO_NEGOTIATES", 

73 "HTTP_507_INSUFFICIENT_STORAGE", 

74 "HTTP_508_LOOP_DETECTED", 

75 "HTTP_510_NOT_EXTENDED", 

76 "HTTP_511_NETWORK_AUTHENTICATION_REQUIRED", 

77 "WS_1000_NORMAL_CLOSURE", 

78 "WS_1001_GOING_AWAY", 

79 "WS_1002_PROTOCOL_ERROR", 

80 "WS_1003_UNSUPPORTED_DATA", 

81 "WS_1005_NO_STATUS_RCVD", 

82 "WS_1006_ABNORMAL_CLOSURE", 

83 "WS_1007_INVALID_FRAME_PAYLOAD_DATA", 

84 "WS_1008_POLICY_VIOLATION", 

85 "WS_1009_MESSAGE_TOO_BIG", 

86 "WS_1010_MANDATORY_EXT", 

87 "WS_1011_INTERNAL_ERROR", 

88 "WS_1012_SERVICE_RESTART", 

89 "WS_1013_TRY_AGAIN_LATER", 

90 "WS_1014_BAD_GATEWAY", 

91 "WS_1015_TLS_HANDSHAKE", 

92) 

93 

94HTTP_100_CONTINUE = 100 

95HTTP_101_SWITCHING_PROTOCOLS = 101 

96HTTP_102_PROCESSING = 102 

97HTTP_103_EARLY_HINTS = 103 

98HTTP_200_OK = 200 

99HTTP_201_CREATED = 201 

100HTTP_202_ACCEPTED = 202 

101HTTP_203_NON_AUTHORITATIVE_INFORMATION = 203 

102HTTP_204_NO_CONTENT = 204 

103HTTP_205_RESET_CONTENT = 205 

104HTTP_206_PARTIAL_CONTENT = 206 

105HTTP_207_MULTI_STATUS = 207 

106HTTP_208_ALREADY_REPORTED = 208 

107HTTP_226_IM_USED = 226 

108HTTP_300_MULTIPLE_CHOICES = 300 

109HTTP_301_MOVED_PERMANENTLY = 301 

110HTTP_302_FOUND = 302 

111HTTP_303_SEE_OTHER = 303 

112HTTP_304_NOT_MODIFIED = 304 

113HTTP_305_USE_PROXY = 305 

114HTTP_306_RESERVED = 306 

115HTTP_307_TEMPORARY_REDIRECT = 307 

116HTTP_308_PERMANENT_REDIRECT = 308 

117HTTP_400_BAD_REQUEST = 400 

118HTTP_401_UNAUTHORIZED = 401 

119HTTP_402_PAYMENT_REQUIRED = 402 

120HTTP_403_FORBIDDEN = 403 

121HTTP_404_NOT_FOUND = 404 

122HTTP_405_METHOD_NOT_ALLOWED = 405 

123HTTP_406_NOT_ACCEPTABLE = 406 

124HTTP_407_PROXY_AUTHENTICATION_REQUIRED = 407 

125HTTP_408_REQUEST_TIMEOUT = 408 

126HTTP_409_CONFLICT = 409 

127HTTP_410_GONE = 410 

128HTTP_411_LENGTH_REQUIRED = 411 

129HTTP_412_PRECONDITION_FAILED = 412 

130HTTP_413_REQUEST_ENTITY_TOO_LARGE = 413 

131HTTP_414_REQUEST_URI_TOO_LONG = 414 

132HTTP_415_UNSUPPORTED_MEDIA_TYPE = 415 

133HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE = 416 

134HTTP_417_EXPECTATION_FAILED = 417 

135HTTP_418_IM_A_TEAPOT = 418 

136HTTP_421_MISDIRECTED_REQUEST = 421 

137HTTP_422_UNPROCESSABLE_ENTITY = 422 

138HTTP_423_LOCKED = 423 

139HTTP_424_FAILED_DEPENDENCY = 424 

140HTTP_425_TOO_EARLY = 425 

141HTTP_426_UPGRADE_REQUIRED = 426 

142HTTP_428_PRECONDITION_REQUIRED = 428 

143HTTP_429_TOO_MANY_REQUESTS = 429 

144HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE = 431 

145HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS = 451 

146HTTP_500_INTERNAL_SERVER_ERROR = 500 

147HTTP_501_NOT_IMPLEMENTED = 501 

148HTTP_502_BAD_GATEWAY = 502 

149HTTP_503_SERVICE_UNAVAILABLE = 503 

150HTTP_504_GATEWAY_TIMEOUT = 504 

151HTTP_505_HTTP_VERSION_NOT_SUPPORTED = 505 

152HTTP_506_VARIANT_ALSO_NEGOTIATES = 506 

153HTTP_507_INSUFFICIENT_STORAGE = 507 

154HTTP_508_LOOP_DETECTED = 508 

155HTTP_510_NOT_EXTENDED = 510 

156HTTP_511_NETWORK_AUTHENTICATION_REQUIRED = 511 

157 

158 

159""" 

160WebSocket codes 

161https://www.iana.org/assignments/websocket/websocket.xml#close-code-number 

162https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent 

163""" 

164WS_1000_NORMAL_CLOSURE = 1000 

165WS_1001_GOING_AWAY = 1001 

166WS_1002_PROTOCOL_ERROR = 1002 

167WS_1003_UNSUPPORTED_DATA = 1003 

168WS_1005_NO_STATUS_RCVD = 1005 

169WS_1006_ABNORMAL_CLOSURE = 1006 

170WS_1007_INVALID_FRAME_PAYLOAD_DATA = 1007 

171WS_1008_POLICY_VIOLATION = 1008 

172WS_1009_MESSAGE_TOO_BIG = 1009 

173WS_1010_MANDATORY_EXT = 1010 

174WS_1011_INTERNAL_ERROR = 1011 

175WS_1012_SERVICE_RESTART = 1012 

176WS_1013_TRY_AGAIN_LATER = 1013 

177WS_1014_BAD_GATEWAY = 1014 

178WS_1015_TLS_HANDSHAKE = 1015 

179 

180 

181__deprecated__ = {"WS_1004_NO_STATUS_RCVD": 1004, "WS_1005_ABNORMAL_CLOSURE": 1005} 

182 

183 

184def __getattr__(name: str) -> int: 

185 deprecation_changes = { 

186 "WS_1004_NO_STATUS_RCVD": "WS_1005_NO_STATUS_RCVD", 

187 "WS_1005_ABNORMAL_CLOSURE": "WS_1006_ABNORMAL_CLOSURE", 

188 } 

189 deprecated = __deprecated__.get(name) 

190 if deprecated: 

191 warnings.warn( 

192 f"'{name}' is deprecated. Use '{deprecation_changes[name]}' instead.", 

193 category=DeprecationWarning, 

194 stacklevel=3, 

195 ) 

196 return deprecated 

197 raise AttributeError(f"module '{__name__}' has no attribute '{name}'") 

198 

199 

200def __dir__() -> list[str]: 

201 return sorted(list(__all__) + list(__deprecated__.keys()))