Skip to content

Commit 8787772

Browse files
authored
Send busy/idle at the right times (#1380)
1 parent 2882ada commit 8787772

File tree

6 files changed

+41
-5
lines changed

6 files changed

+41
-5
lines changed

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ test =
9393
folium
9494
palmerpenguins
9595
faicons
96+
ridgeplot
9697
dev =
9798
black>=24.0
9899
flake8>=6.0.0

shiny/express/_stub_session.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,12 @@ async def _send_message(self, message: dict[str, object]) -> None:
119119
def _send_message_sync(self, message: dict[str, object]) -> None:
120120
return
121121

122+
def _increment_busy_count(self) -> None:
123+
return
124+
125+
def _decrement_busy_count(self) -> None:
126+
return
127+
122128
def on_flush(
123129
self,
124130
fn: Callable[[], None] | Callable[[], Awaitable[None]],

shiny/reactive/_reactives.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ def on_invalidate_cb() -> None:
547547
def _continue() -> None:
548548
ctx.add_pending_flush(self._priority)
549549
if self._session:
550-
self._session._send_message_sync({"busy": "busy"})
550+
self._session._increment_busy_count()
551551

552552
if self._suspended:
553553
self._on_resume = _continue
@@ -558,7 +558,7 @@ async def on_flush_cb() -> None:
558558
if not self._destroyed:
559559
await self._run()
560560
if self._session:
561-
self._session._send_message_sync({"busy": "idle"})
561+
self._session._decrement_busy_count()
562562

563563
ctx.on_invalidate(on_invalidate_cb)
564564
ctx.on_flush(on_flush_cb)

shiny/session/_session.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,12 @@ def set_message_handler(
471471
namespaced when used with a session proxy.
472472
"""
473473

474+
@abstractmethod
475+
def _increment_busy_count(self) -> None: ...
476+
477+
@abstractmethod
478+
def _decrement_busy_count(self) -> None: ...
479+
474480

475481
# ======================================================================================
476482
# AppSession
@@ -493,6 +499,7 @@ def __init__(
493499
self.id: str = id
494500
self._conn: Connection = conn
495501
self._debug: bool = debug
502+
self._busy_count: int = 0
496503
self._message_handlers: dict[
497504
str,
498505
tuple[Callable[..., Awaitable[Jsonifiable]], Session],
@@ -785,11 +792,11 @@ async def uploadEnd(job_id: str, input_id: str) -> None:
785792
async def _handle_request(
786793
self, request: Request, action: str, subpath: Optional[str]
787794
) -> ASGIApp:
788-
self._send_message_sync({"busy": "busy"})
795+
self._increment_busy_count()
789796
try:
790797
return await self._handle_request_impl(request, action, subpath)
791798
finally:
792-
self._send_message_sync({"busy": "idle"})
799+
self._decrement_busy_count()
793800

794801
async def _handle_request_impl(
795802
self, request: Request, action: str, subpath: Optional[str]
@@ -1011,6 +1018,16 @@ async def _flush(self) -> None:
10111018
with session_context(self):
10121019
await self._flushed_callbacks.invoke()
10131020

1021+
def _increment_busy_count(self) -> None:
1022+
self._busy_count += 1
1023+
if self._busy_count == 1:
1024+
self._send_message_sync({"busy": "busy"})
1025+
1026+
def _decrement_busy_count(self) -> None:
1027+
self._busy_count -= 1
1028+
if self._busy_count == 0:
1029+
self._send_message_sync({"busy": "idle"})
1030+
10141031
# ==========================================================================
10151032
# On session ended
10161033
# ==========================================================================
@@ -1191,6 +1208,12 @@ def _send_progress(self, type: str, message: object) -> None:
11911208
async def send_custom_message(self, type: str, message: dict[str, object]) -> None:
11921209
await self._parent.send_custom_message(type, message)
11931210

1211+
def _increment_busy_count(self) -> None:
1212+
self._parent._increment_busy_count()
1213+
1214+
def _decrement_busy_count(self) -> None:
1215+
self._parent._decrement_busy_count()
1216+
11941217
def set_message_handler(
11951218
self,
11961219
name: str,

tests/playwright/examples/example_apps.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def get_apps(path: str) -> typing.List[str]:
3333
return app_paths
3434

3535

36-
app_idle_wait = {"duration": 300, "timeout": 5 * 1000}
36+
app_idle_wait = {"duration": 300, "timeout": 30 * 1000}
3737
app_hard_wait: typing.Dict[str, int] = {
3838
"examples/brownian": 250,
3939
"examples/ui-func": 250,

tests/pytest/test_poll.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ def on_ended(self, fn: Callable[[], None]) -> Callable[[], None]:
3939
def _send_message_sync(self, message: Dict[str, object]) -> None:
4040
pass
4141

42+
def _increment_busy_count(self) -> None:
43+
pass
44+
45+
def _decrement_busy_count(self) -> None:
46+
pass
47+
4248
async def __aenter__(self):
4349
self._session_context.__enter__()
4450

0 commit comments

Comments
 (0)