Test der Datenbank läuft im Hintergrund

This commit is contained in:
2025-07-12 20:40:49 +02:00
parent ebe20fe7d9
commit 768baf5dc1
+72 -14
View File
@@ -1,10 +1,40 @@
from PySide6.QtWidgets import QDialog, QMessageBox from PySide6.QtWidgets import QDialog, QMessageBox, QApplication
from PySide6.QtCore import QThread, Signal, Qt
from ui.PostgreSqlConfigDialog_ui import Ui_PostgreSqlConfigDialog from ui.PostgreSqlConfigDialog_ui import Ui_PostgreSqlConfigDialog
import polars as pl import polars as pl
class DatabaseTestThread(QThread):
"""Thread für den Datenbankverbindungstest."""
# Signale für die Kommunikation mit dem UI-Thread
test_completed = Signal(bool, str) # success, message
def __init__(self, connection_data):
super().__init__()
self.connection_data = connection_data
def run(self):
"""Führt den Datenbanktest in einem separaten Thread aus."""
try:
uri = f"postgresql://{self.connection_data['username']}:{self.connection_data['password']}@{self.connection_data['host']}:{self.connection_data['port']}/{self.connection_data['database']}"
# Datenbankverbindung testen
r = pl.read_database_uri(
query="SELECT 1",
uri=uri
)
# Erfolg signalisieren
self.test_completed.emit(True, f"Verbindung erfolgreich:\n{str(r)}")
except Exception as e:
# Fehler signalisieren
self.test_completed.emit(False, f"Verbindung fehlgeschlagen:\n{str(e)}")
class PostgreSqlConfigDialog(QDialog): class PostgreSqlConfigDialog(QDialog):
"""Dialog zur Konfiguration einer PostgreSQL-Datenbank ohne ID.""" """Dialog zur Konfiguration einer PostgreSQL-Datenbank ohne ID."""
@@ -18,25 +48,53 @@ class PostgreSqlConfigDialog(QDialog):
# SSL-Modus auf "prefer" setzen (Standard) # SSL-Modus auf "prefer" setzen (Standard)
self.ui.sslModeComboBox.setCurrentText("prefer") self.ui.sslModeComboBox.setCurrentText("prefer")
# Thread für Datenbanktest
self.test_thread = None
# Signale verbinden # Signale verbinden
self.ui.testConnectionButton.clicked.connect(self.test_connection) self.ui.testConnectionButton.clicked.connect(self.test_connection)
def test_connection(self): def test_connection(self):
"""Testet die Datenbankverbindung.""" """Testet die Datenbankverbindung in einem separaten Thread."""
# Hier könnte eine echte Verbindung getestet werden data = self.get_data()
# Für jetzt zeigen wir nur eine Info-Nachricht if not data:
data = self.get_data() or {} QMessageBox.warning(self, "Verbindungstest", "Bitte füllen Sie alle erforderlichen Felder aus.")
return
try: # Button deaktivieren und Text mit Sanduhrsymbol ändern
r = pl.read_database_uri( self.ui.testConnectionButton.setEnabled(False)
query="SELECT 1", original_text = self.ui.testConnectionButton.text()
uri=f"postgresql://{data['username']}:{data['password']}@{data['host']}:{data['port']}/{data['database']}" self.ui.testConnectionButton.setText("⏳ Teste Verbindung...")
)
QMessageBox.information(self, "Verbindungstest", f"Vebindung erfolgreich:\n{str(r)}") # Wartecursor setzen
except Exception as e: QApplication.setOverrideCursor(Qt.WaitCursor)
QMessageBox.warning(self, "Verbindungstest", f"Verbindung fehlgeschlagen:\n{e}")
raise e # Thread erstellen und starten
self.test_thread = DatabaseTestThread(data)
self.test_thread.test_completed.connect(self.on_test_completed)
self.test_thread.finished.connect(lambda: self.cleanup_test(original_text))
self.test_thread.start()
def on_test_completed(self, success, message):
"""Wird aufgerufen, wenn der Datenbanktest abgeschlossen ist."""
if success:
QMessageBox.information(self, "Verbindungstest", message)
else:
QMessageBox.warning(self, "Verbindungstest", message)
def cleanup_test(self, original_text):
"""Räumt nach dem Test auf."""
# Wartecursor entfernen
QApplication.restoreOverrideCursor()
# Button wieder aktivieren und ursprünglichen Text wiederherstellen
self.ui.testConnectionButton.setEnabled(True)
self.ui.testConnectionButton.setText(original_text)
# Thread-Referenz löschen
if self.test_thread:
self.test_thread.deleteLater()
self.test_thread = None
def set_data(self, data): def set_data(self, data):
"""Setzt die Daten in den Dialog.""" """Setzt die Daten in den Dialog."""