From f41cd316889dcbdc62e22e6622a6ecea4a435084 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 7 Jul 2019 15:40:51 +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=BE=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D1=85=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D0=B5=D0=B9=20=D0=B2=20=D1=82=D0=B0=D0=B1?= =?UTF-8?q?=D0=BB=D0=B8=D1=86=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day9/task5/database.py | 16 +++- day9/task5/index.html | 236 +++++++++++++++++++++++-------------------------- day9/task5/main.py | 47 +++++++--- day9/task5/server.py | 3 + day9/task5/utils.py | 31 ------- 5 files changed, 163 insertions(+), 170 deletions(-) diff --git a/day9/task5/database.py b/day9/task5/database.py index 067c481..9b958b7 100644 --- a/day9/task5/database.py +++ b/day9/task5/database.py @@ -1,7 +1,19 @@ import MySQLdb from config import * +import logging + +def db_column_names(): + cursor = db.cursor() + cursor.execute('DESCRIBE table_task1;') + table_structure = cursor.fetchall() + table_headers = [field[0] for field in table_structure] + return table_headers + + +logger = logging.getLogger('tableApp') +logger.info(f'Trying to connect to database "{DATABASE_NAME}@{HOST}"...') # В файле config.py создайте соответствующие переменные db = MySQLdb.connect( host=HOST, @@ -9,7 +21,9 @@ db = MySQLdb.connect( passwd=PASSWORD, db=DATABASE_NAME ) +logger.info('Connected') +logger.info(f'Preparing table "table_task1"...') db.cursor().execute( ''' CREATE TABLE IF NOT EXISTS `table_task1` ( @@ -26,4 +40,4 @@ db.cursor().execute( PRIMARY KEY (`service_id`) ) ENGINE=InnoDB AUTO_INCREMENT=35109400 DEFAULT CHARSET=utf8; ''' -) \ No newline at end of file +) diff --git a/day9/task5/index.html b/day9/task5/index.html index 7fe81bb..798fb92 100644 --- a/day9/task5/index.html +++ b/day9/task5/index.html @@ -11,59 +11,46 @@ } thead > tr > th { - padding: 10px; - font-size: 20px; + padding: 6px; + font-size: 16px; background-color: #6f6f6f; } td { - padding: 5px; - font-size: 17px; + padding: 3px; + font-size: 13px; } + - input[type="date"], input[type="time"] { + - #table_operations { - margin: 30px; - font-size: 20px; - } - + - - -
- `table_task1`
- -
-
- -
-
- +
-
-
-
-
-
+
+
+
+
+

-
-
+
+

+
-
@@ -90,43 +80,6 @@
diff --git a/day9/task5/main.py b/day9/task5/main.py index 738afbe..d5bcbb8 100644 --- a/day9/task5/main.py +++ b/day9/task5/main.py @@ -1,21 +1,29 @@ from router import route -from utils import render_template, parse_query, NOT_FOUND_CODE -from database import db +from utils import render_template, NOT_FOUND_CODE from config import SERVER_HOST, SERVER_PORT +import logging +from sys import stdout + @route('/update', ['POST']) def update_post(query, *args): - expressions, conditions = parse_query(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('UPDATE `table_task1` SET {} WHERE {}'.format( - expressions, conditions + cursor.execute("UPDATE `table_task1` SET {} WHERE {};".format( + ','.join(query_set), f'service_id="{service_id}"' )) - result = cursor.fetchall() cursor.close() - return f'

UPDATE: {result}

' + return f'

Database Updated

' @route('/delete', ['POST']) @@ -30,19 +38,15 @@ def add_post(query, *args): @route('/get', ['POST']) def db_get(query, *args): + table_headers = db_column_names() cursor = db.cursor() if query['type'] == 'full': - cursor.execute('DESCRIBE table_task1;') - table_structure = cursor.fetchall() - cursor.execute('SELECT * FROM table_task1;') content = cursor.fetchall() cursor.close() - table_headers = [field[0] for field in table_structure] - json_content = [] for row in content: new_row = [] @@ -53,6 +57,7 @@ def db_get(query, *args): json_content.append(new_row) return {'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() @@ -65,7 +70,7 @@ def db_get(query, *args): col = str(col) json_content.append(col) - return json_content + return dict(zip(table_headers, json_content)) return NOT_FOUND_CODE @@ -73,10 +78,24 @@ def db_get(query, *args): @route('/') def index_get(query, *args): data = render_template('index.html') - return 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 server import start_server + from database import db, db_column_names + + logging.getLogger('tableApp').info(f'Starting server...') start_server(SERVER_HOST, SERVER_PORT) diff --git a/day9/task5/server.py b/day9/task5/server.py index 47e29f9..a6044bd 100644 --- a/day9/task5/server.py +++ b/day9/task5/server.py @@ -5,6 +5,8 @@ from json import dumps from router import run from utils import HTTP_STATUS_CODES +import logging + class MyHTTPRequestHandler(BaseHTTPRequestHandler): def _set_response(self, code, content_type): @@ -57,4 +59,5 @@ class MyHTTPRequestHandler(BaseHTTPRequestHandler): def start_server(host, port): server_address = (host, port) httpd = HTTPServer(server_address, MyHTTPRequestHandler) + logging.getLogger('tableApp').info(f'Server started on {host}:{port}') httpd.serve_forever() diff --git a/day9/task5/utils.py b/day9/task5/utils.py index 5a48a9f..3e0dc64 100644 --- a/day9/task5/utils.py +++ b/day9/task5/utils.py @@ -74,34 +74,3 @@ def render_template(path, **kwargs): template = template.replace(f'%%{key}%%', kwargs[key]) return template - - -def parse_query(query): - parsed_query = {'expression': {}, 'condition': {}} - - pattern = re.compile(r'(expression|condition)(\d+)_(key|value)') - - for key, (value,) in query.items(): - match = pattern.fullmatch(key) - if match is not None: - index = int(match.group(2)) - if index not in parsed_query[match.group(1)]: - parsed_query[match.group(1)][index] = {} - - parsed_query[match.group(1)][index][match.group(3)] = value - - expressions = [] - for expression in parsed_query['expression'].values(): - expressions.append('`{}`="{}"'.format( - expression['key'], expression['value'] - )) - expressions = ','.join(expressions) - - conditions = [] - for condition in parsed_query['condition'].values(): - conditions.append('`{}`="{}"'.format( - condition['key'], condition['value'] - )) - conditions = ' AND '.join(conditions) - - return {'expressions': expressions, 'conditions': conditions} -- cgit v1.2.3