summaryrefslogtreecommitdiff
path: root/day9/task5/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'day9/task5/main.py')
-rw-r--r--day9/task5/main.py192
1 files changed, 0 insertions, 192 deletions
diff --git a/day9/task5/main.py b/day9/task5/main.py
deleted file mode 100644
index 872a663..0000000
--- a/day9/task5/main.py
+++ /dev/null
@@ -1,192 +0,0 @@
-from day9.task5_vue.router import route
-from day9.task5_vue.utils import render_template, NOT_FOUND_CODE
-from day9.task5_vue.config import SERVER_HOST, SERVER_PORT, STATIC_FILES_PATH
-
-from day9.task5_vue.core import ErrorResponse, TextFileResponse, ImageResponse, HtmlResponse, JsonResponse
-
-import logging
-import csv
-from sys import stdout
-
-
-@route('/static/(.*?)/(.*?)/?')
-def return_static(query, *args):
- if args[0] in ['css', 'js']:
- try:
- return TextFileResponse(
- path=STATIC_FILES_PATH + f'/{args[0]}/{args[1]}',
- extension={'js': 'javascript', 'css': 'css'}.get(args[0])
- )
-
- except (PermissionError, FileNotFoundError):
- return ErrorResponse(404)
-
- elif args[0] == 'images':
- try:
- return ImageResponse(STATIC_FILES_PATH + f'/{args[0]}/{args[1]}', args[1].split('.')[-1])
-
- except (PermissionError, FileNotFoundError):
- 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 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 ErrorResponse(500, base_html % '<h1>File format error</h1>')
- except IndexError:
- return ErrorResponse(500, base_html % '<h1>File format error</h1>')
-
- cursor = db.cursor()
- cursor.execute("START TRANSACTION; DELETE FROM `table_task1`; COMMIT;")
- cursor.close()
-
- for row in data[1:]:
- 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 = db.cursor()
- cursor.execute(
- "START TRANSACTION; "
- "INSERT INTO `table_task1` ({}) VALUES ({}); "
- "COMMIT;".format(
- ','.join(data[0]), ','.join(values)
- )
- )
- cursor.close()
-
- return HtmlResponse(base_html % '<h1>File uploaded</h1>')
-
-
-@route('/api/update', ['POST'])
-def update_post(query, *args):
- print(query)
- service_id = query['service_id']
- permitted_fields = db_column_names()
- permitted_fields.remove('service_id')
-
- query_set = []
- for field_name, value in query.items():
- if field_name in permitted_fields:
- query_set.append(f'{field_name}="{value}"')
-
- cursor = db.cursor()
- cursor.execute("START TRANSACTION; UPDATE `table_task1` SET {} WHERE {}; COMMIT;".format(
- ','.join(query_set), f'service_id="{service_id}"'
- ))
- cursor.close()
-
- return HtmlResponse('<a href="/">Return to main page</a><br><h1>Database Updated</h1>')
-
-
-@route('/api/delete', ['POST'])
-def delete_post(query, *args):
- service_id = query['service_id']
- cursor = db.cursor()
- cursor.execute(f'START TRANSACTION; DELETE FROM `table_task1` WHERE service_id="{service_id}"; COMMIT;')
-
- return HtmlResponse('<a href="/">Return to main page</a><br><h1>Database Updated</h1>')
-
-
-@route('/api/add', ['POST'])
-def add_post(query, *args):
- 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 HtmlResponse('<a href="/">Return to main page</a><br><h1>Database Updated</h1>')
-
-
-@route('/get', ['POST'])
-def db_get(query, *args):
- table_headers = db_column_names()
- cursor = db.cursor()
-
- if query['type'] == 'full':
- cursor.execute('SELECT * FROM table_task1;')
- content = cursor.fetchall()
-
- cursor.close()
-
- json_content = []
- for row in content:
- new_row = []
- for col in row:
- if not isinstance(col, (float, bool, int, dict, list, tuple)):
- col = str(col)
- new_row.append(col)
- json_content.append(new_row)
-
- 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"]}";')
- content = cursor.fetchone()
-
- cursor.close()
-
- json_content = []
- for col in content:
- if not isinstance(col, (float, bool, int, dict, list, tuple)):
- col = str(col)
- json_content.append(col)
-
- return JsonResponse(dict(zip(table_headers, json_content)))
-
- return ErrorResponse(NOT_FOUND_CODE)
-
-
-@route('/')
-def index_get(query, *args):
- data = render_template('index.html')
- return HtmlResponse(data)
-
-
-def prepare_logger():
- logger = logging.getLogger('tableApp')
- logger.setLevel(logging.INFO)
-
- sh = logging.StreamHandler(stdout)
- formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
- sh.setFormatter(formatter)
- logger.addHandler(sh)
-
-
-if __name__ == '__main__':
- prepare_logger()
-
- from day9.task5_vue.server import start_server
- from day9.task5_vue.database import db, db_column_names
-
- logging.getLogger('tableApp').info(f'Starting server...')
- start_server(SERVER_HOST, SERVER_PORT)