From 1e6967f8c4f1ef64947d7f2b95268339d78db454 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 6 Jul 2019 14:36:55 +0400 Subject: =?UTF-8?q?WIP:=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D0=B0=20?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day9/task5/server.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 day9/task5/server.py (limited to 'day9/task5/server.py') 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'

ERROR {response} {HTTP_STATUS_CODES[response].upper()}

' + 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() -- cgit v1.2.3