From 18d74ae051dbfe7d65cb7028bcce57eb24ba55c5 Mon Sep 17 00:00:00 2001 From: Joe Cheng Date: Wed, 28 May 2025 19:03:04 -0700 Subject: [PATCH 01/17] Work around an issue caused by permessage-deflate --- shiny/_main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/shiny/_main.py b/shiny/_main.py index 30db3232c..3af10c946 100644 --- a/shiny/_main.py +++ b/shiny/_main.py @@ -412,6 +412,7 @@ def run_app( # Don't allow shiny to use uvloop! # https://github.com/posit-dev/py-shiny/issues/1373 loop="asyncio", + ws_per_message_deflate=False, # Workaround for workbench issue 7368 **reload_args, # pyright: ignore[reportArgumentType] **kwargs, ) From efcd683b736b590e281ef7c9d88bd7fe42d24f92 Mon Sep 17 00:00:00 2001 From: Liz Nelson Date: Tue, 3 Jun 2025 17:12:37 -0400 Subject: [PATCH 02/17] Untested draft based on discussion --- shiny/_main.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/shiny/_main.py b/shiny/_main.py index 3af10c946..1bcae8ceb 100644 --- a/shiny/_main.py +++ b/shiny/_main.py @@ -331,6 +331,13 @@ def run_app( log_config: dict[str, Any] = copy.deepcopy(uvicorn.config.LOGGING_CONFIG) + # Workaround for workbench issue 7368 + deflate_args: DeflateArgs = {} + if (RS_SERVER_URL := os.getenv("RS_SERVER_URL")): + deflate_args = { + "ws_per_message_deflate": False, + } + if reload_dirs is None: reload_dirs = [] if app_dir is not None: @@ -412,7 +419,7 @@ def run_app( # Don't allow shiny to use uvloop! # https://github.com/posit-dev/py-shiny/issues/1373 loop="asyncio", - ws_per_message_deflate=False, # Workaround for workbench issue 7368 + **deflate_args, # pyright: ignore[reportArgumentType] **reload_args, # pyright: ignore[reportArgumentType] **kwargs, ) @@ -713,6 +720,8 @@ class ReloadArgs(TypedDict): reload_excludes: NotRequired[list[str]] reload_dirs: NotRequired[list[str]] +class DeflateArgs(TypedDict): + ws_per_message_deflate: NotRequired[bool] # Check that the version of rsconnect supports Shiny Express; can be removed in the # future once this version of rsconnect is widely used. The dependency on "packaging" From 524f0efee0bfc5839862584106389e4385f1d74b Mon Sep 17 00:00:00 2001 From: Liz Nelson Date: Wed, 4 Jun 2025 09:20:44 -0400 Subject: [PATCH 03/17] Follow existing conventions --- shiny/_main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shiny/_main.py b/shiny/_main.py index 1bcae8ceb..99f7473ed 100644 --- a/shiny/_main.py +++ b/shiny/_main.py @@ -333,7 +333,7 @@ def run_app( # Workaround for workbench issue 7368 deflate_args: DeflateArgs = {} - if (RS_SERVER_URL := os.getenv("RS_SERVER_URL")): + if os.getenv("RS_SERVER_URL"): deflate_args = { "ws_per_message_deflate": False, } From 7f3197553c37efad86b2a0445344c644c4b99bf3 Mon Sep 17 00:00:00 2001 From: Liz Nelson Date: Wed, 4 Jun 2025 09:53:21 -0400 Subject: [PATCH 04/17] Reformatted --- shiny/_main.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/shiny/_main.py b/shiny/_main.py index 99f7473ed..daf9b3a40 100644 --- a/shiny/_main.py +++ b/shiny/_main.py @@ -720,9 +720,11 @@ class ReloadArgs(TypedDict): reload_excludes: NotRequired[list[str]] reload_dirs: NotRequired[list[str]] + class DeflateArgs(TypedDict): ws_per_message_deflate: NotRequired[bool] + # Check that the version of rsconnect supports Shiny Express; can be removed in the # future once this version of rsconnect is widely used. The dependency on "packaging" # can also be removed then, because it is only used here. (Added 2024-03) From 41f1a65ce582d85b875f86a05a45693e2e7d5fd1 Mon Sep 17 00:00:00 2001 From: E Nelson Date: Wed, 4 Jun 2025 11:40:17 -0400 Subject: [PATCH 05/17] Update shiny/_main.py Co-authored-by: Barret Schloerke --- shiny/_main.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shiny/_main.py b/shiny/_main.py index daf9b3a40..e4d15b44b 100644 --- a/shiny/_main.py +++ b/shiny/_main.py @@ -331,7 +331,8 @@ def run_app( log_config: dict[str, Any] = copy.deepcopy(uvicorn.config.LOGGING_CONFIG) - # Workaround for workbench issue 7368 + # Workaround for nginx/uvicorn issue within Workbench + # https://github.com/rstudio/rstudio-pro/issues/7368#issuecomment-2918016088 deflate_args: DeflateArgs = {} if os.getenv("RS_SERVER_URL"): deflate_args = { From 48ae2fd59b69295067cb0daa612bb333684a641c Mon Sep 17 00:00:00 2001 From: E Nelson Date: Wed, 4 Jun 2025 11:41:06 -0400 Subject: [PATCH 06/17] Update shiny/_main.py Co-authored-by: Barret Schloerke --- shiny/_main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shiny/_main.py b/shiny/_main.py index e4d15b44b..990aaf715 100644 --- a/shiny/_main.py +++ b/shiny/_main.py @@ -334,7 +334,7 @@ def run_app( # Workaround for nginx/uvicorn issue within Workbench # https://github.com/rstudio/rstudio-pro/issues/7368#issuecomment-2918016088 deflate_args: DeflateArgs = {} - if os.getenv("RS_SERVER_URL"): + if is_workbench(): deflate_args = { "ws_per_message_deflate": False, } From 9c8b796ca35eea4aa015da740aae046bfa928bd2 Mon Sep 17 00:00:00 2001 From: Liz Nelson Date: Wed, 4 Jun 2025 11:44:51 -0400 Subject: [PATCH 07/17] Adding import --- shiny/_main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/shiny/_main.py b/shiny/_main.py index 990aaf715..e5a4afab7 100644 --- a/shiny/_main.py +++ b/shiny/_main.py @@ -19,6 +19,7 @@ import shiny from . import __version__, _autoreload, _hostenv, _static, _utils +from ._hostenv import is_workbench from ._docstring import no_example from ._typing_extensions import NotRequired, TypedDict from .bookmark._bookmark_state import shiny_bookmarks_folder_name From 72880daa47227484a0a639660951e78da8de106f Mon Sep 17 00:00:00 2001 From: Liz Nelson Date: Wed, 4 Jun 2025 13:04:58 -0400 Subject: [PATCH 08/17] Updated to kwargs strategy --- CHANGELOG.md | 2 ++ shiny/_main.py | 23 +++++++++++++---------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 30f93aad9..67fd904e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Bug fixes +* Fixed issue where apps run in Workbench were unexpectedly crashing. Apps in Workbench will now have `ws_per_message_deflate=False` enforced. (#2005) + * Fixed an issue where the `
` areas of `ui.page_sidebar()` and `ui.page_navbar()` (with a `sidebar`) were made to be a fillable containers even when `fillable=False`. (#1816) * Fixed an issue where the `.update_user_input()` method on `ui.Chat()` isn't working in shinylive. (#1891) diff --git a/shiny/_main.py b/shiny/_main.py index e5a4afab7..a2d3b77f2 100644 --- a/shiny/_main.py +++ b/shiny/_main.py @@ -25,6 +25,8 @@ from .bookmark._bookmark_state import shiny_bookmarks_folder_name from .express import is_express_app from .express._utils import escape_to_var_name +from ._hostenv import is_workbench +import warnings @click.group("main") @@ -334,11 +336,6 @@ def run_app( # Workaround for nginx/uvicorn issue within Workbench # https://github.com/rstudio/rstudio-pro/issues/7368#issuecomment-2918016088 - deflate_args: DeflateArgs = {} - if is_workbench(): - deflate_args = { - "ws_per_message_deflate": False, - } if reload_dirs is None: reload_dirs = [] @@ -408,6 +405,17 @@ def run_app( maybe_setup_rsw_proxying(log_config) + if is_workbench() and kwargs.get("ws_per_message_deflate"): + # Workaround for nginx/uvicorn issue within Workbench + # https://github.com/rstudio/rstudio-pro/issues/7368#issuecomment-2918016088 + warnings.warn( + "Overwriting kwarg 'ws_per_message_deflate'=True to False to avoid breaking issue in Workbench", + stacklevel=2, + ) + kwargs["ws_per_message_deflate"] = False + elif is_workbench(): + kwargs["ws_per_message_deflate"] = False + uvicorn.run( # pyright: ignore[reportUnknownMemberType] app, host=host, @@ -421,7 +429,6 @@ def run_app( # Don't allow shiny to use uvloop! # https://github.com/posit-dev/py-shiny/issues/1373 loop="asyncio", - **deflate_args, # pyright: ignore[reportArgumentType] **reload_args, # pyright: ignore[reportArgumentType] **kwargs, ) @@ -723,10 +730,6 @@ class ReloadArgs(TypedDict): reload_dirs: NotRequired[list[str]] -class DeflateArgs(TypedDict): - ws_per_message_deflate: NotRequired[bool] - - # Check that the version of rsconnect supports Shiny Express; can be removed in the # future once this version of rsconnect is widely used. The dependency on "packaging" # can also be removed then, because it is only used here. (Added 2024-03) From 31a3391e6b315c462a46da7b98d19b10b4ff78b0 Mon Sep 17 00:00:00 2001 From: Liz Nelson Date: Wed, 4 Jun 2025 13:11:48 -0400 Subject: [PATCH 09/17] Reorganized imports --- shiny/_main.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/shiny/_main.py b/shiny/_main.py index a2d3b77f2..2614f17ec 100644 --- a/shiny/_main.py +++ b/shiny/_main.py @@ -9,6 +9,7 @@ import re import sys import types +import warnings from pathlib import Path from typing import Any, Optional @@ -19,14 +20,12 @@ import shiny from . import __version__, _autoreload, _hostenv, _static, _utils -from ._hostenv import is_workbench from ._docstring import no_example +from ._hostenv import is_workbench from ._typing_extensions import NotRequired, TypedDict from .bookmark._bookmark_state import shiny_bookmarks_folder_name from .express import is_express_app from .express._utils import escape_to_var_name -from ._hostenv import is_workbench -import warnings @click.group("main") From 7a3580a4d41382a0baed26f6d8b496b6ce2a91ca Mon Sep 17 00:00:00 2001 From: E Nelson Date: Wed, 4 Jun 2025 16:44:16 -0400 Subject: [PATCH 10/17] Update CHANGELOG.md Co-authored-by: Barret Schloerke --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 67fd904e9..a5a9cefd6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,7 +50,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Bug fixes -* Fixed issue where apps run in Workbench were unexpectedly crashing. Apps in Workbench will now have `ws_per_message_deflate=False` enforced. (#2005) +* Fixed issue where apps run in Workbench were unexpectedly crashing. Apps running in Workbench will now have `ws_per_message_deflate=False` enforced. (#2005) * Fixed an issue where the `
` areas of `ui.page_sidebar()` and `ui.page_navbar()` (with a `sidebar`) were made to be a fillable containers even when `fillable=False`. (#1816) From c6a2445c439d15a0143324bb407588aa8920103a Mon Sep 17 00:00:00 2001 From: Liz Nelson Date: Thu, 5 Jun 2025 10:38:05 -0400 Subject: [PATCH 11/17] Restructuring and adding tests --- shiny/_main.py | 29 +++++++++++---------- tests/pytest/test_main.py | 53 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 13 deletions(-) create mode 100644 tests/pytest/test_main.py diff --git a/shiny/_main.py b/shiny/_main.py index 2614f17ec..bc91ba44d 100644 --- a/shiny/_main.py +++ b/shiny/_main.py @@ -333,9 +333,6 @@ def run_app( log_config: dict[str, Any] = copy.deepcopy(uvicorn.config.LOGGING_CONFIG) - # Workaround for nginx/uvicorn issue within Workbench - # https://github.com/rstudio/rstudio-pro/issues/7368#issuecomment-2918016088 - if reload_dirs is None: reload_dirs = [] if app_dir is not None: @@ -404,16 +401,7 @@ def run_app( maybe_setup_rsw_proxying(log_config) - if is_workbench() and kwargs.get("ws_per_message_deflate"): - # Workaround for nginx/uvicorn issue within Workbench - # https://github.com/rstudio/rstudio-pro/issues/7368#issuecomment-2918016088 - warnings.warn( - "Overwriting kwarg 'ws_per_message_deflate'=True to False to avoid breaking issue in Workbench", - stacklevel=2, - ) - kwargs["ws_per_message_deflate"] = False - elif is_workbench(): - kwargs["ws_per_message_deflate"] = False + _set_workbench_kwargs(kwargs) uvicorn.run( # pyright: ignore[reportUnknownMemberType] app, @@ -729,6 +717,21 @@ class ReloadArgs(TypedDict): reload_dirs: NotRequired[list[str]] +def _set_workbench_kwargs(kwargs: dict[str, object]) -> None: + print(kwargs) + if is_workbench(): + print("hit") + if kwargs.get("ws_per_message_deflate"): + # Workaround for nginx/uvicorn issue within Workbench + # https://github.com/rstudio/rstudio-pro/issues/7368#issuecomment-2918016088 + warnings.warn( + "Overwriting kwarg `ws_per_message_deflate=True` to `False` to avoid breaking issue in Workbench", + stacklevel=2, + ) + kwargs["ws_per_message_deflate"] = False + print(kwargs) + + # Check that the version of rsconnect supports Shiny Express; can be removed in the # future once this version of rsconnect is widely used. The dependency on "packaging" # can also be removed then, because it is only used here. (Added 2024-03) diff --git a/tests/pytest/test_main.py b/tests/pytest/test_main.py new file mode 100644 index 000000000..47413d35d --- /dev/null +++ b/tests/pytest/test_main.py @@ -0,0 +1,53 @@ +import os +import warnings + +import pytest + +from shiny._main import _set_workbench_kwargs + + +def test_workbench_kwargs_if_url_set(): + """ + Test that the `ws_per_message_deflate` kwarg is set to False when + RS_SERVER_URL and RS_SESSION_URL are set in the environment. + This is to avoid breaking issues in Workbench. + If the kwargs are set to True, a warning is raised and the value is set to False. + """ + # Workbench URL is set, kwargs are not + os.environ["RS_SERVER_URL"] = "any_string" + os.environ["RS_SESSION_URL"] = "any_string" + + kwargs = {} + _set_workbench_kwargs(kwargs) + assert kwargs.get("ws_per_message_deflate") is False + + # kwarg have been set to True + kwargs = { + "ws_per_message_deflate": True, + } + with pytest.warns(UserWarning): + warnings.warn( + "Overwriting kwarg `ws_per_message_deflate=True` to `False` to avoid breaking issue in Workbench", + UserWarning, + ) + _set_workbench_kwargs(kwargs) + assert kwargs.get("ws_per_message_deflate") is False + + # Teardown + del os.environ["RS_SERVER_URL"] + del os.environ["RS_SESSION_URL"] + + +def test_workbench_kwargs_if_url_not_set(): + """ + 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. + """ + kwargs = { + "ws_per_message_deflate": True, + } + _set_workbench_kwargs(kwargs) + assert kwargs.get("ws_per_message_deflate") is True + + kwargs = {} + _set_workbench_kwargs(kwargs) + assert kwargs.get("ws_per_message_deflate") is None From 1f05b8ed300b6e3889276f32c0ac3465f7f34259 Mon Sep 17 00:00:00 2001 From: Liz Nelson Date: Thu, 5 Jun 2025 10:41:17 -0400 Subject: [PATCH 12/17] Removing prints --- shiny/_main.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/shiny/_main.py b/shiny/_main.py index bc91ba44d..a4d09bafe 100644 --- a/shiny/_main.py +++ b/shiny/_main.py @@ -718,9 +718,7 @@ class ReloadArgs(TypedDict): def _set_workbench_kwargs(kwargs: dict[str, object]) -> None: - print(kwargs) if is_workbench(): - print("hit") if kwargs.get("ws_per_message_deflate"): # Workaround for nginx/uvicorn issue within Workbench # https://github.com/rstudio/rstudio-pro/issues/7368#issuecomment-2918016088 @@ -729,7 +727,6 @@ def _set_workbench_kwargs(kwargs: dict[str, object]) -> None: stacklevel=2, ) kwargs["ws_per_message_deflate"] = False - print(kwargs) # Check that the version of rsconnect supports Shiny Express; can be removed in the From 4513aafd2e4581fbe55b179e1a342fc7e138bec8 Mon Sep 17 00:00:00 2001 From: Liz Nelson Date: Thu, 5 Jun 2025 10:42:23 -0400 Subject: [PATCH 13/17] Correcting docstring --- tests/pytest/test_main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/pytest/test_main.py b/tests/pytest/test_main.py index 47413d35d..bff5a9c00 100644 --- a/tests/pytest/test_main.py +++ b/tests/pytest/test_main.py @@ -40,7 +40,7 @@ def test_workbench_kwargs_if_url_set(): def test_workbench_kwargs_if_url_not_set(): """ - 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. + 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. """ kwargs = { "ws_per_message_deflate": True, From 0be3af76666afe7346afd1bc8830f5c0d6f411b7 Mon Sep 17 00:00:00 2001 From: Liz Nelson Date: Thu, 5 Jun 2025 11:15:33 -0400 Subject: [PATCH 14/17] Added stack level to warning for test --- tests/pytest/test_main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/pytest/test_main.py b/tests/pytest/test_main.py index bff5a9c00..7b5612d0e 100644 --- a/tests/pytest/test_main.py +++ b/tests/pytest/test_main.py @@ -29,6 +29,7 @@ def test_workbench_kwargs_if_url_set(): warnings.warn( "Overwriting kwarg `ws_per_message_deflate=True` to `False` to avoid breaking issue in Workbench", UserWarning, + stacklevel=2, ) _set_workbench_kwargs(kwargs) assert kwargs.get("ws_per_message_deflate") is False From a14fa46ad45fca9f73a487ca47d2bc0bca702e1e Mon Sep 17 00:00:00 2001 From: Liz Nelson Date: Thu, 5 Jun 2025 11:40:50 -0400 Subject: [PATCH 15/17] correcting typing --- shiny/_main.py | 2 +- tests/pytest/test_main.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/shiny/_main.py b/shiny/_main.py index a4d09bafe..65b083139 100644 --- a/shiny/_main.py +++ b/shiny/_main.py @@ -717,7 +717,7 @@ class ReloadArgs(TypedDict): reload_dirs: NotRequired[list[str]] -def _set_workbench_kwargs(kwargs: dict[str, object]) -> None: +def _set_workbench_kwargs(kwargs: dict[str, Any]) -> None: if is_workbench(): if kwargs.get("ws_per_message_deflate"): # Workaround for nginx/uvicorn issue within Workbench diff --git a/tests/pytest/test_main.py b/tests/pytest/test_main.py index 7b5612d0e..e2c01f813 100644 --- a/tests/pytest/test_main.py +++ b/tests/pytest/test_main.py @@ -1,6 +1,6 @@ import os import warnings - +from typing import Dict, Any import pytest from shiny._main import _set_workbench_kwargs @@ -17,7 +17,7 @@ def test_workbench_kwargs_if_url_set(): os.environ["RS_SERVER_URL"] = "any_string" os.environ["RS_SESSION_URL"] = "any_string" - kwargs = {} + kwargs: Dict[str, Any] = {} _set_workbench_kwargs(kwargs) assert kwargs.get("ws_per_message_deflate") is False @@ -43,12 +43,12 @@ def test_workbench_kwargs_if_url_not_set(): """ 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. """ - kwargs = { + kwargs: Dict[str, Any] = { "ws_per_message_deflate": True, } _set_workbench_kwargs(kwargs) assert kwargs.get("ws_per_message_deflate") is True - kwargs = {} + kwargs: Dict[str, Any] = {} _set_workbench_kwargs(kwargs) assert kwargs.get("ws_per_message_deflate") is None From 35f5365ff4382e8ee69b00faaaa79b5c47dc5a2a Mon Sep 17 00:00:00 2001 From: Liz Nelson Date: Thu, 5 Jun 2025 11:51:40 -0400 Subject: [PATCH 16/17] Fixing isort --- tests/pytest/test_main.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/pytest/test_main.py b/tests/pytest/test_main.py index e2c01f813..5ec00fa8e 100644 --- a/tests/pytest/test_main.py +++ b/tests/pytest/test_main.py @@ -1,6 +1,7 @@ import os import warnings -from typing import Dict, Any +from typing import Any, Dict + import pytest from shiny._main import _set_workbench_kwargs From 7accc74c882fb7e138270b3a12d5c32f1fae466c Mon Sep 17 00:00:00 2001 From: Liz Nelson Date: Thu, 5 Jun 2025 12:55:21 -0400 Subject: [PATCH 17/17] Updating monkeypatch --- tests/pytest/test_main.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/tests/pytest/test_main.py b/tests/pytest/test_main.py index 5ec00fa8e..12b2b5eac 100644 --- a/tests/pytest/test_main.py +++ b/tests/pytest/test_main.py @@ -1,4 +1,3 @@ -import os import warnings from typing import Any, Dict @@ -7,7 +6,7 @@ from shiny._main import _set_workbench_kwargs -def test_workbench_kwargs_if_url_set(): +def test_workbench_kwargs_if_url_set(monkeypatch: pytest.MonkeyPatch): """ Test that the `ws_per_message_deflate` kwarg is set to False when RS_SERVER_URL and RS_SESSION_URL are set in the environment. @@ -15,8 +14,8 @@ def test_workbench_kwargs_if_url_set(): If the kwargs are set to True, a warning is raised and the value is set to False. """ # Workbench URL is set, kwargs are not - os.environ["RS_SERVER_URL"] = "any_string" - os.environ["RS_SESSION_URL"] = "any_string" + monkeypatch.setenv("RS_SERVER_URL", "any_string") + monkeypatch.setenv("RS_SESSION_URL", "any_string") kwargs: Dict[str, Any] = {} _set_workbench_kwargs(kwargs) @@ -35,10 +34,6 @@ def test_workbench_kwargs_if_url_set(): _set_workbench_kwargs(kwargs) assert kwargs.get("ws_per_message_deflate") is False - # Teardown - del os.environ["RS_SERVER_URL"] - del os.environ["RS_SESSION_URL"] - def test_workbench_kwargs_if_url_not_set(): """