From 5dc61e9d6a760e3a86b0bb459c0a628941069d95 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 7 Jul 2019 23:40:09 +0400 Subject: =?UTF-8?q?WIP:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B0=20?= =?UTF-8?q?=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day9/task5/server.py | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) (limited to 'day9/task5/server.py') diff --git a/day9/task5/server.py b/day9/task5/server.py index a6044bd..7757821 100644 --- a/day9/task5/server.py +++ b/day9/task5/server.py @@ -3,7 +3,7 @@ from urllib.parse import parse_qs from json import dumps from router import run -from utils import HTTP_STATUS_CODES +from utils import HTTP_STATUS_CODES, parse_multipart_form import logging @@ -32,24 +32,39 @@ class MyHTTPRequestHandler(BaseHTTPRequestHandler): def do_POST(self): content_length = int(self.headers['Content-Length']) - post_data = parse_qs(self.rfile.read(content_length).decode('utf-8')) + content_type = self.headers['Content-type'] + post_data = self.rfile.read(content_length) - for key in post_data: - post_data[key] = post_data[key][0] + if content_type.split(';')[0] == 'multipart/form-data': + files = parse_multipart_form(post_data) + self.finalize_request(run({ + 'url': self.path, + 'method': 'POST', + 'query': {'files': files} + })) - self.finalize_request(run({ - 'url': self.path, - 'method': 'POST', - 'query': post_data - })) + elif content_type.split(';')[0] == 'text/plain': + post_data = parse_qs(post_data.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, 'text/html') response = f'

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

' - elif isinstance(response, (dict, list, tuple)): + elif isinstance(response, (dict, list)): self._set_response(200, 'application/json') response = dumps(response) + elif isinstance(response, tuple): + if response[0] == 'image': + self._set_response(200, f'image/{response[1]}') + response = '' else: self._set_response(200, 'text/html') -- cgit v1.2.3