Skip to content

Commit 20af588

Browse files
authored
Merge pull request #6498 from ales-erjavec/fixes/owdiscretize-model-error
[FIX] owdiscretize: Fix formatting display string when user role is undefined
2 parents d49a8a3 + a8cf0c5 commit 20af588

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

Orange/widgets/data/owdiscretize.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,8 @@ def data(self, index, role=Qt.DisplayRole):
330330
if role == Qt.ToolTipRole:
331331
var = self[index.row()]
332332
data = index.data(Qt.UserRole)
333+
if not isinstance(data, DiscDesc):
334+
return super().data(index, role)
333335
tip = f"<b>{var.name}: </b>"
334336
values = map(html.escape, data.values)
335337
if not data.values:
@@ -342,8 +344,12 @@ def data(self, index, role=Qt.DisplayRole):
342344
+ "".join(f"- {value}<br/>" for value in values)
343345
value = super().data(index, role)
344346
if role == Qt.DisplayRole:
345-
hint, points, values = index.data(Qt.UserRole)
346-
value += f" ({format_desc(hint)}){points}"
347+
try:
348+
hint, points, values = index.data(Qt.UserRole)
349+
except TypeError:
350+
pass # don't have user role (yet)
351+
else:
352+
value += f" ({format_desc(hint)}){points}"
347353
return value
348354

349355

Orange/widgets/data/tests/test_owdiscretize.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
IncreasingNumbersListValidator, VarHint, Methods, DefaultKey, \
1919
_fixed_width_discretization, _fixed_time_width_discretization, \
2020
_custom_discretization, variable_key, Options, DefaultHint, \
21-
_mdl_discretization, ListViewSearch, format_desc, DefaultDiscModel
21+
_mdl_discretization, ListViewSearch, format_desc, DefaultDiscModel, \
22+
DiscDomainModel, DiscDesc
2223
from Orange.widgets.tests.base import WidgetTest, GuiTest
2324
from Orange.widgets.utils.itemmodels import select_rows
2425

@@ -549,6 +550,27 @@ def test_model(self):
549550
display)
550551

551552

553+
class TestDiscModel(GuiTest, DataMixin):
554+
def setUp(self) -> None:
555+
super().setUp()
556+
self.prepare_data()
557+
558+
def test_model(self):
559+
model = DiscDomainModel()
560+
model.set_domain(self.domain)
561+
index = model.index(0)
562+
self.assertEqual(index.data(Qt.DisplayRole), "x")
563+
self.assertIn("x", index.data(Qt.ToolTipRole), "x")
564+
model.setData(
565+
index,
566+
DiscDesc(
567+
VarHint(Methods.EqualFreq, (3, )), "1, 2", ("1", "2")),
568+
Qt.UserRole
569+
)
570+
self.assertTrue(index.data(Qt.DisplayRole).startswith("x "))
571+
self.assertIn("2", index.data(Qt.ToolTipRole))
572+
573+
552574
class TestDefaultDiscModel(GuiTest):
553575
def test_counts(self):
554576
model = DefaultDiscModel()

0 commit comments

Comments
 (0)