durusmail: quixote-users: [PATCH] http response code enumeration
Accept-aware functions via metaclasses
2003-09-25
2003-09-26
Re: Accept-aware functions via metaclasses
2003-09-26
2003-09-26
[PATCH] http response code enumeration
2003-09-26
2003-09-26
2003-09-26
[PATCH] http response code enumeration
John Belmonte
2003-09-26
I wrote:
> Making Quixote use these internally rather than magic numbers is left as
> an exercise for the guilty :-).

This updated version provides a start.



--
http:// if   le.o  /
--- http_response.py.orig       2003-09-26 16:35:34.000000000 -0400
+++ http_response.py    2003-09-26 17:10:20.000000000 -0400
@@ -28,53 +28,105 @@
 from rfc822 import formatdate
 from types import StringType, IntType

+"""HTTP status code enumeration
+
+The names match the status descriptions in RFC-2616, with spaces and
+hyphens substituted with an underbar.
+"""
+CONTINUE                        = 100
+SWITCHING_PROTOCOLS             = 101
+PROCESSING                      = 102 # non-standard
+OK                              = 200
+CREATED                         = 201
+ACCEPTED                        = 202
+NON_AUTHORITATIVE_INFORMATION   = 203
+NO_CONTENT                      = 204
+RESET_CONTENT                   = 205
+PARTIAL_CONTENT                 = 206
+MULTI_STATUS                    = 207 # non-standard
+MULTIPLE_CHOICES                = 300
+MOVED_PERMANENTLY               = 301
+MOVED_TEMPORARILY               = 302
+SEE_OTHER                       = 303
+NOT_MODIFIED                    = 304
+USE_PROXY                       = 305
+TEMPORARY_REDIRECT              = 307
+BAD_REQUEST                     = 400
+UNAUTHORIZED                    = 401
+PAYMENT_REQUIRED                = 402
+FORBIDDEN                       = 403
+NOT_FOUND                       = 404
+METHOD_NOT_ALLOWED              = 405
+NOT_ACCEPTABLE                  = 406
+PROXY_AUTHENTICATION_REQUIRED   = 407
+REQUEST_TIME_OUT                = 408
+CONFLICT                        = 409
+GONE                            = 410
+LENGTH_REQUIRED                 = 411
+PRECONDITION_FAILED             = 412
+REQUEST_ENTITY_TOO_LARGE        = 413
+REQUEST_URI_TOO_LARGE           = 414
+UNSUPPORTED_MEDIA_TYPE          = 415
+REQUESTED_RANGE_NOT_SATISFIABLE = 416
+EXPECTATION_FAILED              = 417
+UNPROCESSABLE_ENTITY            = 422 # non-standard
+LOCKED                          = 423 # non-standard
+FAILED_DEPENDENCY               = 424 # non-standard
+INTERNAL_SERVER_ERROR           = 500
+NOT_IMPLEMENTED                 = 501
+BAD_GATEWAY                     = 502
+SERVICE_UNAVAILABLE             = 503
+GATEWAY_TIME_OUT                = 504
+HTTP_VERSION_NOT_SUPPORTED      = 505
+INSUFFICIENT_STORAGE            = 507 # non-standard
+
 status_reasons = {
-    100: 'Continue',
-    101: 'Switching Protocols',
-    102: 'Processing',
-    200: 'OK',
-    201: 'Created',
-    202: 'Accepted',
-    203: 'Non-Authoritative Information',
-    204: 'No Content',
-    205: 'Reset Content',
-    206: 'Partial Content',
-    207: 'Multi-Status',
-    300: 'Multiple Choices',
-    301: 'Moved Permanently',
-    302: 'Moved Temporarily',
-    303: 'See Other',
-    304: 'Not Modified',
-    305: 'Use Proxy',
-    307: 'Temporary Redirect',
-    400: 'Bad Request',
-    401: 'Unauthorized',
-    402: 'Payment Required',
-    403: 'Forbidden',
-    404: 'Not Found',
-    405: 'Method Not Allowed',
-    406: 'Not Acceptable',
-    407: 'Proxy Authentication Required',
-    408: 'Request Time-out',
-    409: 'Conflict',
-    410: 'Gone',
-    411: 'Length Required',
-    412: 'Precondition Failed',
-    413: 'Request Entity Too Large',
-    414: 'Request-URI Too Large',
-    415: 'Unsupported Media Type',
-    416: 'Requested range not satisfiable',
-    417: 'Expectation Failed',
-    422: 'Unprocessable Entity',
-    423: 'Locked',
-    424: 'Failed Dependency',
-    500: 'Internal Server Error',
-    501: 'Not Implemented',
-    502: 'Bad Gateway',
-    503: 'Service Unavailable',
-    504: 'Gateway Time-out',
-    505: 'HTTP Version not supported',
-    507: 'Insufficient Storage',
+    CONTINUE                        : 'Continue',
+    SWITCHING_PROTOCOLS             : 'Switching Protocols',
+    PROCESSING                      : 'Processing',
+    OK                              : 'OK',
+    CREATED                         : 'Created',
+    ACCEPTED                        : 'Accepted',
+    NON_AUTHORITATIVE_INFORMATION   : 'Non-Authoritative Information',
+    NO_CONTENT                      : 'No Content',
+    RESET_CONTENT                   : 'Reset Content',
+    PARTIAL_CONTENT                 : 'Partial Content',
+    MULTI_STATUS                    : 'Multi-Status',
+    MULTIPLE_CHOICES                : 'Multiple Choices',
+    MOVED_PERMANENTLY               : 'Moved Permanently',
+    MOVED_TEMPORARILY               : 'Moved Temporarily',
+    SEE_OTHER                       : 'See Other',
+    NOT_MODIFIED                    : 'Not Modified',
+    USE_PROXY                       : 'Use Proxy',
+    TEMPORARY_REDIRECT              : 'Temporary Redirect',
+    BAD_REQUEST                     : 'Bad Request',
+    UNAUTHORIZED                    : 'Unauthorized',
+    PAYMENT_REQUIRED                : 'Payment Required',
+    FORBIDDEN                       : 'Forbidden',
+    NOT_FOUND                       : 'Not Found',
+    METHOD_NOT_ALLOWED              : 'Method Not Allowed',
+    NOT_ACCEPTABLE                  : 'Not Acceptable',
+    PROXY_AUTHENTICATION_REQUIRED   : 'Proxy Authentication Required',
+    REQUEST_TIME_OUT                : 'Request Time-out',
+    CONFLICT                        : 'Conflict',
+    GONE                            : 'Gone',
+    LENGTH_REQUIRED                 : 'Length Required',
+    PRECONDITION_FAILED             : 'Precondition Failed',
+    REQUEST_ENTITY_TOO_LARGE        : 'Request Entity Too Large',
+    REQUEST_URI_TOO_LARGE           : 'Request-URI Too Large',
+    UNSUPPORTED_MEDIA_TYPE          : 'Unsupported Media Type',
+    REQUESTED_RANGE_NOT_SATISFIABLE : 'Requested range not satisfiable',
+    EXPECTATION_FAILED              : 'Expectation Failed',
+    UNPROCESSABLE_ENTITY            : 'Unprocessable Entity',
+    LOCKED                          : 'Locked',
+    FAILED_DEPENDENCY               : 'Failed Dependency',
+    INTERNAL_SERVER_ERROR           : 'Internal Server Error',
+    NOT_IMPLEMENTED                 : 'Not Implemented',
+    BAD_GATEWAY                     : 'Bad Gateway',
+    SERVICE_UNAVAILABLE             : 'Service Unavailable',
+    GATEWAY_TIME_OUT                : 'Gateway Time-out',
+    HTTP_VERSION_NOT_SUPPORTED      : 'HTTP Version not supported',
+    INSUFFICIENT_STORAGE            : 'Insufficient Storage',
 }


@@ -120,7 +172,7 @@
         else's problem.
     """

-    def __init__ (self, status=200, body=None):
+    def __init__ (self, status=OK, body=None):
         """
         Creates a new HTTP response.
         """
@@ -268,9 +320,9 @@
         if location.find('://') == -1:
             raise ValueError, "URL must include the server name"
         if permanent:
-            status = 301
+            status = MOVED_PERMANENTLY
         else:
-            status = 302
+            status = MOVED_TEMPORARILY
         self.set_status(status)
         self.headers['location'] = location

reply