From c312d431ea9664cd08a1b32978d894d0de1a835d Mon Sep 17 00:00:00 2001 From: Joe Date: Wed, 31 Jan 2024 14:41:25 -0600 Subject: [PATCH] fix: Better render error handling (#242) Fixes #227 Testing with the examples from the issue logged errors, for example: ``` import deephaven.ui as ui @ui.component def hi(): something, set_something = ui.use_state(0) return "Hello, " + something h = hi() ``` ``` Error rendering __main__.hi Traceback (most recent call last): File "/Users/josephnumainville/Documents/deephaven-core/.venv/lib/python3.8/site-packages/deephaven/ui/object_types/ElementMessageStream.py", line 153, in _render node = self._renderer.render(self._element) File "/Users/josephnumainville/Documents/deephaven-core/.venv/lib/python3.8/site-packages/deephaven/ui/renderer/Renderer.py", line 111, in render return _render_element(element, self._context) File "/Users/josephnumainville/Documents/deephaven-core/.venv/lib/python3.8/site-packages/deephaven/ui/renderer/Renderer.py", line 84, in _render_element props = element.render(context) File "/Users/josephnumainville/Documents/deephaven-core/.venv/lib/python3.8/site-packages/deephaven/ui/elements/FunctionElement.py", line 37, in render children = self._render() File "/Users/josephnumainville/Documents/deephaven-core/.venv/lib/python3.8/site-packages/deephaven/ui/components/make_component.py", line 23, in return FunctionElement(component_type, lambda: func(*args, **kwargs)) File "", line 6, in hi TypeError: can only concatenate str (not "int") to str ``` another: ``` from deephaven import ui @ui.component def foo(): return ui.bad_component() f = foo() ``` ``` Error rendering __main__.foo Traceback (most recent call last): File "/Users/josephnumainville/Documents/deephaven-core/.venv/lib/python3.8/site-packages/deephaven/ui/object_types/ElementMessageStream.py", line 153, in _render node = self._renderer.render(self._element) File "/Users/josephnumainville/Documents/deephaven-core/.venv/lib/python3.8/site-packages/deephaven/ui/renderer/Renderer.py", line 111, in render return _render_element(element, self._context) File "/Users/josephnumainville/Documents/deephaven-core/.venv/lib/python3.8/site-packages/deephaven/ui/renderer/Renderer.py", line 84, in _render_element props = element.render(context) File "/Users/josephnumainville/Documents/deephaven-core/.venv/lib/python3.8/site-packages/deephaven/ui/elements/FunctionElement.py", line 37, in render children = self._render() File "/Users/josephnumainville/Documents/deephaven-core/.venv/lib/python3.8/site-packages/deephaven/ui/components/make_component.py", line 23, in return FunctionElement(component_type, lambda: func(*args, **kwargs)) File "", line 5, in foo AttributeError: module 'deephaven.ui' has no attribute 'bad_component' ``` --- .../src/deephaven/ui/object_types/ElementMessageStream.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/ui/src/deephaven/ui/object_types/ElementMessageStream.py b/plugins/ui/src/deephaven/ui/object_types/ElementMessageStream.py index 4c07c8aca..0c2f87365 100644 --- a/plugins/ui/src/deephaven/ui/object_types/ElementMessageStream.py +++ b/plugins/ui/src/deephaven/ui/object_types/ElementMessageStream.py @@ -149,7 +149,13 @@ def _render(self) -> None: state_update() self._is_dirty = False - node = self._renderer.render(self._element) + + try: + node = self._renderer.render(self._element) + except Exception as e: + logger.exception("Error rendering %s", self._element.name) + raise e + self._send_document_update(node) def _process_callable_queue(self) -> None: