Skip to content

Commit 9bd18c7

Browse files
committed
Create Class: Better error description for invalid regular expressions
1 parent 7013524 commit 9bd18c7

File tree

3 files changed

+17
-16
lines changed

3 files changed

+17
-16
lines changed

Orange/widgets/data/owcreateclass.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ class Warning(widget.OWWidget.Warning):
250250
class Error(widget.OWWidget.Error):
251251
class_name_duplicated = Msg("Class name duplicated.")
252252
class_name_empty = Msg("Class name should not be empty.")
253-
invalid_regular_expression = Msg("Invalid regular expression.")
253+
invalid_regular_expression = Msg("Invalid regular expression: {}")
254254

255255
def __init__(self):
256256
super().__init__()
@@ -458,15 +458,15 @@ def class_labels(self):
458458
return [label_edit.text() or f"C{next(class_count)}"
459459
for label_edit, _ in self.line_edits]
460460

461-
def check_patterns(self):
461+
def invalid_patterns(self):
462462
if not self.regular_expressions:
463-
return True
464-
for pattern in self.active_rules:
463+
return None
464+
for _, pattern in self.active_rules:
465465
try:
466-
re.compile(pattern[1])
466+
re.compile(pattern)
467467
except re.error:
468-
return False
469-
return True
468+
return pattern
469+
return None
470470

471471
def update_counts(self):
472472
"""Recompute and update the counts of matches."""
@@ -575,8 +575,8 @@ def _set_placeholders():
575575
lab_edit.setPlaceholderText(label)
576576

577577
_clear_labels()
578-
if not self.check_patterns():
579-
self.Error.invalid_regular_expression()
578+
if (invalid := self.invalid_patterns()) is not None:
579+
self.Error.invalid_regular_expression(invalid)
580580
return
581581
self.Error.invalid_regular_expression.clear()
582582

@@ -594,8 +594,8 @@ def _set_placeholders():
594594
def apply(self):
595595
"""Output the transformed data."""
596596
self.Error.clear()
597-
if not self.check_patterns():
598-
self.Error.invalid_regular_expression()
597+
if (invalid := self.invalid_patterns()) is not None:
598+
self.Error.invalid_regular_expression(invalid)
599599
self.Outputs.data.send(None)
600600
return
601601

Orange/widgets/data/tests/test_owcreateclass.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -387,10 +387,10 @@ def test_check_patterns(self):
387387
widget.line_edits[0][1].setText("[a")
388388

389389
widget.regular_expressions = False
390-
self.assertTrue(widget.check_patterns())
390+
self.assertIsNone(widget.invalid_patterns())
391391

392392
widget.regular_expressions = True
393-
self.assertFalse(widget.check_patterns())
393+
self.assertEqual(widget.invalid_patterns(), "[a")
394394

395395
def test_check_re_counts(self):
396396
widget = self.widget
@@ -407,13 +407,14 @@ def test_check_re_counts(self):
407407
widget.apply()
408408
self.assertIsNotNone(self.get_output(self.widget.Outputs.data))
409409

410-
widget.line_edits[0][1].setText("a[.*a")
410+
widget.line_edits[1][1].setText("b[")
411411
self._check_counts([["", ""], ["", ""], ["", ""]])
412412
self.assertTrue(widget.Error.invalid_regular_expression.is_shown())
413+
self.assertIn("b[", str(widget.Error.invalid_regular_expression))
413414
widget.apply()
414415
self.assertIsNone(self.get_output(self.widget.Outputs.data))
415416

416-
widget.line_edits[0][1].setText("a.*a")
417+
widget.line_edits[1][1].setText("b")
417418
self._check_counts([["45", ""], ["30", "+ 4"], ["26", ""]])
418419
self.assertFalse(widget.Error.invalid_regular_expression.is_shown())
419420
widget.apply()

i18n/si/msgs.jaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4741,7 +4741,7 @@ widgets/data/owcreateclass.py:
47414741
class `Error`:
47424742
Class name duplicated.: Spremenljivka s tem imenom že obstaja.
47434743
Class name should not be empty.: Ime razreda ne more biti prazno.
4744-
Invalid regular expression.: Napačen regularni izraz.
4744+
'Invalid regular expression: {}': 'Napačen regularni izraz: {}'
47454745
def `__init__`:
47464746
class_name: false
47474747
New Class Name: Ime novega razreda

0 commit comments

Comments
 (0)