Test der Datenbank-Verbindung

This commit is contained in:
2025-06-22 19:58:40 +02:00
parent 262a61dc7a
commit 590e844057
4 changed files with 160 additions and 15 deletions
+106
View File
@@ -37,6 +37,7 @@ class AppSettingsDlg(QDialog):
self.temp_apache_fops = self.settings.apache_fops.copy()
self.temp_xsl_dirs = self.settings.xsl_dirs.copy()
self.temp_pdf_projects = self.settings.pdf_projects.copy()
self.temp_postgresql_dbs = self.settings.postgresql_dbs.copy()
# Signale verbinden
self._connect_signals()
@@ -77,6 +78,11 @@ class AppSettingsDlg(QDialog):
self.ui.addProject.clicked.connect(self._add_pdf_project)
self.ui.tablePdfProjects.itemSelectionChanged.connect(self._update_pdf_project_buttons)
# PostgreSQL Tab
self.ui.addPostgreSql.clicked.connect(self._add_postgresql_db)
self.ui.removePostgreSql.clicked.connect(self._remove_postgresql_db)
self.ui.tablePostgreSqlDbs.itemSelectionChanged.connect(self._update_postgresql_db_buttons)
def _setup_tables(self):
"""Richtet die Tabellen-Header ein und macht sie unveränderbar."""
from PySide6.QtWidgets import QAbstractItemView
@@ -111,6 +117,11 @@ class AppSettingsDlg(QDialog):
self.ui.tablePdfProjects.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
self.ui.tablePdfProjects.doubleClicked.connect(self._edit_pdf_project)
# PostgreSQL Tabelle
self.ui.tablePostgreSqlDbs.setHorizontalHeaderLabels(["Name", "Host", "Port", "Datenbank", "Benutzer"])
self.ui.tablePostgreSqlDbs.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
self.ui.tablePostgreSqlDbs.doubleClicked.connect(self._edit_postgresql_db)
def _populate_tables(self):
"""Füllt alle Tabellen mit den aktuellen Einstellungen."""
self._populate_xsl_table()
@@ -119,6 +130,7 @@ class AppSettingsDlg(QDialog):
self._populate_apache_fop_table()
self._populate_diff_pdf_table()
self._populate_pdf_project_table()
self._populate_postgresql_db_table()
def _populate_xsl_table(self):
"""Füllt die XSL-Ordner Tabelle."""
@@ -234,6 +246,31 @@ class AppSettingsDlg(QDialog):
self.ui.tablePdfProjects.setItem(row, 6, diff_pdf_item)
self.ui.tablePdfProjects.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents)
def _populate_postgresql_db_table(self):
"""Füllt die PostgreSQL-Datenbank Tabelle."""
self.ui.tablePostgreSqlDbs.setRowCount(len(self.temp_postgresql_dbs))
for row, postgresql_db in enumerate(self.temp_postgresql_dbs):
name_item = QTableWidgetItem(postgresql_db.name)
name_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
self.ui.tablePostgreSqlDbs.setItem(row, 0, name_item)
host_item = QTableWidgetItem(postgresql_db.host)
host_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
self.ui.tablePostgreSqlDbs.setItem(row, 1, host_item)
port_item = QTableWidgetItem(str(postgresql_db.port))
port_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
self.ui.tablePostgreSqlDbs.setItem(row, 2, port_item)
database_item = QTableWidgetItem(postgresql_db.database)
database_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
self.ui.tablePostgreSqlDbs.setItem(row, 3, database_item)
username_item = QTableWidgetItem(postgresql_db.username)
username_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
self.ui.tablePostgreSqlDbs.setItem(row, 4, username_item)
self.ui.tablePostgreSqlDbs.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents)
# XSL-Ordner Methoden
def _add_xsl_dir(self):
"""Fügt einen neuen XSL-Ordner hinzu."""
@@ -598,6 +635,75 @@ class AppSettingsDlg(QDialog):
self._populate_pdf_project_table()
# PostgreSQL Methoden
def _add_postgresql_db(self):
"""Fügt eine neue PostgreSQL-Datenbank hinzu."""
dialog = PostgreSqlConfigDialog(self)
if dialog.exec() == QDialog.DialogCode.Accepted:
data = dialog.get_data()
if data:
new_id = max([x.id for x in self.temp_postgresql_dbs], default=0) + 1
new_postgresql_db = PostgreSqlDb(
id=new_id,
name=data["name"],
host=data["host"],
port=data["port"],
database=data["database"],
username=data["username"],
password=data["password"]
)
self.temp_postgresql_dbs.append(new_postgresql_db)
self._populate_postgresql_db_table()
self.settings.postgresql_dbs = self.temp_postgresql_dbs.copy()
self.settings.save()
def _remove_postgresql_db(self):
"""Entfernt die ausgewählte PostgreSQL-Datenbank."""
current_row = self.ui.tablePostgreSqlDbs.currentRow()
if current_row >= 0:
del self.temp_postgresql_dbs[current_row]
self._populate_postgresql_db_table()
self._update_postgresql_db_buttons()
self.settings.postgresql_dbs = self.temp_postgresql_dbs.copy()
self.settings.save()
def _update_postgresql_db_buttons(self):
"""Aktualisiert den Status der PostgreSQL-Buttons."""
has_selection = self.ui.tablePostgreSqlDbs.currentRow() >= 0
self.ui.removePostgreSqlDb.setEnabled(has_selection)
def _edit_postgresql_db(self, index):
"""Bearbeitet eine PostgreSQL-Datenbank per Doppelklick."""
row = index.row()
if 0 <= row < len(self.temp_postgresql_dbs):
postgresql_db = self.temp_postgresql_dbs[row]
dialog = PostgreSqlConfigDialog(self)
# Vorhandene Daten setzen
data = {
"name": postgresql_db.name,
"host": postgresql_db.host,
"port": postgresql_db.port,
"database": postgresql_db.database,
"username": postgresql_db.username,
"password": postgresql_db.password
}
dialog.set_data(data)
if dialog.exec() == QDialog.DialogCode.Accepted:
new_data = dialog.get_data()
if new_data:
# Daten aktualisieren
postgresql_db.name = new_data["name"]
postgresql_db.host = new_data["host"]
postgresql_db.port = new_data["port"]
postgresql_db.database = new_data["database"]
postgresql_db.username = new_data["username"]
postgresql_db.password = new_data["password"]
self._populate_postgresql_db_table()
def accept(self):
"""Übernimmt die Änderungen und schließt den Dialog."""
# Aktualisiere die ursprünglichen Einstellungen