Test der Datenbank läuft im Hintergrund
This commit is contained in:
@@ -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
|
||||
|
||||
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):
|
||||
"""Dialog zur Konfiguration einer PostgreSQL-Datenbank ohne ID."""
|
||||
|
||||
@@ -18,25 +48,53 @@ class PostgreSqlConfigDialog(QDialog):
|
||||
# SSL-Modus auf "prefer" setzen (Standard)
|
||||
self.ui.sslModeComboBox.setCurrentText("prefer")
|
||||
|
||||
# Thread für Datenbanktest
|
||||
self.test_thread = None
|
||||
|
||||
# Signale verbinden
|
||||
self.ui.testConnectionButton.clicked.connect(self.test_connection)
|
||||
|
||||
def test_connection(self):
|
||||
"""Testet die Datenbankverbindung."""
|
||||
# Hier könnte eine echte Verbindung getestet werden
|
||||
# Für jetzt zeigen wir nur eine Info-Nachricht
|
||||
data = self.get_data() or {}
|
||||
"""Testet die Datenbankverbindung in einem separaten Thread."""
|
||||
data = self.get_data()
|
||||
if not data:
|
||||
QMessageBox.warning(self, "Verbindungstest", "Bitte füllen Sie alle erforderlichen Felder aus.")
|
||||
return
|
||||
|
||||
try:
|
||||
r = pl.read_database_uri(
|
||||
query="SELECT 1",
|
||||
uri=f"postgresql://{data['username']}:{data['password']}@{data['host']}:{data['port']}/{data['database']}"
|
||||
)
|
||||
# Button deaktivieren und Text mit Sanduhrsymbol ändern
|
||||
self.ui.testConnectionButton.setEnabled(False)
|
||||
original_text = self.ui.testConnectionButton.text()
|
||||
self.ui.testConnectionButton.setText("⏳ Teste Verbindung...")
|
||||
|
||||
QMessageBox.information(self, "Verbindungstest", f"Vebindung erfolgreich:\n{str(r)}")
|
||||
except Exception as e:
|
||||
QMessageBox.warning(self, "Verbindungstest", f"Verbindung fehlgeschlagen:\n{e}")
|
||||
raise e
|
||||
# Wartecursor setzen
|
||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
|
||||
# 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):
|
||||
"""Setzt die Daten in den Dialog."""
|
||||
|
||||
Reference in New Issue
Block a user