From e746d1e94eeeafc3229b6c1d790394aa73f32102 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 6 Jul 2019 16:54:30 +0400 Subject: =?UTF-8?q?WIP:=20=D0=A0=D0=B5=D0=BD=D0=B4=D0=B5=D1=80=D0=B8=D0=BD?= =?UTF-8?q?=D0=B3=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D1=8B=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=81=D1=82=D0=BE=D1=80=D0=BE=D0=BD=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day9/task5/server.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'day9/task5/server.py') diff --git a/day9/task5/server.py b/day9/task5/server.py index d9fdc78..47e29f9 100644 --- a/day9/task5/server.py +++ b/day9/task5/server.py @@ -1,21 +1,31 @@ from http.server import HTTPServer, BaseHTTPRequestHandler from urllib.parse import parse_qs +from json import dumps from router import run from utils import HTTP_STATUS_CODES class MyHTTPRequestHandler(BaseHTTPRequestHandler): - def _set_response(self, code): + def _set_response(self, code, content_type): self.send_response(code) - self.send_header('Content-type', 'text/html') + self.send_header('Content-type', content_type) self.end_headers() def do_GET(self): + try: + content_length = int(self.headers['Content-Length']) + get_data = parse_qs(self.rfile.read(content_length).decode('utf-8')) + except TypeError: + get_data = {} + + for key in get_data: + get_data[key] = get_data[key][0] + self.finalize_request(run({ 'url': self.path, 'method': 'GET', - 'query': {} + 'query': get_data })) def do_POST(self): @@ -33,10 +43,13 @@ class MyHTTPRequestHandler(BaseHTTPRequestHandler): def finalize_request(self, response): if isinstance(response, int): - self._set_response(response) + self._set_response(response, 'text/html') response = f'

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

' + elif isinstance(response, (dict, list, tuple)): + self._set_response(200, 'application/json') + response = dumps(response) else: - self._set_response(200) + self._set_response(200, 'text/html') self.wfile.write(response.encode('utf-8')) -- cgit v1.2.3