Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 31 additions & 16 deletions examples/child-server/multi_server_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,16 @@


class FirstApp(TrameApp):
def __init__(self, server: trame_server.Server | str | None = None) -> None:
def __init__(
self,
server: trame_server.Server | str | None = None,
template_name: str = "main",
) -> None:
super().__init__(server)

self.state.test = "first"

self._build_ui()
self._build_ui(template_name)

@trigger("test")
def test_trigger(self) -> None:
Expand All @@ -24,21 +28,25 @@ def test_trigger(self) -> None:
def test_controller(self) -> None:
print(self.state.test)

def _build_ui(self) -> None:
with VAppLayout(self.server, full_height=True), v3.VContainer(), v3.VCard(
title="This is the first app"
):
def _build_ui(self, template_name) -> None:
with VAppLayout(
self.server, template_name=template_name, full_height=True
), v3.VContainer(), v3.VCard(title="This is the first app"):
v3.VBtn("Test Trigger", click="console.log(test); trame.trigger('test');")
v3.VBtn("Test Controller", click=self.ctrl.test_controller)


class SecondApp(TrameApp):
def __init__(self, server: trame_server.Server | str | None = None) -> None:
def __init__(
self,
server: trame_server.Server | str | None = None,
template_name: str = "main",
) -> None:
super().__init__(server)

self.state.test = "second"

self._build_ui()
self._build_ui(template_name)

@trigger("test")
def trigger_test(self) -> None:
Expand All @@ -48,10 +56,10 @@ def trigger_test(self) -> None:
def test_controller(self) -> None:
print(self.state.test)

def _build_ui(self) -> None:
with VAppLayout(self.server, full_height=True), v3.VContainer(), v3.VCard(
title="This is the second app"
):
def _build_ui(self, template_name) -> None:
with VAppLayout(
self.server, template_name=template_name, full_height=True
), v3.VContainer(), v3.VCard(title="This is the second app"):
v3.VBtn("Test Trigger", click="console.log(test); trame.trigger('test');")
v3.VBtn("Test Controller", click=self.ctrl.test_controller)

Expand All @@ -70,10 +78,17 @@ def test_trigger(self) -> None:

def _build_ui(self) -> None:
# Register routes
with RouterViewLayout(self.server, "/"):
FirstApp(self.server.create_child_server(prefix="first_route_"))
with RouterViewLayout(self.server, "/second"):
SecondApp(self.server.create_child_server(prefix="second_route_"))
first_layout = RouterViewLayout(self.server, "/")
second_layout = RouterViewLayout(self.server, "/second")

FirstApp(
self.server.create_child_server(prefix="first_route_"),
template_name=first_layout.template_name,
)
SecondApp(
self.server.create_child_server(prefix="second_route_"),
template_name=second_layout.template_name,
)

with SinglePageLayout(self.server, full_height=True) as layout:
with layout.toolbar:
Expand Down
6 changes: 6 additions & 0 deletions trame_server/state.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ def __init__(
self._state_listeners = share(
internal, "_state_listeners", StateChangeHandler(self._change_callbacks)
)
self._is_flushing = share(internal, "_is_flushing", {"value": False})
self._parent_state = internal
self._children_state = []
self._ready_flag = ready
Expand Down Expand Up @@ -277,6 +278,10 @@ def flush(self):
if not self.is_ready:
return None

if self._is_flushing["value"]:
return None

self._is_flushing["value"] = True
keys = set()
if len(self._pending_update):
_keys = set(self._pending_update.keys())
Expand Down Expand Up @@ -320,6 +325,7 @@ def flush(self):
# Check if state change from state listeners
_keys = set(self._pending_update.keys())

self._is_flushing["value"] = False
return keys

@property
Expand Down