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/main.py | 86 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 8 deletions(-) (limited to 'day9/task5/main.py') 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 '

Error while reading file

' + + 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 '

File format error

' + except IndexError: + return '

File format error

' + + 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 '

File uploaded

' + + +@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'

Database Updated

' + return f'

Database Updated {query}

' -@route('/delete', ['POST']) +@route('/api/delete', ['POST']) def delete_post(query, *args): - return f'

DELETE: {query}

' + 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'

Database Updated {query}

' -@route('/add', ['POST']) +@route('/api/add', ['POST']) def add_post(query, *args): - return f'

ADD: {query}

' + 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'

Database Updated {query}

' @route('/get', ['POST']) -- cgit v1.2.3