summaryrefslogtreecommitdiff
path: root/day9/task5/server.py
diff options
context:
space:
mode:
authorAndrew <saintruler@gmail.com>2019-07-06 14:36:55 +0400
committerAndrew <saintruler@gmail.com>2019-07-06 14:36:55 +0400
commit1e6967f8c4f1ef64947d7f2b95268339d78db454 (patch)
treeb2ebf1ccb160e3c58f277dfec4bae8f83b03ec45 /day9/task5/server.py
parentf1a923860c02c69d9e67d15da24f90d7306223e0 (diff)
WIP: Изменена структура сервера.
Diffstat (limited to 'day9/task5/server.py')
-rw-r--r--day9/task5/server.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/day9/task5/server.py b/day9/task5/server.py
new file mode 100644
index 0000000..d9fdc78
--- /dev/null
+++ b/day9/task5/server.py
@@ -0,0 +1,47 @@
+from http.server import HTTPServer, BaseHTTPRequestHandler
+from urllib.parse import parse_qs
+
+from router import run
+from utils import HTTP_STATUS_CODES
+
+
+class MyHTTPRequestHandler(BaseHTTPRequestHandler):
+ def _set_response(self, code):
+ self.send_response(code)
+ self.send_header('Content-type', 'text/html')
+ self.end_headers()
+
+ def do_GET(self):
+ self.finalize_request(run({
+ 'url': self.path,
+ 'method': 'GET',
+ 'query': {}
+ }))
+
+ def do_POST(self):
+ content_length = int(self.headers['Content-Length'])
+ post_data = parse_qs(self.rfile.read(content_length).decode('utf-8'))
+
+ for key in post_data:
+ post_data[key] = post_data[key][0]
+
+ self.finalize_request(run({
+ 'url': self.path,
+ 'method': 'POST',
+ 'query': post_data
+ }))
+
+ def finalize_request(self, response):
+ if isinstance(response, int):
+ self._set_response(response)
+ response = f'<center><h1>ERROR {response} {HTTP_STATUS_CODES[response].upper()}</h1></center>'
+ else:
+ self._set_response(200)
+
+ self.wfile.write(response.encode('utf-8'))
+
+
+def start_server(host, port):
+ server_address = (host, port)
+ httpd = HTTPServer(server_address, MyHTTPRequestHandler)
+ httpd.serve_forever()