diff options
| author | Andrew <saintruler@gmail.com> | 2019-07-09 19:20:40 +0400 |
|---|---|---|
| committer | Andrew <saintruler@gmail.com> | 2019-07-09 19:20:40 +0400 |
| commit | 3d7678361496668f584d62329600997dff9c2862 (patch) | |
| tree | f73729667fdd306837c79520f193af384600df46 /day9/task5/main.py | |
| parent | 323563cedae50dad25c531e90fcda17f9e459feb (diff) | |
Улучшена обработка разных видов ответов от бэкенда.
Diffstat (limited to 'day9/task5/main.py')
| -rw-r--r-- | day9/task5/main.py | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/day9/task5/main.py b/day9/task5/main.py index 019ff8b..1ca94bb 100644 --- a/day9/task5/main.py +++ b/day9/task5/main.py @@ -2,6 +2,8 @@ from router import route from utils import render_template, NOT_FOUND_CODE from config import SERVER_HOST, SERVER_PORT, STATIC_FILES_PATH +from core import ErrorResponse, TextFileResponse, ImageResponse, HtmlResponse, JsonResponse + import logging import csv from sys import stdout @@ -11,38 +13,39 @@ from sys import stdout def return_static(query, *args): if args[0] in ['css', 'js']: try: - with open(STATIC_FILES_PATH + f'/{args[0]}/{args[1]}', encoding='utf-8') as f: - data = f.read() - - return args[0], {'js': 'javascript', 'css': 'css'}[args[0]], data + return TextFileResponse( + path=STATIC_FILES_PATH + f'/{args[0]}/{args[1]}', + extension={'js': 'javascript', 'css': 'css'}.get(args[0]) + ) except (PermissionError, FileNotFoundError): - return '' + return ErrorResponse(404) + elif args[0] == 'images': try: - with open(STATIC_FILES_PATH + f'/{args[0]}/{args[1]}', 'rb') as f: - data = f.read() + return ImageResponse(STATIC_FILES_PATH + f'/{args[0]}/{args[1]}', args[1].split('.')[-1]) - return 'image', args[1].split('.')[-1], data except (PermissionError, FileNotFoundError): - return '' + return ErrorResponse(404) @route('/api/upload', ['POST']) def upload_file(query, *args): + base_html = '<a href="/">Return to main page</a><br>%s' + try: data = query['files'][0]['data'].decode() except (UnicodeDecodeError, KeyError, IndexError): - return '<a href="/">Return to main page</a><br><h1>Error while reading file</h1>' + return ErrorResponse(500, base_html % '<h1>Error while reading file</h1>') permitted_headers = db_column_names() try: data = list(csv.reader(data.strip().splitlines(), delimiter=';', quotechar='"')) if len(data[0]) != len(permitted_headers) or set(data[0]) != set(permitted_headers): - return '<a href="/">Return to main page</a><br><h1>File format error</h1>' + return ErrorResponse(500, base_html % '<h1>File format error</h1>') except IndexError: - return '<a href="/">Return to main page</a><br><h1>File format error</h1>' + return ErrorResponse(500, base_html % '<h1>File format error</h1>') cursor = db.cursor() cursor.execute("START TRANSACTION; DELETE FROM `table_task1`; COMMIT;") @@ -71,7 +74,7 @@ def upload_file(query, *args): ) cursor.close() - return '<a href="/">Return to main page</a><br><h1>File uploaded</h1>' + return HtmlResponse(base_html % '<h1>File uploaded</h1>') @route('/api/update', ['POST']) @@ -91,7 +94,7 @@ def update_post(query, *args): )) cursor.close() - return f'<a href="/">Return to main page</a><br><h1>Database Updated {query}</h1>' + return HtmlResponse('<a href="/">Return to main page</a><br><h1>Database Updated</h1>') @route('/api/delete', ['POST']) @@ -100,7 +103,7 @@ def delete_post(query, *args): cursor = db.cursor() cursor.execute(f'START TRANSACTION; DELETE FROM `table_task1` WHERE service_id="{service_id}"; COMMIT;') - return f'<a href="/">Return to main page</a><br><h1>Database Updated {query}</h1>' + return HtmlResponse('<a href="/">Return to main page</a><br><h1>Database Updated</h1>') @route('/api/add', ['POST']) @@ -120,7 +123,7 @@ def add_post(query, *args): )) cursor.close() - return f'<a href="/">Return to main page</a><br><h1>Database Updated {query}</h1>' + return HtmlResponse('<a href="/">Return to main page</a><br><h1>Database Updated</h1>') @route('/get', ['POST']) @@ -143,7 +146,7 @@ def db_get(query, *args): new_row.append(col) json_content.append(new_row) - return {'headers': table_headers, 'content': json_content} + return JsonResponse({'headers': table_headers, 'content': json_content}) elif query['type'] == 'single_id': cursor.execute(f'SELECT * FROM table_task1 WHERE service_id="{query["service_id"]}";') @@ -157,15 +160,15 @@ def db_get(query, *args): col = str(col) json_content.append(col) - return dict(zip(table_headers, json_content)) + return JsonResponse(dict(zip(table_headers, json_content))) - return NOT_FOUND_CODE + return ErrorResponse(NOT_FOUND_CODE) @route('/') def index_get(query, *args): data = render_template('index.html') - return data + return HtmlResponse(data) def prepare_logger(): |