summaryrefslogtreecommitdiff
path: root/day9/task5/main.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/main.py
parent64f9869d53bd4ec8b8867c8142a0deb919e143a4 (diff)
WIP: Добавлена загрузка файлов.
Diffstat (limited to 'day9/task5/main.py')
-rw-r--r--day9/task5/main.py86
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'])