Skip to content

Commit 11680b5

Browse files
author
SakoPak
committed
acr: show scope map delete warnings
1 parent dc50d47 commit 11680b5

2 files changed

Lines changed: 71 additions & 1 deletion

File tree

‎src/azure-cli/azure/cli/command_modules/acr/scope_map.py‎

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@
55

66
from enum import Enum
77
from azure.cli.core.util import CLIError
8+
from knack.log import get_logger
89
from ._utils import (
910
get_resource_group_name_by_registry_name,
1011
parse_scope_map_actions
1112
)
1213

14+
logger = get_logger(__name__)
15+
1316

1417
class RepoScopeMapActions(Enum):
1518
CONTENT_DELETE = 'content/delete'
@@ -26,6 +29,19 @@ class GatewayScopeMapActions(Enum):
2629
MESSAGES_WRITE = 'message/write'
2730

2831

32+
def _get_warning_response_hook():
33+
"""Create an SDK response hook that emits each LRO warning once."""
34+
displayed_warnings = set()
35+
36+
def _show_warning(response):
37+
warning = response.http_response.headers.get('x-ms-warning')
38+
if warning and warning not in displayed_warnings:
39+
logger.warning('%s', warning)
40+
displayed_warnings.add(warning)
41+
42+
return _show_warning
43+
44+
2945
def acr_scope_map_create(cmd,
3046
client,
3147
registry_name,
@@ -70,7 +86,12 @@ def acr_scope_map_delete(cmd,
7086
return None
7187

7288
resource_group_name = get_resource_group_name_by_registry_name(cmd.cli_ctx, registry_name, resource_group_name)
73-
return client.begin_delete(resource_group_name, registry_name, scope_map_name)
89+
return client.begin_delete(
90+
resource_group_name,
91+
registry_name,
92+
scope_map_name,
93+
raw_response_hook=_get_warning_response_hook()
94+
)
7495

7596

7697
def acr_scope_map_update(cmd,

‎src/azure-cli/azure/cli/command_modules/acr/tests/latest/test_acr_commands_mock.py‎

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
acr_helm_delete,
4040
acr_helm_push
4141
)
42+
from azure.cli.command_modules.acr.scope_map import acr_scope_map_delete
4243
from azure.cli.command_modules.acr._docker_utils import (
4344
get_login_credentials,
4445
get_access_credentials,
@@ -64,6 +65,54 @@
6465

6566
class AcrMockCommandsTests(unittest.TestCase):
6667

68+
@mock.patch('azure.cli.command_modules.acr.scope_map.logger')
69+
@mock.patch(
70+
'azure.cli.command_modules.acr.scope_map.'
71+
'get_resource_group_name_by_registry_name'
72+
)
73+
def test_scope_map_delete_surfaces_warning_once(
74+
self, mock_get_resource_group, mock_logger):
75+
mock_get_resource_group.return_value = 'testresourcegroup'
76+
client = mock.MagicMock()
77+
client.begin_delete.return_value = mock.sentinel.poller
78+
79+
result = acr_scope_map_delete(
80+
self._setup_cmd(),
81+
client,
82+
'testregistry',
83+
'testscopemap',
84+
yes=True
85+
)
86+
87+
self.assertIs(result, mock.sentinel.poller)
88+
client.begin_delete.assert_called_once_with(
89+
'testresourcegroup',
90+
'testregistry',
91+
'testscopemap',
92+
raw_response_hook=mock.ANY
93+
)
94+
95+
response_hook = client.begin_delete.call_args.kwargs[
96+
'raw_response_hook'
97+
]
98+
response = mock.MagicMock()
99+
response.http_response.headers = {}
100+
response_hook(response)
101+
mock_logger.warning.assert_not_called()
102+
103+
warning = (
104+
"Could not find the authorization entity for token(s): "
105+
"'testtoken'."
106+
)
107+
response.http_response.headers = {
108+
'x-ms-warning': warning
109+
}
110+
111+
response_hook(response)
112+
response_hook(response)
113+
114+
mock_logger.warning.assert_called_once_with('%s', warning)
115+
67116
@mock.patch('azure.cli.command_modules.acr.repository.get_access_credentials', autospec=True)
68117
@mock.patch('requests.request', autospec=True)
69118
def test_repository_list(self, mock_requests_get, mock_get_access_credentials):

0 commit comments

Comments
 (0)