Skip to content
Snippets Groups Projects
Commit fbb73b73 authored by Robert Goldmann's avatar Robert Goldmann
Browse files

#2 - database class should not contain any logic

parent 2388c373
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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:
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}")')
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:
connection.execute(f'UPDATE {self.TABLE_SENSOR} SET value = ? WHERE device_id = ? AND name = ?',
(value, device[0], name))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment