From 955921e85ba749eb98173d35969602fc7640d094 Mon Sep 17 00:00:00 2001 From: Lucas Rodriguez Date: Wed, 18 Dec 2024 18:04:37 -0600 Subject: [PATCH 1/2] fix: add validation for system caches delete flags Signed-off-by: Lucas Rodriguez --- CHANGELOG.md | 4 ++++ rsconnect/main.py | 2 ++ tests/test_main_system_caches.py | 26 ++++++++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9889b648..92cc1fae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Added validation for required flags for the `rsconnect system caches delete` command. + ## [1.25.0] - 2024-12-18 ### Added diff --git a/rsconnect/main.py b/rsconnect/main.py index d0161460..e6653ff9 100644 --- a/rsconnect/main.py +++ b/rsconnect/main.py @@ -2825,11 +2825,13 @@ def system_caches_list( "--language", "-l", help="The language of the target cache.", + required=True, ) @click.option( "--version", "-V", help="The version of the target cache.", + required=True, ) @click.option( "--image-name", diff --git a/tests/test_main_system_caches.py b/tests/test_main_system_caches.py index cdeccd82..6abe7e5e 100644 --- a/tests/test_main_system_caches.py +++ b/tests/test_main_system_caches.py @@ -143,3 +143,29 @@ def test_system_caches_delete_admin_nonexistent(self): self.assertEqual(result.exit_code, 1) self.assertRegex(result.output, "Cache does not exist") + + # --version and --language flags are required + def test_system_caches_delete_required_flags(self): + api_key = get_key("admin") + runner = CliRunner() + + # neither flag provided should fail + args = ["system", "caches", "delete"] + apply_common_args(args, server=CONNECT_SERVER, key=api_key) + result = runner.invoke(cli, args) + self.assertEqual(result.exit_code, 2) + self.assertRegex(result.output, "Error: Missing option '--language' / '-l'") + + # only --language flag provided should fail + args = ["system", "caches", "delete", "--language", "Python"] + apply_common_args(args, server=CONNECT_SERVER, key=api_key) + result = runner.invoke(cli, args) + self.assertEqual(result.exit_code, 2) + self.assertRegex(result.output, "Error: Missing option '--version' / '-V'") + + # only --version flag provided should fail + args = ["system", "caches", "delete", "--version", "1.2.3"] + apply_common_args(args, server=CONNECT_SERVER, key=api_key) + result = runner.invoke(cli, args) + self.assertEqual(result.exit_code, 2) + self.assertRegex(result.output, "Error: Missing option '--language' / '-l'") From cb764912efce154df5f1b09672c3711049213b56 Mon Sep 17 00:00:00 2001 From: Lucas Rodriguez Date: Thu, 19 Dec 2024 10:03:25 -0600 Subject: [PATCH 2/2] remove optional typing for language and version args Signed-off-by: Lucas Rodriguez --- rsconnect/api.py | 2 +- rsconnect/main.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rsconnect/api.py b/rsconnect/api.py index d4ac0a4c..6d29eb9d 100644 --- a/rsconnect/api.py +++ b/rsconnect/api.py @@ -1186,7 +1186,7 @@ def runtime_caches(self) -> list[ListEntryOutputDTO]: raise RSConnectException("To delete a runtime cache, client must be a RSConnectClient.") return self.client.system_caches_runtime_list() - def delete_runtime_cache(self, language: Optional[str], version: Optional[str], image_name: str, dry_run: bool): + def delete_runtime_cache(self, language: str, version: str, image_name: str, dry_run: bool): if not isinstance(self.client, RSConnectClient): raise RSConnectException("To delete a runtime cache, client must be a RSConnectClient.") target: DeleteInputDTO = { diff --git a/rsconnect/main.py b/rsconnect/main.py index e6653ff9..0902bb5c 100644 --- a/rsconnect/main.py +++ b/rsconnect/main.py @@ -2854,8 +2854,8 @@ def system_caches_delete( insecure: bool, cacert: Optional[str], verbose: int, - language: Optional[str], - version: Optional[str], + language: str, + version: str, image_name: str, dry_run: bool, ):