diff --git a/src/py/reactpy/reactpy/core/layout.py b/src/py/reactpy/reactpy/core/layout.py index 8db467e30..f2274c6a8 100644 --- a/src/py/reactpy/reactpy/core/layout.py +++ b/src/py/reactpy/reactpy/core/layout.py @@ -47,7 +47,10 @@ ) from reactpy.core.component import Component from reactpy.core.hooks import _ContextProvider -from reactpy.core.state_recovery import StateRecoverySerializer +from reactpy.core.state_recovery import ( + StateRecoveryFailureError, + StateRecoverySerializer, +) from reactpy.core.types import ( ComponentType, EventHandlerDict, @@ -284,6 +287,8 @@ async def _render_component( # components are given a node in the tree some other way wrapper_model: VdomDict = {"tagName": "", "children": [raw_model]} await self._render_model(exit_stack, old_state, new_state, wrapper_model) + except StateRecoveryFailureError: + raise except Exception as error: logger.exception(f"Failed to render {component}") new_state.model.current = { diff --git a/src/py/reactpy/reactpy/core/serve.py b/src/py/reactpy/reactpy/core/serve.py index eef5c5c96..85799c762 100644 --- a/src/py/reactpy/reactpy/core/serve.py +++ b/src/py/reactpy/reactpy/core/serve.py @@ -188,7 +188,10 @@ async def _do_state_rebuild_for_reconnection(self, layout: Layout) -> str: serializer = self._state_recovery_manager.create_serializer( client_state_msg["salt"] ) - client_state = serializer.deserialize_client_state(state_vars) + try: + client_state = serializer.deserialize_client_state(state_vars) + except Exception as err: + raise StateRecoveryFailureError() from err layout.reconnecting.set_current(True) layout.client_state = client_state