diff options
| author | Andrew <saintruler@gmail.com> | 2019-07-07 23:40:09 +0400 |
|---|---|---|
| committer | Andrew <saintruler@gmail.com> | 2019-07-07 23:40:09 +0400 |
| commit | 5dc61e9d6a760e3a86b0bb459c0a628941069d95 (patch) | |
| tree | eeec35ae80b8befd2d2920d52cf08aa5bc695736 /day9/task5/main.py | |
| parent | 64f9869d53bd4ec8b8867c8142a0deb919e143a4 (diff) | |
WIP: Добавлена загрузка файлов.
Diffstat (limited to 'day9/task5/main.py')
| -rw-r--r-- | day9/task5/main.py | 86 |
1 files changed, 78 insertions, 8 deletions
diff --git a/day9/task5/main.py b/day9/task5/main.py index d5bcbb8..c49852a 100644 --- a/day9/task5/main.py +++ b/day9/task5/main.py @@ -1,12 +1,63 @@ from router import route from utils import render_template, NOT_FOUND_CODE -from config import SERVER_HOST, SERVER_PORT +from config import SERVER_HOST, SERVER_PORT, STATIC_FILES_PATH import logging +import csv from sys import stdout -@route('/update', ['POST']) +@route('/static/(.*?)/(.*?)/?') +def return_static(query, *args): + if args[0] in ['css', 'js', 'images']: + try: + with open(STATIC_FILES_PATH + f'/{args[0]}/{args[1]}', encoding='utf-8') as f: + data = f.read() + + return data + except (PermissionError, FileNotFoundError): + return '' + + +@route('/api/upload', ['POST']) +def upload_file(query, *args): + try: + data = query['files'][0]['data'].decode() + except (UnicodeDecodeError, KeyError, IndexError): + return '<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 '<h1>File format error</h1>' + except IndexError: + return '<h1>File format error</h1>' + + for row in data[1:]: + cursor = db.cursor() + values = [] + for i in range(len(row)): + if row[i] == 'NULL': + if data[0][i] == 'creation_request_sent_date': + value = 'NULL' + else: + value = '"NULL"' + else: + value = f'"{row[i]}"' + + values.append(value) + + cursor.execute( "START TRANSACTION; INSERT INTO `table_task1` ({}) VALUES ({}); COMMIT;".format( + ','.join(data[0]), ','.join(values) + )) + cursor.close() + + return '<h1>File uploaded</h1>' + + +@route('/api/update', ['POST']) def update_post(query, *args): service_id = query['service_id'] permitted_fields = db_column_names() @@ -18,22 +69,41 @@ def update_post(query, *args): query_set.append(f'{field_name}="{value}"') cursor = db.cursor() - cursor.execute("UPDATE `table_task1` SET {} WHERE {};".format( + cursor.execute("START TRANSACTION; UPDATE `table_task1` SET {} WHERE {}; COMMIT;".format( ','.join(query_set), f'service_id="{service_id}"' )) cursor.close() - return f'<h1>Database Updated</h1>' + return f'<h1>Database Updated {query}</h1>' -@route('/delete', ['POST']) +@route('/api/delete', ['POST']) def delete_post(query, *args): - return f'<h1>DELETE: {query}</h1>' + service_id = query['service_id'] + cursor = db.cursor() + cursor.execute(f'START TRANSACTION; DELETE FROM `table_task1` WHERE service_id="{service_id}"; COMMIT;') + + return f'<h1>Database Updated {query}</h1>' -@route('/add', ['POST']) +@route('/api/add', ['POST']) def add_post(query, *args): - return f'<h1>ADD: {query}</h1>' + header_fields = db_column_names() + headers = [] + values = [] + for field_name in query: + if field_name in header_fields: + headers.append(field_name) + values.append(f'"{query[field_name]}"') + + if len(headers) == len(header_fields): + cursor = db.cursor() + cursor.execute("START TRANSACTION; INSERT INTO `table_task1` ({}) VALUES ({}); COMMIT;".format( + ','.join(headers), ','.join(values) + )) + cursor.close() + + return f'<h1>Database Updated {query}</h1>' @route('/get', ['POST']) |