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.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): 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: return rows[0][0] return None def get_table_config(self): table_id = self.get_table_id() cursor = self.db_conn.cursor() cursor.execute("SELECT id, column_name, column_order FROM meta_data_column WHERE table_id=? AND is_shown is true", (table_id, )) rows = cursor.fetchall() self.header.clear() for (column_id, column_name, column_order) in rows: self.header.insert(column_order-1, column_name) print(f"retrieved {len(rows)} columns, set {len(self.header)} headers") def get_header(self) -> list: self.get_table_config() return self.header def get_filter(self) -> str: filter_rule = "" # print(self.filter["download"].isChecked()) if self.filter["download"].isChecked(): # print(self.filter["download"].isChecked()) filter_rule = "WHERE should_download is true" if self.filter["review"].isChecked(): if len(filter_rule) > 0: filter_rule += " AND " else: filter_rule += "WHERE " filter_rule += "review 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 in range(len(self.header)): if index > 0: columns += ", " columns += self.header[index] statement = f"SELECT {columns} FROM media_file {filter_rule}" return statement def get_filter_layout(self) -> QHBoxLayout: filter_layout = QHBoxLayout() download_checkbox = QCheckBox() download_checkbox.setText("Download") download_checkbox.checkStateChanged.connect(self.main_window.refresh) self.filter["download"] = download_checkbox review_checkbox = QCheckBox() review_checkbox.setText("Review") review_checkbox.checkStateChanged.connect(self.main_window.refresh) self.filter["review"] = review_checkbox filter_layout.addWidget(review_checkbox) filter_layout.addWidget(download_checkbox) filter_layout.addStretch() return filter_layout