Skip to content

Commit 598bfea

Browse files
authored
Merge pull request #4270 from VesnaT/sql_setting
[FIX] SQL: Save selected backend to settings
2 parents 79fe1be + e18514d commit 598bfea

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

Orange/widgets/data/owsql.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class Outputs:
5050

5151
settings_version = 2
5252

53+
selected_backend = Setting(None)
5354
table = Setting(None)
5455
sql = Setting("")
5556
guess_values = Setting(True)
@@ -89,11 +90,19 @@ def _add_backend_controls(self):
8990
self.backendcombo = QComboBox(box)
9091
if self.backends:
9192
self.backendcombo.setModel(self.backends)
93+
names = [backend.display_name for backend in self.backends]
94+
if self.selected_backend and self.selected_backend in names:
95+
self.backendcombo.setCurrentText(self.selected_backend)
9296
else:
9397
self.Error.no_backends()
9498
box.setEnabled(False)
99+
self.backendcombo.currentTextChanged.connect(self.__backend_changed)
95100
box.layout().insertWidget(0, self.backendcombo)
96101

102+
def __backend_changed(self):
103+
backend = self.get_backend()
104+
self.selected_backend = backend.display_name if backend else None
105+
97106
def _add_tables_controls(self):
98107
vbox = gui.vBox(self.controlArea, "Tables", addSpace=True)
99108
box = gui.vBox(vbox)

Orange/widgets/data/tests/test_owsql.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from Orange.data import Table
88
from Orange.widgets.data.owsql import OWSql
9-
from Orange.widgets.tests.base import WidgetTest
9+
from Orange.widgets.tests.base import WidgetTest, simulate
1010
from Orange.tests.sql.base import DataBaseTest as dbt
1111

1212

@@ -116,6 +116,33 @@ def test_restore_table(self, mock_backends, mock_sqltable, mock_table):
116116
widget = self.create_widget(OWSql, stored_settings=settings)
117117
self.assertEqual(widget.tablecombo.currentText(), "b")
118118

119+
@mock.patch("Orange.data.sql.backend.base.Backend.available_backends")
120+
def test_selected_backend(self, mocked_backends: mock.Mock):
121+
b1, b2 = mock.Mock(), mock.Mock()
122+
b1.display_name = "B1"
123+
b2.display_name = "B2"
124+
mocked_backends.return_value = [b1, b2]
125+
126+
widget = self.create_widget(OWSql)
127+
self.assertEqual(widget.backendcombo.currentText(), "B1")
128+
129+
simulate.combobox_activate_index(widget.backendcombo, 1)
130+
self.assertEqual(widget.backendcombo.currentText(), "B2")
131+
132+
settings = widget.settingsHandler.pack_data(widget)
133+
widget = self.create_widget(OWSql, stored_settings=settings)
134+
self.assertEqual(widget.backendcombo.currentText(), "B2")
135+
136+
settings = widget.settingsHandler.pack_data(widget)
137+
settings["selected_backend"] = "B3"
138+
widget = self.create_widget(OWSql, stored_settings=settings)
139+
self.assertEqual(widget.backendcombo.currentText(), "B1")
140+
141+
mocked_backends.return_value = []
142+
settings = widget.settingsHandler.pack_data(widget)
143+
widget = self.create_widget(OWSql, stored_settings=settings)
144+
self.assertEqual(widget.backendcombo.currentText(), "")
145+
119146

120147
if __name__ == "__main__":
121148
unittest.main()

0 commit comments

Comments
 (0)