From c14ea4d4ebe7571fbd580ee381aae5e64c1ad482 Mon Sep 17 00:00:00 2001 From: tdviet Date: Fri, 10 Nov 2023 14:26:08 +0100 Subject: [PATCH] Catching exceptions for listing empty secret folders --- fedcloudclient/locker_auth.py | 1 + fedcloudclient/secret.py | 34 ++++++++++++++++++---------------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/fedcloudclient/locker_auth.py b/fedcloudclient/locker_auth.py index bfc5223..d791f4b 100644 --- a/fedcloudclient/locker_auth.py +++ b/fedcloudclient/locker_auth.py @@ -72,6 +72,7 @@ def vault_command(self, command: str, path: str, data: dict, vo: str = None): log_and_raise(f"Invalid command {command}", ConfigError) response.raise_for_status() + if command in ["list", "get"]: response_json = response.json() return dict(response_json) diff --git a/fedcloudclient/secret.py b/fedcloudclient/secret.py index dc945ab..b16e9a1 100644 --- a/fedcloudclient/secret.py +++ b/fedcloudclient/secret.py @@ -1,7 +1,7 @@ """ Implementation of "fedcloud secret" commands for accessing secret management service """ -from urllib.error import HTTPError +import sys import click import hvac @@ -145,16 +145,19 @@ def get( Get the secret object in the path. If a key is given, print only the value of the key """ - response = token.vault_command(command="get", path=short_path, data={}) - if decrypt_key: - decrypt_data(decrypt_key, response["data"]) - if not key: - print_secrets(output_file, output_format, response["data"]) - else: - if key in response["data"]: - print_value(output_file, binary_file, response["data"][key]) + try: + response = token.vault_command(command="get", path=short_path, data={}) + if decrypt_key: + decrypt_data(decrypt_key, response["data"]) + if not key: + print_secrets(output_file, output_format, response["data"]) else: - raise SystemExit(f"Error: {key} not found in {short_path}") + if key in response["data"]: + print_value(output_file, binary_file, response["data"][key]) + else: + raise SystemExit(f"Error: {key} not found in {short_path}") + except Exception as e: + print(f"An unexpected error occurred: {str(e)}", file=sys.stderr) @secret.command("list") @@ -170,13 +173,12 @@ def list_( try: response = token.vault_command(command="list", path=short_path, data={}) print("\n".join(map(str, response["data"]["keys"]))) - except HTTPError as e: - if e.code == 404: - pass - else: - print(f"HTTPError occurred. Error code: {e.code}") except Exception as e: - print(f"An unexpected error occurred: {e}") + message = str(e) + if "HTTPError: 404" in message: + print(f"The target path is empty or does not exist.", file=sys.stderr) + else: + print(f"An unexpected error occurred: {str(e)}", file=sys.stderr) @secret.command()