3aed8af868
implement generic table model which reads table info from db and constructs table view
83 lines
3.1 KiB
Python
83 lines
3.1 KiB
Python
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
|