Skip to content

Commit c3c186d

Browse files
authored
Merge pull request #1731 from ales-erjavec/fixes/edit-domain-var-initialize
[FIX] oweditdomain: Initialize `var` attribute
2 parents f215a8b + b3f5841 commit c3c186d

File tree

2 files changed

+65
-8
lines changed

2 files changed

+65
-8
lines changed

Orange/widgets/data/oweditdomain.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ class VariableEditor(QWidget):
122122

123123
def __init__(self, parent=None):
124124
QWidget.__init__(self, parent)
125+
self.var = None
125126
self.setup_gui()
126127

127128
def setup_gui(self):
@@ -216,7 +217,7 @@ def get_data(self):
216217
labels = self.labels_model.get_dict()
217218

218219
# Is the variable actually changed.
219-
if not self.is_same():
220+
if self.var is not None and not self.is_same():
220221
var = type(self.var)(name)
221222
var.attributes.update(labels)
222223
self.var = var
@@ -231,7 +232,8 @@ def is_same(self):
231232
name = str(self.name_edit.text())
232233
labels = self.labels_model.get_dict()
233234

234-
return self.var and name == self.var.name and labels == self.var.attributes
235+
return (self.var is not None and name == self.var.name and
236+
labels == self.var.attributes)
235237

236238
def clear(self):
237239
"""Clear the editor state.
@@ -319,7 +321,7 @@ def get_data(self):
319321
labels = self.labels_model.get_dict()
320322
values = map(str, self.values_model)
321323

322-
if not self.is_same():
324+
if self.var is not None and not self.is_same():
323325
var = type(self.var)(name, values=values)
324326
var.attributes.update(labels)
325327
self.var = var
@@ -331,8 +333,9 @@ def get_data(self):
331333
def is_same(self):
332334
"""Is the current model state the same as the input.
333335
"""
334-
values = map(str, self.values_model)
335-
return VariableEditor.is_same(self) and self.var.values == values
336+
values = list(map(str, self.values_model))
337+
return (VariableEditor.is_same(self) and self.var is not None and
338+
self.var.values == values)
336339

337340
def clear(self):
338341
"""Clear the model state.

Orange/widgets/data/tests/test_oweditdomain.py

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66

77
from AnyQt.QtCore import QModelIndex, Qt
88

9-
from Orange.data import ContinuousVariable, DiscreteVariable, Table, Domain
9+
from Orange.data import ContinuousVariable, DiscreteVariable, \
10+
StringVariable, Table, Domain
1011
from Orange.widgets.data.oweditdomain import EditDomainReport, OWEditDomain, \
11-
ContinuousVariableEditor
12+
ContinuousVariableEditor, DiscreteVariableEditor, VariableEditor
1213
from Orange.widgets.data.owcolor import OWColor, ColorRole
13-
from Orange.widgets.tests.base import WidgetTest
14+
from Orange.widgets.tests.base import WidgetTest, GuiTest
1415

1516
SECTION_NAME = "NAME"
1617

@@ -138,3 +139,56 @@ def test_list_attributes_remain_lists(self):
138139
self.widget.unconditional_commit()
139140
t2 = self.get_output("Data")
140141
self.assertEqual(t2.domain["a"].attributes["list"], [1, 2, 4])
142+
143+
144+
class TestEditors(GuiTest):
145+
def test_variable_editor(self):
146+
w = VariableEditor()
147+
self.assertIs(w.get_data(), None)
148+
149+
v = StringVariable(name="S")
150+
v.attributes.update({"A": 1, "B": "b"},)
151+
w.set_data(v)
152+
153+
self.assertEqual(w.name_edit.text(), v.name)
154+
self.assertEqual(w.labels_model.get_dict(), v.attributes)
155+
self.assertTrue(w.is_same())
156+
157+
w.set_data(None)
158+
self.assertEqual(w.name_edit.text(), "")
159+
self.assertEqual(w.labels_model.get_dict(), {})
160+
self.assertIs(w.get_data(), None)
161+
162+
def test_continuous_editor(self):
163+
w = ContinuousVariableEditor()
164+
self.assertIs(w.get_data(), None)
165+
166+
v = ContinuousVariable("X", number_of_decimals=5)
167+
v.attributes.update({"A": 1, "B": "b"})
168+
w.set_data(v)
169+
170+
self.assertEqual(w.name_edit.text(), v.name)
171+
self.assertEqual(w.labels_model.get_dict(), v.attributes)
172+
self.assertTrue(w.is_same())
173+
174+
w.set_data(None)
175+
self.assertEqual(w.name_edit.text(), "")
176+
self.assertEqual(w.labels_model.get_dict(), {})
177+
self.assertIs(w.get_data(), None)
178+
179+
def test_discrete_editor(self):
180+
w = DiscreteVariableEditor()
181+
self.assertIs(w.get_data(), None)
182+
183+
v = DiscreteVariable("C", values=["a", "b", "c"])
184+
v.attributes.update({"A": 1, "B": "b"})
185+
w.set_data(v)
186+
187+
self.assertEqual(w.name_edit.text(), v.name)
188+
self.assertEqual(w.labels_model.get_dict(), v.attributes)
189+
self.assertTrue(w.is_same())
190+
191+
w.set_data(None)
192+
self.assertEqual(w.name_edit.text(), "")
193+
self.assertEqual(w.labels_model.get_dict(), {})
194+
self.assertIs(w.get_data(), None)

0 commit comments

Comments
 (0)