From fbb73b734df51bc862993f805c42d5a7354bb4f1 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Wed, 23 Sep 2020 18:22:53 +0200 Subject: [PATCH] #2 - database class should not contain any logic --- src/blueprints/Routes.py | 23 +++++++++++++++-------- src/logic/Database.py | 36 +++++++++++++++--------------------- 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/src/blueprints/Routes.py b/src/blueprints/Routes.py index 81dc5d8..5141120 100644 --- a/src/blueprints/Routes.py +++ b/src/blueprints/Routes.py @@ -35,20 +35,27 @@ def construct_blueprint(settings): def postSensorData(deviceName): try: parameters = RequestValidator.validate(request, DeviceParameters.get_values()) + database = Database(settings['database']['databasePath']) + + if not database.get_device(deviceName): + database.add_device(deviceName) + device = database.get_device(deviceName) + sensors = parameters[DeviceParameters.SENSORS.value] for sensor in sensors: sensorParams = RequestValidator.validate_parameters(sensor, SensorParameters.get_values(), f'sensor "{sensor}"') - database = Database(settings['database']['databasePath']) - database.add_device_if_not_exists(deviceName) - device = database.get_device(deviceName) - database.add_or_update_sensor(device, - sensorParams['name'], - sensorParams['type'], - sensorParams['value']) - return jsonify(database.get_device("0182")) + sensorName = sensorParams[SensorParameters.NAME.value] + sensorType = sensorParams[SensorParameters.TYPE.value] + sensorValue = sensorParams[SensorParameters.VALUE.value] + + sensor = database.get_sensor(device[0], sensorName) + if sensor: + database.update_sensor(device, sensorName, sensorType, sensorValue) + else: + database.add_sensor(device, sensorName, sensorType, sensorValue) except ValidationError as e: return e.response, 400 diff --git a/src/logic/Database.py b/src/logic/Database.py index 6774059..91ba76e 100644 --- a/src/logic/Database.py +++ b/src/logic/Database.py @@ -42,11 +42,7 @@ class Database: cursor = connection.execute(f'SELECT * FROM {self.TABLE_DEVICE} WHERE name = "{deviceName}"') return cursor.fetchone() - def add_device_if_not_exists(self, deviceName: str): - if self.get_device(deviceName): - LOGGER.debug(f'Device "{deviceName}" already exists') - return - + def add_device(self, deviceName: str): with self.__get_connection() as connection: LOGGER.debug(f'Inserting new device "{deviceName}"') connection.execute(f'INSERT INTO {self.TABLE_DEVICE}(name) VALUES(?)', (deviceName,)) @@ -56,24 +52,22 @@ class Database: cursor = connection.execute(f'SELECT * FROM {self.TABLE_SENSOR} ORDER BY device_id, name') return cursor.fetchall() - def get_sensor(self, deviceName: str, name: str): - device = self.get_device(deviceName) - if not device: - return None - + def get_sensor(self, deviceID: int, name: str): with self.__get_connection() as connection: cursor = connection.execute(f'SELECT * FROM {self.TABLE_SENSOR} WHERE device_id = ? AND name = ?', - (device[0], name)) + (deviceID, name)) return cursor.fetchone() - def add_or_update_sensor(self, device: Tuple[int, str], name: str, sensorType: str, value: str): - sensor = self.get_sensor(device[1], name) + def add_sensor(self, device: Tuple[int, str], name: str, sensorType: str, value: str): + with self.__get_connection() as connection: + LOGGER.debug(f'Inserting new sensor "{name}" for device "{device[1]}" ' + f'(type: "{sensorType}", value: "{value}")') + connection.execute(f'INSERT INTO {self.TABLE_SENSOR}(name, device_id, type, value) VALUES(?, ?, ?, ?)', + (name, device[0], sensorType, value)) + + def update_sensor(self, device: Tuple[int, str], name: str, sensorType: str, value: str): + LOGGER.debug(f'Updating sensor "{name}" for device "{device[1]}" ' + f'(type: "{sensorType}", value: "{value}")') with self.__get_connection() as connection: - if sensor: - LOGGER.debug(f'Updating sensor "{name}" for device "{device[1]}" (type: "{sensorType}", value: "{value}")') - connection.execute(f'UPDATE {self.TABLE_SENSOR} SET value = ? WHERE device_id = ? AND name = ?', - (value, device[0], name)) - else: - LOGGER.debug(f'Inserting new sensor "{name}" for device "{device[1]}" (type: "{sensorType}", value: "{value}")') - connection.execute(f'INSERT INTO {self.TABLE_SENSOR}(name, device_id, type, value) VALUES(?, ?, ?, ?)', - (name, device[0], sensorType, value)) + connection.execute(f'UPDATE {self.TABLE_SENSOR} SET value = ? WHERE device_id = ? AND name = ?', + (value, device[0], name)) -- GitLab