Skip to content

Commit c6a2445

Browse files
committed
Restructuring and adding tests
1 parent 31a3391 commit c6a2445

File tree

2 files changed

+69
-13
lines changed

2 files changed

+69
-13
lines changed

shiny/_main.py

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -333,9 +333,6 @@ def run_app(
333333

334334
log_config: dict[str, Any] = copy.deepcopy(uvicorn.config.LOGGING_CONFIG)
335335

336-
# Workaround for nginx/uvicorn issue within Workbench
337-
# https://github.com/rstudio/rstudio-pro/issues/7368#issuecomment-2918016088
338-
339336
if reload_dirs is None:
340337
reload_dirs = []
341338
if app_dir is not None:
@@ -404,16 +401,7 @@ def run_app(
404401

405402
maybe_setup_rsw_proxying(log_config)
406403

407-
if is_workbench() and kwargs.get("ws_per_message_deflate"):
408-
# Workaround for nginx/uvicorn issue within Workbench
409-
# https://github.com/rstudio/rstudio-pro/issues/7368#issuecomment-2918016088
410-
warnings.warn(
411-
"Overwriting kwarg 'ws_per_message_deflate'=True to False to avoid breaking issue in Workbench",
412-
stacklevel=2,
413-
)
414-
kwargs["ws_per_message_deflate"] = False
415-
elif is_workbench():
416-
kwargs["ws_per_message_deflate"] = False
404+
_set_workbench_kwargs(kwargs)
417405

418406
uvicorn.run( # pyright: ignore[reportUnknownMemberType]
419407
app,
@@ -729,6 +717,21 @@ class ReloadArgs(TypedDict):
729717
reload_dirs: NotRequired[list[str]]
730718

731719

720+
def _set_workbench_kwargs(kwargs: dict[str, object]) -> None:
721+
print(kwargs)
722+
if is_workbench():
723+
print("hit")
724+
if kwargs.get("ws_per_message_deflate"):
725+
# Workaround for nginx/uvicorn issue within Workbench
726+
# https://github.com/rstudio/rstudio-pro/issues/7368#issuecomment-2918016088
727+
warnings.warn(
728+
"Overwriting kwarg `ws_per_message_deflate=True` to `False` to avoid breaking issue in Workbench",
729+
stacklevel=2,
730+
)
731+
kwargs["ws_per_message_deflate"] = False
732+
print(kwargs)
733+
734+
732735
# Check that the version of rsconnect supports Shiny Express; can be removed in the
733736
# future once this version of rsconnect is widely used. The dependency on "packaging"
734737
# can also be removed then, because it is only used here. (Added 2024-03)

tests/pytest/test_main.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import os
2+
import warnings
3+
4+
import pytest
5+
6+
from shiny._main import _set_workbench_kwargs
7+
8+
9+
def test_workbench_kwargs_if_url_set():
10+
"""
11+
Test that the `ws_per_message_deflate` kwarg is set to False when
12+
RS_SERVER_URL and RS_SESSION_URL are set in the environment.
13+
This is to avoid breaking issues in Workbench.
14+
If the kwargs are set to True, a warning is raised and the value is set to False.
15+
"""
16+
# Workbench URL is set, kwargs are not
17+
os.environ["RS_SERVER_URL"] = "any_string"
18+
os.environ["RS_SESSION_URL"] = "any_string"
19+
20+
kwargs = {}
21+
_set_workbench_kwargs(kwargs)
22+
assert kwargs.get("ws_per_message_deflate") is False
23+
24+
# kwarg have been set to True
25+
kwargs = {
26+
"ws_per_message_deflate": True,
27+
}
28+
with pytest.warns(UserWarning):
29+
warnings.warn(
30+
"Overwriting kwarg `ws_per_message_deflate=True` to `False` to avoid breaking issue in Workbench",
31+
UserWarning,
32+
)
33+
_set_workbench_kwargs(kwargs)
34+
assert kwargs.get("ws_per_message_deflate") is False
35+
36+
# Teardown
37+
del os.environ["RS_SERVER_URL"]
38+
del os.environ["RS_SESSION_URL"]
39+
40+
41+
def test_workbench_kwargs_if_url_not_set():
42+
"""
43+
Test that the `ws_per_message_deflate` kwarg is not changed if the RS_SERVER_URL and RS_SESSION_URL environment variables are not set are set.
44+
"""
45+
kwargs = {
46+
"ws_per_message_deflate": True,
47+
}
48+
_set_workbench_kwargs(kwargs)
49+
assert kwargs.get("ws_per_message_deflate") is True
50+
51+
kwargs = {}
52+
_set_workbench_kwargs(kwargs)
53+
assert kwargs.get("ws_per_message_deflate") is None

0 commit comments

Comments
 (0)