Skip to content

Commit

Permalink
Merge pull request #6498 from ales-erjavec/fixes/owdiscretize-model-e…
Browse files Browse the repository at this point in the history
…rror

[FIX] owdiscretize: Fix formatting display string when user role is undefined
  • Loading branch information
janezd committed Aug 24, 2023
2 parents d49a8a3 + a8cf0c5 commit 20af588
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 3 deletions.
10 changes: 8 additions & 2 deletions Orange/widgets/data/owdiscretize.py
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,8 @@ def data(self, index, role=Qt.DisplayRole):
if role == Qt.ToolTipRole:
var = self[index.row()]
data = index.data(Qt.UserRole)
if not isinstance(data, DiscDesc):
return super().data(index, role)
tip = f"<b>{var.name}: </b>"
values = map(html.escape, data.values)
if not data.values:
Expand All @@ -342,8 +344,12 @@ def data(self, index, role=Qt.DisplayRole):
+ "".join(f"- {value}<br/>" for value in values)
value = super().data(index, role)
if role == Qt.DisplayRole:
hint, points, values = index.data(Qt.UserRole)
value += f" ({format_desc(hint)}){points}"
try:
hint, points, values = index.data(Qt.UserRole)
except TypeError:
pass # don't have user role (yet)
else:
value += f" ({format_desc(hint)}){points}"
return value


Expand Down
24 changes: 23 additions & 1 deletion Orange/widgets/data/tests/test_owdiscretize.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@
IncreasingNumbersListValidator, VarHint, Methods, DefaultKey, \
_fixed_width_discretization, _fixed_time_width_discretization, \
_custom_discretization, variable_key, Options, DefaultHint, \
_mdl_discretization, ListViewSearch, format_desc, DefaultDiscModel
_mdl_discretization, ListViewSearch, format_desc, DefaultDiscModel, \
DiscDomainModel, DiscDesc
from Orange.widgets.tests.base import WidgetTest, GuiTest
from Orange.widgets.utils.itemmodels import select_rows

Expand Down Expand Up @@ -549,6 +550,27 @@ def test_model(self):
display)


class TestDiscModel(GuiTest, DataMixin):
def setUp(self) -> None:
super().setUp()
self.prepare_data()

def test_model(self):
model = DiscDomainModel()
model.set_domain(self.domain)
index = model.index(0)
self.assertEqual(index.data(Qt.DisplayRole), "x")
self.assertIn("x", index.data(Qt.ToolTipRole), "x")
model.setData(
index,
DiscDesc(
VarHint(Methods.EqualFreq, (3, )), "1, 2", ("1", "2")),
Qt.UserRole
)
self.assertTrue(index.data(Qt.DisplayRole).startswith("x "))
self.assertIn("2", index.data(Qt.ToolTipRole))


class TestDefaultDiscModel(GuiTest):
def test_counts(self):
model = DefaultDiscModel()
Expand Down

0 comments on commit 20af588

Please sign in to comment.