import mariadb from PySide6.QtWidgets import QHBoxLayout, QCheckBox class KontorModelConfig: def __init__(self, db_config, main_window, table_name: str): self.header = {} self.filter = {} self.main_window = main_window self._table = table_name self._table_id = None self.db_conn = mariadb.connect( host=db_config['mariadb']['host'], port=db_config['mariadb']['port'], user=db_config['mariadb']['user'], password=db_config['mariadb']['password'], database=db_config['mariadb']['database'] ) self.get_table_config() def get_table_id(self): if self._table_id is not None: return cursor = self.db_conn.cursor() cursor.execute("SELECT id, created_date, last_modified_date FROM meta_data_table WHERE table_name=?", (self._table, )) rows = cursor.fetchall() if len(rows) == 1: self._table_id = rows[0][0] def get_table_config(self): if self._table_id is None: self.get_table_id() cursor = self.db_conn.cursor() cursor.execute("SELECT column_name, column_order, column_label FROM meta_data_column WHERE table_id=? AND is_shown is true ORDER bY column_order", (self._table_id, )) rows = cursor.fetchall() self.header.clear() order = 0 for (column_name, column_order, column_label) in rows: self.header[order] = { 'column': column_name, 'label': column_label, 'order': column_order} order += 1 # print(f"retrieved {len(rows)} columns, set {len(self.header)} headers") cursor.execute("SELECT column_name, filter_label from meta_data_column WHERE table_id=? AND show_filter is true", (self._table_id, )) rows = cursor.fetchall() for row in rows: self.filter[row[0]] = {'label': row[1], 'widget': None} # print(f"retrieved {len(rows)} filters: {self.filter}") def get_filter(self) -> str: filter_rule = "" # print(self.filter["download"].isChecked()) for column, filter_info in self.filter.items(): # print(column, filter_info) if filter_info['widget'].isChecked(): # print(column, filter_info, filter_rule, len(filter_rule)) if len(filter_rule) < 1: filter_rule += "WHERE " if len(filter_rule) > 8: filter_rule += " AND " filter_rule += f"{column} is true" # print(f"{filter_rule=}") return filter_rule def get_statement(self) -> str: filter_rule = self.get_filter() # self.get_table_config() columns = "" for index, column in self.header.items(): if index > 0: columns += ", " columns += column['column'] statement = f"SELECT {columns} FROM media_file {filter_rule}" return statement def get_filter_layout(self) -> QHBoxLayout: filter_layout = QHBoxLayout() for column, filter_info in self.filter.items(): filter_checkbox = QCheckBox() filter_checkbox.setText(filter_info['label']) filter_checkbox.checkStateChanged.connect(self.main_window.refresh) self.filter[column]['widget'] = filter_checkbox filter_layout.addWidget(filter_checkbox) filter_layout.addStretch() return filter_layout