From f28bc2c1bc059b5c5f4f47518829dc9340d3b594 Mon Sep 17 00:00:00 2001 From: Vyacheslav Maltsev Date: Wed, 16 Aug 2023 16:59:59 +0300 Subject: [PATCH] Aggregate response codes by their category --- docs/api-guide/status-codes.md | 10 +++++ rest_framework/status.py | 79 ++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) diff --git a/docs/api-guide/status-codes.md b/docs/api-guide/status-codes.md index fb2f9bf13..62a114458 100644 --- a/docs/api-guide/status-codes.md +++ b/docs/api-guide/status-codes.md @@ -123,6 +123,16 @@ Response status codes beginning with the digit "5" indicate cases in which the s HTTP_510_NOT_EXTENDED HTTP_511_NETWORK_AUTHENTICATION_REQUIRED +## Aggregated responses by code + +REST framework offers response codes grouped together by their category. + + INFORMATIONAL # 1xx + SUCCESS # 2xx + REDIRECT # 3xx + CLIENT_ERROR # 4xx + SERVER_ERROR # 5xx + ## Helper functions The following helper functions are available for identifying the category of the response code. diff --git a/rest_framework/status.py b/rest_framework/status.py index 7df26b388..b1bc4f2ba 100644 --- a/rest_framework/status.py +++ b/rest_framework/status.py @@ -91,3 +91,82 @@ HTTP_508_LOOP_DETECTED = 508 HTTP_509_BANDWIDTH_LIMIT_EXCEEDED = 509 HTTP_510_NOT_EXTENDED = 510 HTTP_511_NETWORK_AUTHENTICATION_REQUIRED = 511 + +INFORMATIONAL = ( + HTTP_100_CONTINUE, + HTTP_101_SWITCHING_PROTOCOLS, + HTTP_102_PROCESSING, + HTTP_103_EARLY_HINTS, +) + +SUCCESS = ( + HTTP_200_OK, + HTTP_201_CREATED, + HTTP_202_ACCEPTED, + HTTP_203_NON_AUTHORITATIVE_INFORMATION, + HTTP_204_NO_CONTENT, + HTTP_205_RESET_CONTENT, + HTTP_206_PARTIAL_CONTENT, + HTTP_207_MULTI_STATUS, + HTTP_208_ALREADY_REPORTED, + HTTP_226_IM_USED, +) + +REDIRECT = ( + HTTP_300_MULTIPLE_CHOICES, + HTTP_301_MOVED_PERMANENTLY, + HTTP_302_FOUND, + HTTP_303_SEE_OTHER, + HTTP_304_NOT_MODIFIED, + HTTP_305_USE_PROXY, + HTTP_306_RESERVED, + HTTP_307_TEMPORARY_REDIRECT, + HTTP_308_PERMANENT_REDIRECT, +) + +CLIENT_ERROR = ( + HTTP_400_BAD_REQUEST, + HTTP_401_UNAUTHORIZED, + HTTP_402_PAYMENT_REQUIRED, + HTTP_403_FORBIDDEN, + HTTP_404_NOT_FOUND, + HTTP_405_METHOD_NOT_ALLOWED, + HTTP_406_NOT_ACCEPTABLE, + HTTP_407_PROXY_AUTHENTICATION_REQUIRED, + HTTP_408_REQUEST_TIMEOUT, + HTTP_409_CONFLICT, + HTTP_410_GONE, + HTTP_411_LENGTH_REQUIRED, + HTTP_412_PRECONDITION_FAILED, + HTTP_413_REQUEST_ENTITY_TOO_LARGE, + HTTP_414_REQUEST_URI_TOO_LONG, + HTTP_415_UNSUPPORTED_MEDIA_TYPE, + HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE, + HTTP_417_EXPECTATION_FAILED, + HTTP_418_IM_A_TEAPOT, + HTTP_421_MISDIRECTED_REQUEST, + HTTP_422_UNPROCESSABLE_ENTITY, + HTTP_423_LOCKED, + HTTP_424_FAILED_DEPENDENCY, + HTTP_425_TOO_EARLY, + HTTP_426_UPGRADE_REQUIRED, + HTTP_428_PRECONDITION_REQUIRED, + HTTP_429_TOO_MANY_REQUESTS, + HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE, + HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS, +) + +SERVER_ERROR = ( + HTTP_500_INTERNAL_SERVER_ERROR, + HTTP_501_NOT_IMPLEMENTED, + HTTP_502_BAD_GATEWAY, + HTTP_503_SERVICE_UNAVAILABLE, + HTTP_504_GATEWAY_TIMEOUT, + HTTP_505_HTTP_VERSION_NOT_SUPPORTED, + HTTP_506_VARIANT_ALSO_NEGOTIATES, + HTTP_507_INSUFFICIENT_STORAGE, + HTTP_508_LOOP_DETECTED, + HTTP_509_BANDWIDTH_LIMIT_EXCEEDED, + HTTP_510_NOT_EXTENDED, + HTTP_511_NETWORK_AUTHENTICATION_REQUIRED, +)