From 2b2719be73886dd161ec468f41bca89f1586a808 Mon Sep 17 00:00:00 2001 From: joshyam-k Date: Tue, 24 Feb 2026 12:06:58 -0800 Subject: [PATCH 1/2] add early check --- rsconnect/main.py | 6 ++++++ tests/test_main.py | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/rsconnect/main.py b/rsconnect/main.py index e939ab30..e4151777 100644 --- a/rsconnect/main.py +++ b/rsconnect/main.py @@ -741,6 +741,12 @@ def add( set_verbosity(verbose) output_params(ctx, locals().items()) + if not server and not any([token, secret, account]): + raise RSConnectException( + "`rsconnect add` requires -s/--server (for Posit Connect) or -A/--account, -T/--token, " + "and -S/--secret (for shinyapps.io)." + ) + validation.validate_connection_options( ctx=ctx, url=server, diff --git a/tests/test_main.py b/tests/test_main.py index dd3410c1..6467de8b 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -715,6 +715,28 @@ def test_add_shinyapps(self): if original_server_value: os.environ["CONNECT_SERVER"] = original_server_value + def test_add_name_only_missing_server_and_credentials(self): + """Regression test: `rsconnect add -n x` should produce a validation error, not a TypeError.""" + original_api_key_value = os.environ.pop("CONNECT_API_KEY", None) + original_server_value = os.environ.pop("CONNECT_SERVER", None) + try: + runner = CliRunner() + result = runner.invoke( + cli, + [ + "add", + "--name", + "some-name", + ], + ) + assert result.exit_code == 1, result.output + assert "`rsconnect add` requires" in str(result.exception) + finally: + if original_api_key_value: + os.environ["CONNECT_API_KEY"] = original_api_key_value + if original_server_value: + os.environ["CONNECT_SERVER"] = original_server_value + def test_add_shinyapps_missing_options(self): original_api_key_value = os.environ.pop("CONNECT_API_KEY", None) original_server_value = os.environ.pop("CONNECT_SERVER", None) From b473b7a0d39a792c5654d1fa60f1f5c3fbaca010 Mon Sep 17 00:00:00 2001 From: joshyam-k Date: Tue, 24 Feb 2026 13:19:32 -0800 Subject: [PATCH 2/2] bandaid test --- vetiver-testing/vetiver-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vetiver-testing/vetiver-requirements.txt b/vetiver-testing/vetiver-requirements.txt index cc8f66bc..7fb4a023 100644 --- a/vetiver-testing/vetiver-requirements.txt +++ b/vetiver-testing/vetiver-requirements.txt @@ -1,6 +1,6 @@ pandas numpy -pydantic +pydantic<2 pytest pins vetiver