summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew <saintruler@gmail.com>2019-06-29 11:34:58 +0400
committerAndrew <saintruler@gmail.com>2019-06-29 11:34:58 +0400
commitf757107504290d12262fcb806e14776fc9a35fa0 (patch)
treebac7eb81ac0b16af908b7345f95d1961167e5e94
parent6f79071d2bdbdebc843d99760f80936885256e03 (diff)
Изменен метод получения HTTP статусов.day7
-rw-r--r--day7/README.md2
-rw-r--r--day7/utils.py75
2 files changed, 71 insertions, 6 deletions
diff --git a/day7/README.md b/day7/README.md
index 5527f4e..90668fb 100644
--- a/day7/README.md
+++ b/day7/README.md
@@ -21,7 +21,7 @@ Brand-new HTTP сервер для созданный для того, чтоб
Второй способ подойдет для небольших проектов на 2-3 обработчика.
-Свои функции можно писать в любом файле (В модулях самого сервера всё таки не рекомендуется, но никто не запрещает).
+Свои функции можно писать в любом файле (В модулях самого сервера всё-таки не рекомендуется, но никто не запрещает).
В данном случае все обработчики находятся в модуле `backend.py` и использован первый способ задания путей
(Они прописаны прямо в _router_table).
diff --git a/day7/utils.py b/day7/utils.py
index b00c5c2..89e2e50 100644
--- a/day7/utils.py
+++ b/day7/utils.py
@@ -2,18 +2,83 @@ import re
from time import strftime, gmtime
from string import ascii_letters
-HTTP_VERSION = 'HTTP/1.1'
-SUCCESS = f'{HTTP_VERSION} 200 OK'
-BAD_REQUEST = f'{HTTP_VERSION} 400 Bad Request'
-NOT_FOUND = f'{HTTP_VERSION} 404 Not Found'
-METHOD_NOT_ALLOWED = f'{HTTP_VERSION} Method Not Allowed'
+HTTP_STATUS_CODES = {
+ 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",
+ 226: "IM Used", # see RFC 3229
+ 300: "Multiple Choices",
+ 301: "Moved Permanently",
+ 302: "Found",
+ 303: "See Other",
+ 304: "Not Modified",
+ 305: "Use Proxy",
+ 307: "Temporary Redirect",
+ 308: "Permanent Redirect",
+ 400: "Bad Request",
+ 401: "Unauthorized",
+ 402: "Payment Required", # unused
+ 403: "Forbidden",
+ 404: "Not Found",
+ 405: "Method Not Allowed",
+ 406: "Not Acceptable",
+ 407: "Proxy Authentication Required",
+ 408: "Request Timeout",
+ 409: "Conflict",
+ 410: "Gone",
+ 411: "Length Required",
+ 412: "Precondition Failed",
+ 413: "Request Entity Too Large",
+ 414: "Request URI Too Long",
+ 415: "Unsupported Media Type",
+ 416: "Requested Range Not Satisfiable",
+ 417: "Expectation Failed",
+ 418: "I'm a teapot", # see RFC 2324
+ 421: "Misdirected Request", # see RFC 7540
+ 422: "Unprocessable Entity",
+ 423: "Locked",
+ 424: "Failed Dependency",
+ 426: "Upgrade Required",
+ 428: "Precondition Required", # see RFC 6585
+ 429: "Too Many Requests",
+ 431: "Request Header Fields Too Large",
+ 449: "Retry With", # proprietary MS extension
+ 451: "Unavailable For Legal Reasons",
+ 500: "Internal Server Error",
+ 501: "Not Implemented",
+ 502: "Bad Gateway",
+ 503: "Service Unavailable",
+ 504: "Gateway Timeout",
+ 505: "HTTP Version Not Supported",
+ 507: "Insufficient Storage",
+ 510: "Not Extended",
+}
+HTTP_VERSION = 'HTTP/1.1'
HTTP_METHODS = ['GET', 'POST', 'OPTIONS', 'HEAD', 'PUT', 'PATCH', 'DELETE', 'TRACE', 'CONNECT']
URL_REGEX_PATTERN = re.compile(r'/((.*?/?)+)?')
FIRST_LINE_PATTERN = re.compile(rf'{"(" + "|".join(HTTP_METHODS) + ")"} {URL_REGEX_PATTERN.pattern} HTTP/1\.[01]')
+def get_status_code(code):
+ return f'{HTTP_VERSION} {code} {HTTP_STATUS_CODES[code]}'
+
+
+SUCCESS = get_status_code(200)
+BAD_REQUEST = get_status_code(400)
+NOT_FOUND = get_status_code(404)
+METHOD_NOT_ALLOWED = get_status_code(405)
+
+
def add_text_headers(status, html: str):
"""
Добавляет заголовки к ответной html-странице