From 0fde9dfdd707e5ffe02fcdffb4b0e1f9db10c006 Mon Sep 17 00:00:00 2001 From: houk-ms Date: Thu, 22 Oct 2020 13:38:05 +0800 Subject: [PATCH 1/2] catch and categorize HttpError in exception handler --- src/azure-cli-core/azure/cli/core/util.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/azure-cli-core/azure/cli/core/util.py b/src/azure-cli-core/azure/cli/core/util.py index b566578010d..464c60b1a6e 100644 --- a/src/azure-cli-core/azure/cli/core/util.py +++ b/src/azure-cli-core/azure/cli/core/util.py @@ -61,7 +61,7 @@ def handle_exception(ex): # pylint: disable=too-many-locals, too-many-statement from azure.cli.core.azlogging import CommandLoggerContext from azure.common import AzureException from azure.core.exceptions import AzureError - from requests.exceptions import SSLError + from requests.exceptions import SSLError, HTTPError import azure.cli.core.azclierror as azclierror import traceback @@ -125,6 +125,13 @@ def handle_exception(ex): # pylint: disable=too-many-locals, too-many-statement AzCLIErrorType = get_error_type_by_status_code(status_code) az_error = AzCLIErrorType(error_msg) + elif isinstance(ex, HTTPError): + status_code = 'Unknown Code' + if ex.response and ex.response.status_code: + status_code = ex.response.status_code + AzCLIErrorType = get_error_type_by_status_code(status_code) + az_error = AzCLIErrorType(error_msg) + elif isinstance(ex, KeyboardInterrupt): error_msg = 'Keyboard interrupt is captured.' az_error = azclierror.ManualInterrupt(error_msg) @@ -211,7 +218,7 @@ def get_error_type_by_status_code(status_code): if status_code.startswith('5'): return azclierror.AzureInternalError - return azclierror.AzureResponseError + return azclierror.UnknownError def is_azure_connection_error(error_msg): From 97f722d853c9707c6f498bbd9343e4283b976f14 Mon Sep 17 00:00:00 2001 From: houk-ms Date: Thu, 22 Oct 2020 14:55:32 +0800 Subject: [PATCH 2/2] modify the way to get status code --- src/azure-cli-core/azure/cli/core/util.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/azure-cli-core/azure/cli/core/util.py b/src/azure-cli-core/azure/cli/core/util.py index 464c60b1a6e..511fad671c8 100644 --- a/src/azure-cli-core/azure/cli/core/util.py +++ b/src/azure-cli-core/azure/cli/core/util.py @@ -126,9 +126,7 @@ def handle_exception(ex): # pylint: disable=too-many-locals, too-many-statement az_error = AzCLIErrorType(error_msg) elif isinstance(ex, HTTPError): - status_code = 'Unknown Code' - if ex.response and ex.response.status_code: - status_code = ex.response.status_code + status_code = str(getattr(ex.response, 'status_code', 'Unknown Code')) AzCLIErrorType = get_error_type_by_status_code(status_code) az_error = AzCLIErrorType(error_msg)