#!/usr/bin/env python3 # -*- coding: utf-8 -*- import dataclasses from enum import Enum class CustomCodeBase(Enum): @property def code(self) -> int: return self.value[0] @property def msg(self) -> str: return self.value[1] class CustomResponseCode(CustomCodeBase): HTTP_200 = (200, 'Request successful') HTTP_201 = (201, 'Resource created') HTTP_202 = (202, 'Request accepted but not completed yet') HTTP_204 = (204, 'Request successful but no content returned') HTTP_400 = (400, 'Bad request') HTTP_401 = (401, 'Unauthorized') HTTP_403 = (403, 'Forbidden') HTTP_404 = (404, 'Resource not found') HTTP_410 = (410, 'Resource permanently deleted') HTTP_422 = (422, 'Invalid parameters') HTTP_425 = (425, 'Too early, server can’t handle it') HTTP_429 = (429, 'Too many requests') HTTP_500 = (500, 'Internal server error') HTTP_502 = (502, 'Bad gateway') HTTP_503 = (503, 'Service unavailable') HTTP_504 = (504, 'Gateway timeout') class CustomErrorCode(CustomCodeBase): CAPTCHA_ERROR = (40001, 'The verification code is incorrect') @dataclasses.dataclass class CustomResponse: """ Provides an open-style response structure. Useful if you want to define response code & message freely. """ code: int msg: str class StandardResponseCode: """ HTTP codes See HTTP Status Code Registry: https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml And RFC 2324 - https://tools.ietf.org/html/rfc2324 """ HTTP_100 = 100 # CONTINUE: HTTP_101 = 101 # SWITCHING_PROTOCOLS: HTTP_102 = 102 # PROCESSING: HTTP_103 = 103 # EARLY_HINTS: HTTP_200 = 200 # OK: HTTP_201 = 201 # CREATED: HTTP_202 = 202 # ACCEPTED: HTTP_203 = 203 # NON_AUTHORITATIVE_INFORMATION: HTTP_204 = 204 # NO_CONTENT: HTTP_205 = 205 # RESET_CONTENT: HTTP_206 = 206 # PARTIAL_CONTENT: HTTP_207 = 207 # MULTI_STATUS: HTTP_208 = 208 # ALREADY_REPORTED: HTTP_226 = 226 # IM_USED: HTTP_300 = 300 # MULTIPLE_CHOICES: HTTP_301 = 301 # MOVED_PERMANENTLY: HTTP_302 = 302 # FOUND: HTTP_303 = 303 # SEE_OTHER: HTTP_304 = 304 # NOT_MODIFIED: HTTP_305 = 305 # USE_PROXY: HTTP_307 = 307 # TEMPORARY_REDIRECT: HTTP_308 = 308 # PERMANENT_REDIRECT: HTTP_400 = 400 # BAD_REQUEST: HTTP_401 = 401 # UNAUTHORIZED: HTTP_402 = 402 # PAYMENT_REQUIRED: HTTP_403 = 403 # FORBIDDEN: HTTP_404 = 404 # NOT_FOUND: HTTP_405 = 405 # METHOD_NOT_ALLOWED: HTTP_406 = 406 # NOT_ACCEPTABLE: HTTP_407 = 407 # PROXY_AUTHENTICATION_REQUIRED: HTTP_408 = 408 # REQUEST_TIMEOUT: HTTP_409 = 409 # CONFLICT: HTTP_410 = 410 # GONE: HTTP_411 = 411 # LENGTH_REQUIRED: HTTP_412 = 412 # PRECONDITION_FAILED: HTTP_413 = 413 # REQUEST_ENTITY_TOO_LARGE: HTTP_414 = 414 # REQUEST_URI_TOO_LONG: HTTP_415 = 415 # UNSUPPORTED_MEDIA_TYPE: HTTP_416 = 416 # REQUESTED_RANGE_NOT_SATISFIABLE: HTTP_417 = 417 # EXPECTATION_FAILED: HTTP_418 = 418 # UNUSED: HTTP_421 = 421 # MISDIRECTED_REQUEST: HTTP_422 = 422 # UNPROCESSABLE_CONTENT: HTTP_423 = 423 # LOCKED: HTTP_424 = 424 # FAILED_DEPENDENCY: HTTP_425 = 425 # TOO_EARLY: HTTP_426 = 426 # UPGRADE_REQUIRED: HTTP_427 = 427 # UNASSIGNED: HTTP_428 = 428 # PRECONDITION_REQUIRED: HTTP_429 = 429 # TOO_MANY_REQUESTS: HTTP_430 = 430 # Unassigned: HTTP_431 = 431 # REQUEST_HEADER_FIELDS_TOO_LARGE: HTTP_451 = 451 # UNAVAILABLE_FOR_LEGAL_REASONS: HTTP_500 = 500 # INTERNAL_SERVER_ERROR: HTTP_501 = 501 # NOT_IMPLEMENTED: HTTP_502 = 502 # BAD_GATEWAY: HTTP_503 = 503 # SERVICE_UNAVAILABLE: HTTP_504 = 504 # GATEWAY_TIMEOUT: HTTP_505 = 505 # HTTP_VERSION_NOT_SUPPORTED: HTTP HTTP_506 = 506 # VARIANT_ALSO_NEGOTIATES: HTTP_507 = 507 # INSUFFICIENT_STORAGE: HTTP_508 = 508 # LOOP_DETECTED: HTTP_509 = 509 # UNASSIGNED: HTTP_510 = 510 # NOT_EXTENDED: HTTP_511 = 511 # NETWORK_AUTHENTICATION_REQUIRED: """ WebSocket codes https://www.iana.org/assignments/websocket/websocket.xml#close-code-number https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent """ WS_1000 = 1000 # NORMAL_CLOSURE: WS_1001 = 1001 # GOING_AWAY: WS_1002 = 1002 # PROTOCOL_ERROR: WS_1003 = 1003 # UNSUPPORTED_DATA: WS_1005 = 1005 # NO_STATUS_RCVD: WS_1006 = 1006 # ABNORMAL_CLOSURE: WS_1007 = 1007 # INVALID_FRAME_PAYLOAD_DATA: WS_1008 = 1008 # POLICY_VIOLATION: WS_1009 = 1009 # MESSAGE_TOO_BIG: WS_1010 = 1010 # MANDATORY_EXT: WS_1011 = 1011 # INTERNAL_ERROR: WS_1012 = 1012 # SERVICE_RESTART: WS_1013 = 1013 # TRY_AGAIN_LATER: WS_1014 = 1014 # BAD_GATEWAY: WS_1015 = 1015 # TLS_HANDSHAKE: WS_3000 = 3000 # UNAUTHORIZED: WS_3003 = 3003 # FORBIDDEN: