Skip to content
Snippets Groups Projects
Select Git revision
  • 19cbec3edc664eb952db4c935c7af3ed7e1034ae
  • master default
  • v5.2.2
  • v5.2.1
  • v5.2.0
  • v5.1.2
  • v5.1.1
  • v5.1.0
  • 5.0.2
9 results

EditController.class

Blame
  • Database.py 3.39 KiB
    import sqlite3
    from typing import Tuple
    
    from TheCodeLabs_BaseUtils import DefaultLogger
    
    from logic import Constants
    
    LOGGER = DefaultLogger().create_logger_if_not_exists(Constants.APP_NAME)
    
    
    class Database:
        TABLE_DEVICE = 'device'
        TABLE_SENSOR = 'sensor'
    
        def __init__(self, databasePath):
            self._databasePath = databasePath
            self.__create_database()
    
        def __create_database(self):
            LOGGER.debug('Creating database tables...')
            with self.__get_connection() as connection:
                connection.execute(f'''CREATE TABLE IF NOT EXISTS {self.TABLE_DEVICE} (
                                id INTEGER PRIMARY KEY AUTOINCREMENT, 
                                name TEXT NOT NULL)''')
                connection.execute(f'''CREATE TABLE IF NOT EXISTS sensor (
                             id INTEGER PRIMARY KEY AUTOINCREMENT,
                             device_id INTEGER,
                             name TEXT NOT NULL, 
                             type TEXT NOT NULL, 
                             value TEXT NOT NULL)''')
    
        def __get_connection(self):
            return sqlite3.connect(self._databasePath)
    
        def get_all_devices(self):
            with self.__get_connection() as connection:
                cursor = connection.execute(f'SELECT * FROM {self.TABLE_DEVICE} ORDER BY name')
                return cursor.fetchall()
    
        def get_device(self, deviceName: str):
            with self.__get_connection() as connection:
                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
    
            with self.__get_connection() as connection:
                LOGGER.debug(f'Inserting new device "{deviceName}"')
                connection.execute(f'INSERT INTO {self.TABLE_DEVICE}(name) VALUES(?)', (deviceName,))
    
        def get_all_sensors(self):
            with self.__get_connection() as connection:
                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
    
            with self.__get_connection() as connection:
                cursor = connection.execute(f'SELECT * FROM {self.TABLE_SENSOR} WHERE device_id = ? AND name = ?',
                                            (device[0], 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)
            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))