import mariadb from PySide6.QtWidgets import QHBoxLayout, QCheckBox from database import KontorDB from database.comic import Comic class KontorModelConfig: def __init__(self, kontor_db: KontorDB, main_window, table_name: str): self.header = {} self.filter = {} self.main_window = main_window self._table = table_name self._table_id = None self.kontor_db = kontor_db self.get_table_config() def get_table_id(self): if self._table_id is not None: return self._table_id = self.kontor_db.get_table_id(self._table) def get_table_config(self): if self._table_id is None: self.get_table_id() self.header = self.kontor_db.get_column_meta_data(self._table_id, self._table) self.filter = self.kontor_db.get_filters(self._table_id) 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_data(self) -> list: data = self.kontor_db.get_data(self._table, self.header, self.get_filter()) print(f"KontorModelConfig.get_data: {len(data)}") # comics = self.kontor_db.session.query(Comic).all() # print(f'{len(comics)} Comics loaded') return data 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