summaryrefslogtreecommitdiff
path: root/day9/task5/server.py
diff options
context:
space:
mode:
authorAndrew <saintruler@gmail.com>2019-07-07 23:40:09 +0400
committerAndrew <saintruler@gmail.com>2019-07-07 23:40:09 +0400
commit5dc61e9d6a760e3a86b0bb459c0a628941069d95 (patch)
treeeeec35ae80b8befd2d2920d52cf08aa5bc695736 /day9/task5/server.py
parent64f9869d53bd4ec8b8867c8142a0deb919e143a4 (diff)
WIP: Добавлена загрузка файлов.
Diffstat (limited to 'day9/task5/server.py')
-rw-r--r--day9/task5/server.py35
1 files changed, 25 insertions, 10 deletions
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'<center><h1>ERROR {response} {HTTP_STATUS_CODES[response].upper()}</h1></center>'
- 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')