From a549599af6f93020056b7b881c83aa128783c9c6 Mon Sep 17 00:00:00 2001 From: Ollie Copping Date: Fri, 24 Jul 2026 12:16:15 +0000 Subject: [PATCH 1/2] Move some logic in to new _validate_widget function --- src/techui_builder/validator.py | 39 +++++++++++++++++---------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/src/techui_builder/validator.py b/src/techui_builder/validator.py index 280883cd..e8d59582 100644 --- a/src/techui_builder/validator.py +++ b/src/techui_builder/validator.py @@ -56,29 +56,30 @@ def validate_bob( ] for pwidget in pwidgets: - pwidget_name = pwidget.get_element_value("name") for file_widget in file_widgets: - if pwidget_name == file_widget.name: - assert ( - int(pwidget.get_element_value("width")) == file_widget.width - ), ( - f"{int(pwidget.get_element_value('width'))} \ -!= {file_widget.width}" - ) - assert ( - int(pwidget.get_element_value("height")) == file_widget.height - ), ( - f"{int(pwidget.get_element_value('height'))} \ -!= {file_widget.height}" - ) - assert pwidget.get_element_value("file") == file_widget.file, ( - f"{pwidget.get_element_value('file')} != {file_widget.file}" - ) - - self._validate_macros(pwidget, file_widget) + self._validate_widget(pwidget, file_widget) LOGGER.info(f"{screen_name}.bob has been validated successfully") + def _validate_widget( + self, pwidget: EmbeddedDisplay | ActionButton, file_widget: ObjectifiedElement + ): + pwidget_name = pwidget.get_element_value("name") + if pwidget_name == file_widget.name: + assert int(pwidget.get_element_value("width")) == file_widget.width, ( + f"{int(pwidget.get_element_value('width'))} \ + != {file_widget.width}" + ) + assert int(pwidget.get_element_value("height")) == file_widget.height, ( + f"{int(pwidget.get_element_value('height'))} \ + != {file_widget.height}" + ) + assert pwidget.get_element_value("file") == file_widget.file, ( + f"{pwidget.get_element_value('file')} != {file_widget.file}" + ) + + self._validate_macros(pwidget, file_widget) + def _validate_macros( self, pwidget: EmbeddedDisplay | ActionButton, file_widget: ObjectifiedElement ): From 2dc16f8ee22df408b29ada734f0658de0bdeb57b Mon Sep 17 00:00:00 2001 From: Ollie Copping Date: Mon, 27 Jul 2026 09:11:29 +0100 Subject: [PATCH 2/2] WIP --- src/techui_builder/validator.py | 37 ++++++++++++++++++++++++++----- tests/test_files/motor_edited.bob | 2 +- tests/test_files/motor_embed.bob | 2 +- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/techui_builder/validator.py b/src/techui_builder/validator.py index e8d59582..b1efcf53 100644 --- a/src/techui_builder/validator.py +++ b/src/techui_builder/validator.py @@ -12,6 +12,18 @@ LOGGER = logging.getLogger(__name__) +class WidgetPropertyError(AssertionError): + """A widget property is not consistent.""" + + ... + + +class WidgetMissingError(AssertionError): + """A widget is missing from the screen being validated""" + + ... + + @dataclass class Validator: bobs: list[Path] @@ -57,7 +69,16 @@ def validate_bob( for pwidget in pwidgets: for file_widget in file_widgets: - self._validate_widget(pwidget, file_widget) + try: + self._validate_widget(pwidget, file_widget) + except WidgetPropertyError as e: + LOGGER.error( + f"{screen_name} screen widget {file_widget.name} is altered" + " or missing.\n" + f"Error: {e}" + ) + except Exception as e: + print(f"BLAAAAGH {e}") LOGGER.info(f"{screen_name}.bob has been validated successfully") @@ -67,15 +88,21 @@ def _validate_widget( pwidget_name = pwidget.get_element_value("name") if pwidget_name == file_widget.name: assert int(pwidget.get_element_value("width")) == file_widget.width, ( - f"{int(pwidget.get_element_value('width'))} \ - != {file_widget.width}" + WidgetPropertyError( + f"{int(pwidget.get_element_value('width'))} != {file_widget.width}" + ) ) + assert int(pwidget.get_element_value("height")) == file_widget.height, ( - f"{int(pwidget.get_element_value('height'))} \ + WidgetPropertyError( + f"{int(pwidget.get_element_value('height'))} \ != {file_widget.height}" + ) ) assert pwidget.get_element_value("file") == file_widget.file, ( - f"{pwidget.get_element_value('file')} != {file_widget.file}" + WidgetPropertyError( + f"{pwidget.get_element_value('file')} != {file_widget.file}" + ) ) self._validate_macros(pwidget, file_widget) diff --git a/tests/test_files/motor_edited.bob b/tests/test_files/motor_edited.bob index e5c37b75..55706bc1 100644 --- a/tests/test_files/motor_edited.bob +++ b/tests/test_files/motor_edited.bob @@ -6,7 +6,7 @@ motor 0 0 - 255 + 256 470 X diff --git a/tests/test_files/motor_embed.bob b/tests/test_files/motor_embed.bob index 01db8f05..07420124 100644 --- a/tests/test_files/motor_embed.bob +++ b/tests/test_files/motor_embed.bob @@ -27,7 +27,7 @@ $(P)$(M).TWR - 10 - 30 + 31 20