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
|
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...")
|
||||||
)
|
|
||||||
|
# Wartecursor setzen
|
||||||
|
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||||
|
|
||||||
QMessageBox.information(self, "Verbindungstest", f"Vebindung erfolgreich:\n{str(r)}")
|
# Thread erstellen und starten
|
||||||
except Exception as e:
|
self.test_thread = DatabaseTestThread(data)
|
||||||
QMessageBox.warning(self, "Verbindungstest", f"Verbindung fehlgeschlagen:\n{e}")
|
self.test_thread.test_completed.connect(self.on_test_completed)
|
||||||
raise e
|
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."""
|
||||||
|
|||||||
Reference in New Issue
Block a user