From ae334e303cfc58db7ffb161df0bc7d0119cbf232 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 12 May 2026 04:50:20 +0000 Subject: [PATCH 1/6] Initial plan From f3d209e73ff5a8213bee67ffa6d569ee2e0e148a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 12 May 2026 04:55:27 +0000 Subject: [PATCH 2/6] Fix no-wait JSON decode fallback in sdk_no_wait Agent-Logs-Url: https://github.com/Azure/azure-cli/sessions/d1b76e63-afd4-462e-92f9-40626d2cfbee Co-authored-by: a0x1ab <59631311+a0x1ab@users.noreply.github.com> --- .../azure/cli/core/tests/test_util.py | 17 ++++++++++++++++- src/azure-cli-core/azure/cli/core/util.py | 9 +++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/azure-cli-core/azure/cli/core/tests/test_util.py b/src/azure-cli-core/azure/cli/core/tests/test_util.py index ae329ed65b7..4fe745a5c15 100644 --- a/src/azure-cli-core/azure/cli/core/tests/test_util.py +++ b/src/azure-cli-core/azure/cli/core/tests/test_util.py @@ -17,7 +17,7 @@ (get_file_json, truncate_text, shell_safe_json_parse, b64_to_hex, hash_string, random_string, open_page_in_browser, can_launch_browser, handle_exception, ConfiguredDefaultSetter, send_raw_request, should_disable_connection_verify, parse_proxy_resource_id, get_az_user_agent, get_az_rest_user_agent, - _get_parent_proc_name, is_wsl, run_cmd, run_az_cmd, roughly_parse_command) + _get_parent_proc_name, is_wsl, run_cmd, run_az_cmd, roughly_parse_command, sdk_no_wait) from azure.cli.core.mock import DummyCli @@ -235,6 +235,21 @@ def test_configured_default_setter(self): self.assertEqual(config.use_local_config, False) self.assertTrue(config.use_local_config) + def test_sdk_no_wait_sets_polling_false(self): + func = mock.MagicMock(return_value='ok') + result = sdk_no_wait(True, func, 1, test='value') + self.assertEqual(result, 'ok') + func.assert_called_once_with(1, test='value', polling=False) + + def test_sdk_no_wait_retries_without_forced_polling_on_json_decode_error(self): + def _func(*_args, **kwargs): + if kwargs.get('polling') is False: + raise json.decoder.JSONDecodeError("bad json", "gAS", 3) + return 'ok' + + result = sdk_no_wait(True, _func) + self.assertEqual(result, 'ok') + @mock.patch('azure.cli.core.__version__', '7.8.9') def test_get_az_user_agent(self): from azure.cli.core._environment import _ENV_AZ_INSTALLER diff --git a/src/azure-cli-core/azure/cli/core/util.py b/src/azure-cli-core/azure/cli/core/util.py index b693ee00518..56deebf6283 100644 --- a/src/azure-cli-core/azure/cli/core/util.py +++ b/src/azure-cli-core/azure/cli/core/util.py @@ -790,7 +790,16 @@ def augment_no_wait_handler_args(no_wait_enabled, handler, handler_args): def sdk_no_wait(no_wait, func, *args, **kwargs): if no_wait: + original_polling = kwargs.get('polling', None) + has_polling = 'polling' in kwargs kwargs.update({'polling': False}) + try: + return func(*args, **kwargs) + except json.decoder.JSONDecodeError: + if has_polling: + kwargs['polling'] = original_polling + else: + kwargs.pop('polling', None) return func(*args, **kwargs) From 3307036bc66c6f7a9b2b93904ed75a34727d6836 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 12 May 2026 04:55:58 +0000 Subject: [PATCH 3/6] Refine sdk_no_wait retry flow after validation feedback Agent-Logs-Url: https://github.com/Azure/azure-cli/sessions/d1b76e63-afd4-462e-92f9-40626d2cfbee Co-authored-by: a0x1ab <59631311+a0x1ab@users.noreply.github.com> --- src/azure-cli-core/azure/cli/core/util.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/azure-cli-core/azure/cli/core/util.py b/src/azure-cli-core/azure/cli/core/util.py index 56deebf6283..119cc45b8a8 100644 --- a/src/azure-cli-core/azure/cli/core/util.py +++ b/src/azure-cli-core/azure/cli/core/util.py @@ -800,6 +800,7 @@ def sdk_no_wait(no_wait, func, *args, **kwargs): kwargs['polling'] = original_polling else: kwargs.pop('polling', None) + return func(*args, **kwargs) return func(*args, **kwargs) From 2bb3dd6709140c87f106fd3d6e667724f075552e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 12 May 2026 04:56:21 +0000 Subject: [PATCH 4/6] Add debug logging for sdk_no_wait JSON retry fallback Agent-Logs-Url: https://github.com/Azure/azure-cli/sessions/d1b76e63-afd4-462e-92f9-40626d2cfbee Co-authored-by: a0x1ab <59631311+a0x1ab@users.noreply.github.com> --- src/azure-cli-core/azure/cli/core/util.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/azure-cli-core/azure/cli/core/util.py b/src/azure-cli-core/azure/cli/core/util.py index 119cc45b8a8..33da7deced9 100644 --- a/src/azure-cli-core/azure/cli/core/util.py +++ b/src/azure-cli-core/azure/cli/core/util.py @@ -796,6 +796,8 @@ def sdk_no_wait(no_wait, func, *args, **kwargs): try: return func(*args, **kwargs) except json.decoder.JSONDecodeError: + logger.debug("Retrying no-wait operation without forcing polling=False after JSON decode failure.", + exc_info=True) if has_polling: kwargs['polling'] = original_polling else: From ec90ac45016df2b62c3d46798d7f4e94656c73cb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 12 May 2026 04:57:02 +0000 Subject: [PATCH 5/6] Strengthen sdk_no_wait retry tests and exception handling Agent-Logs-Url: https://github.com/Azure/azure-cli/sessions/d1b76e63-afd4-462e-92f9-40626d2cfbee Co-authored-by: a0x1ab <59631311+a0x1ab@users.noreply.github.com> --- .../azure/cli/core/tests/test_util.py | 23 ++++++++++++++++++- src/azure-cli-core/azure/cli/core/util.py | 2 +- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/azure-cli-core/azure/cli/core/tests/test_util.py b/src/azure-cli-core/azure/cli/core/tests/test_util.py index 4fe745a5c15..669f6075fe4 100644 --- a/src/azure-cli-core/azure/cli/core/tests/test_util.py +++ b/src/azure-cli-core/azure/cli/core/tests/test_util.py @@ -242,13 +242,34 @@ def test_sdk_no_wait_sets_polling_false(self): func.assert_called_once_with(1, test='value', polling=False) def test_sdk_no_wait_retries_without_forced_polling_on_json_decode_error(self): + calls = [] + def _func(*_args, **kwargs): - if kwargs.get('polling') is False: + calls.append(kwargs.copy()) + if len(calls) == 1: raise json.decoder.JSONDecodeError("bad json", "gAS", 3) return 'ok' result = sdk_no_wait(True, _func) self.assertEqual(result, 'ok') + self.assertEqual(len(calls), 2) + self.assertFalse(calls[0]['polling']) + self.assertNotIn('polling', calls[1]) + + def test_sdk_no_wait_restores_original_polling_on_json_decode_error(self): + calls = [] + + def _func(*_args, **kwargs): + calls.append(kwargs.copy()) + if len(calls) == 1: + raise json.decoder.JSONDecodeError("bad json", "gAS", 3) + return 'ok' + + result = sdk_no_wait(True, _func, polling=True) + self.assertEqual(result, 'ok') + self.assertEqual(len(calls), 2) + self.assertFalse(calls[0]['polling']) + self.assertTrue(calls[1]['polling']) @mock.patch('azure.cli.core.__version__', '7.8.9') def test_get_az_user_agent(self): diff --git a/src/azure-cli-core/azure/cli/core/util.py b/src/azure-cli-core/azure/cli/core/util.py index 33da7deced9..e954ae1d3f3 100644 --- a/src/azure-cli-core/azure/cli/core/util.py +++ b/src/azure-cli-core/azure/cli/core/util.py @@ -795,7 +795,7 @@ def sdk_no_wait(no_wait, func, *args, **kwargs): kwargs.update({'polling': False}) try: return func(*args, **kwargs) - except json.decoder.JSONDecodeError: + except json.JSONDecodeError: logger.debug("Retrying no-wait operation without forcing polling=False after JSON decode failure.", exc_info=True) if has_polling: From 21aacf76cc5cea01254527e8879b8fbabfbb80a0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 12 May 2026 04:57:28 +0000 Subject: [PATCH 6/6] Clarify sdk_no_wait fallback debug log message Agent-Logs-Url: https://github.com/Azure/azure-cli/sessions/d1b76e63-afd4-462e-92f9-40626d2cfbee Co-authored-by: a0x1ab <59631311+a0x1ab@users.noreply.github.com> --- src/azure-cli-core/azure/cli/core/util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/azure-cli-core/azure/cli/core/util.py b/src/azure-cli-core/azure/cli/core/util.py index e954ae1d3f3..b697e0d6448 100644 --- a/src/azure-cli-core/azure/cli/core/util.py +++ b/src/azure-cli-core/azure/cli/core/util.py @@ -796,7 +796,7 @@ def sdk_no_wait(no_wait, func, *args, **kwargs): try: return func(*args, **kwargs) except json.JSONDecodeError: - logger.debug("Retrying no-wait operation without forcing polling=False after JSON decode failure.", + logger.debug("Retrying no-wait operation with original polling settings after JSON decode failure.", exc_info=True) if has_polling: kwargs['polling'] = original_polling