From f13d0aeef12c667441276261d8e96f1943a8ff74 Mon Sep 17 00:00:00 2001 From: oxpa Date: Sun, 15 Dec 2024 19:20:02 +0000 Subject: [PATCH 1/3] {ACR} Add connection pooling with ACR registries. --- .../azure/cli/command_modules/acr/_docker_utils.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/acr/_docker_utils.py b/src/azure-cli/azure/cli/command_modules/acr/_docker_utils.py index 1c33e4acd04..44bcc4fb378 100644 --- a/src/azure-cli/azure/cli/command_modules/acr/_docker_utils.py +++ b/src/azure-cli/azure/cli/command_modules/acr/_docker_utils.py @@ -10,6 +10,7 @@ from enum import Enum from base64 import b64encode import requests +from requests import Session from requests import RequestException from requests.utils import to_native_string from msrest.http_logger import log_request, log_response @@ -34,6 +35,7 @@ logger = get_logger(__name__) +session = requests.Session() EMPTY_GUID = '00000000-0000-0000-0000-000000000000' @@ -593,7 +595,7 @@ def request_data_from_registry(http_method, if file_payload: with open(file_payload, 'rb') as data_payload: logger.debug(add_timestamp("Sending a HTTP {} request to {}".format(http_method, url))) - response = requests.request( + response = session.request( method=http_method, url=url, headers=headers, @@ -604,7 +606,7 @@ def request_data_from_registry(http_method, ) else: logger.debug(add_timestamp("Sending a HTTP {} request to {}".format(http_method, url))) - response = requests.request( + response = session.request( method=http_method, url=url, headers=headers, From 7736167a23fed2f930147dec58f7466b89237ccb Mon Sep 17 00:00:00 2001 From: oxpa Date: Fri, 24 Jan 2025 11:03:17 +0000 Subject: [PATCH 2/3] Use session imported from requests. --- src/azure-cli/azure/cli/command_modules/acr/_docker_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/azure-cli/azure/cli/command_modules/acr/_docker_utils.py b/src/azure-cli/azure/cli/command_modules/acr/_docker_utils.py index 44bcc4fb378..1033c4f0ae2 100644 --- a/src/azure-cli/azure/cli/command_modules/acr/_docker_utils.py +++ b/src/azure-cli/azure/cli/command_modules/acr/_docker_utils.py @@ -35,7 +35,7 @@ logger = get_logger(__name__) -session = requests.Session() +session = Session() EMPTY_GUID = '00000000-0000-0000-0000-000000000000' From c7e9c36c493fc960f99a21cdd84f8ead01e4f9b2 Mon Sep 17 00:00:00 2001 From: oxpa Date: Fri, 24 Jan 2025 13:07:11 +0000 Subject: [PATCH 3/3] Update tests to work with new Session object in acr. --- .../tests/latest/test_acr_commands_mock.py | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/acr/tests/latest/test_acr_commands_mock.py b/src/azure-cli/azure/cli/command_modules/acr/tests/latest/test_acr_commands_mock.py index 9cee734a086..e13d61258ed 100644 --- a/src/azure-cli/azure/cli/command_modules/acr/tests/latest/test_acr_commands_mock.py +++ b/src/azure-cli/azure/cli/command_modules/acr/tests/latest/test_acr_commands_mock.py @@ -65,7 +65,7 @@ class AcrMockCommandsTests(unittest.TestCase): @mock.patch('azure.cli.command_modules.acr.repository.get_access_credentials', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_repository_list(self, mock_requests_get, mock_get_access_credentials): cmd = self._setup_cmd() @@ -106,7 +106,7 @@ def test_repository_list(self, mock_requests_get, mock_get_access_credentials): verify=mock.ANY) @mock.patch('azure.cli.command_modules.acr.repository.get_access_credentials', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_repository_list_deleted(self, mock_requests_get, mock_get_access_credentials): cmd = self._setup_cmd() @@ -157,7 +157,7 @@ def test_repository_list_deleted(self, mock_requests_get, mock_get_access_creden verify=mock.ANY) @mock.patch('azure.cli.command_modules.acr.repository.get_access_credentials', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_repository_show_tags(self, mock_requests_get, mock_get_access_credentials): cmd = self._setup_cmd() @@ -213,7 +213,7 @@ def test_repository_show_tags(self, mock_requests_get, mock_get_access_credentia verify=mock.ANY) @mock.patch('azure.cli.command_modules.acr.repository.get_access_credentials', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_repository_show_manifests(self, mock_requests_get, mock_get_access_credentials): cmd = self._setup_cmd() @@ -264,7 +264,7 @@ def test_repository_show_manifests(self, mock_requests_get, mock_get_access_cred verify=mock.ANY) @mock.patch('azure.cli.command_modules.acr.repository.get_access_credentials', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_repository_show(self, mock_requests_get, mock_get_access_credentials): cmd = self._setup_cmd() @@ -319,7 +319,7 @@ def test_repository_show(self, mock_requests_get, mock_get_access_credentials): verify=mock.ANY) @mock.patch('azure.cli.command_modules.acr.repository.get_access_credentials', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_repository_update(self, mock_requests_get, mock_get_access_credentials): cmd = self._setup_cmd() @@ -384,7 +384,7 @@ def test_repository_update(self, mock_requests_get, mock_get_access_credentials) @mock.patch('azure.cli.command_modules.acr.repository.get_access_credentials', autospec=True) @mock.patch('azure.cli.command_modules.acr.repository._get_manifest_digest', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_repository_delete(self, mock_requests_delete, mock_get_manifest_digest, mock_get_access_credentials): cmd = self._setup_cmd() @@ -455,7 +455,7 @@ def test_repository_delete(self, mock_requests_delete, mock_get_manifest_digest, @mock.patch('azure.cli.command_modules.acr.manifest.get_access_credentials', autospec=True) @mock.patch('azure.cli.command_modules.acr.repository.get_access_credentials', autospec=True) @mock.patch('azure.cli.command_modules.acr.repository._get_manifest_digest', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_manifest_show(self, mock_requests_get, mock_get_manifest_digest, mock_get_access_credentials, mock_get_access_credentials_manifest): cmd = self._setup_cmd() @@ -581,7 +581,7 @@ def test_manifest_list(self, mock_obtain_manifest_from_registry, mock_obtain_dat @mock.patch('azure.cli.command_modules.acr.manifest.get_access_credentials', autospec=True) @mock.patch('azure.cli.command_modules.acr.repository.get_access_credentials', autospec=True) @mock.patch('azure.cli.command_modules.acr.repository._get_manifest_digest', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_manifest_list_referrers(self, mock_requests_get, mock_get_manifest_digest, mock_get_access_credentials, mock_get_access_credentials_manifest): cmd = self._setup_cmd() @@ -646,7 +646,7 @@ def test_manifest_list_referrers(self, mock_requests_get, mock_get_manifest_dige @mock.patch('azure.cli.command_modules.acr.manifest.get_access_credentials', autospec=True) @mock.patch('azure.cli.command_modules.acr.repository.get_access_credentials', autospec=True) @mock.patch('azure.cli.command_modules.acr.repository._get_manifest_digest', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_manifest_delete(self, mock_requests_delete, mock_get_manifest_digest, mock_get_access_credentials, mock_get_access_credentials_manifest): cmd = self._setup_cmd() @@ -704,7 +704,7 @@ def test_manifest_delete(self, mock_requests_delete, mock_get_manifest_digest, m @mock.patch('azure.cli.command_modules.acr.manifest.get_access_credentials', autospec=True) @mock.patch('azure.cli.command_modules.acr.repository.get_access_credentials', autospec=True) @mock.patch('azure.cli.command_modules.acr.repository._get_manifest_digest', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_manifest_metadata_show(self, mock_requests_get, mock_get_manifest_digest, mock_get_access_credentials, mock_get_access_credentials_manifest): cmd = self._setup_cmd() @@ -764,7 +764,7 @@ def test_manifest_metadata_show(self, mock_requests_get, mock_get_manifest_diges @mock.patch('azure.cli.command_modules.acr.manifest.get_access_credentials', autospec=True) @mock.patch('azure.cli.command_modules.acr.repository.get_access_credentials', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_manifest_metadata_list(self, mock_requests_get, mock_get_access_credentials, mock_get_access_credentials_manifest): cmd = self._setup_cmd() @@ -824,7 +824,7 @@ def test_manifest_metadata_list(self, mock_requests_get, mock_get_access_credent @mock.patch('azure.cli.command_modules.acr.manifest.get_access_credentials', autospec=True) @mock.patch('azure.cli.command_modules.acr.repository.get_access_credentials', autospec=True) @mock.patch('azure.cli.command_modules.acr.manifest._get_soft_delete_retention_days', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_manifest_deleted_list(self, mock_requests_get, mock_get_soft_delete_retention_days, mock_get_access_credentials, mock_get_access_credentials_manifest): cmd = self._setup_cmd() @@ -886,7 +886,7 @@ def test_manifest_deleted_list(self, mock_requests_get, mock_get_soft_delete_ret @mock.patch('azure.cli.command_modules.acr.manifest.get_access_credentials', autospec=True) @mock.patch('azure.cli.command_modules.acr.repository.get_access_credentials', autospec=True) @mock.patch('azure.cli.command_modules.acr.manifest._get_soft_delete_retention_days', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_manifest_deleted_tags_list(self, mock_requests_get, mock_get_soft_delete_retention_days, mock_get_access_credentials, mock_get_access_credentials_manifest): cmd = self._setup_cmd() @@ -979,7 +979,7 @@ def test_manifest_deleted_tags_list(self, mock_requests_get, mock_get_soft_delet @mock.patch('azure.cli.command_modules.acr.manifest.get_access_credentials', autospec=True) @mock.patch('azure.cli.command_modules.acr.repository.get_access_credentials', autospec=True) @mock.patch('azure.cli.command_modules.acr.manifest._obtain_data_from_registry', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_manifest_deleted_restore(self, mock_requests_post, mock_obtain_data_from_registry, mock_get_access_credentials, mock_get_access_credentials_manifest): cmd = self._setup_cmd() @@ -1072,7 +1072,7 @@ def test_manifest_deleted_restore(self, mock_requests_post, mock_obtain_data_fro @mock.patch('azure.cli.command_modules.acr.repository.get_access_credentials', autospec=True) @mock.patch('azure.cli.command_modules.acr.repository._get_manifest_digest', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_manifest_metadata_update(self, mock_requests_patch, mock_get_manifest_digest, mock_get_access_credentials): cmd = self._setup_cmd() @@ -1263,7 +1263,7 @@ def _validate_access_token_request(self, mock_requests_get, mock_requests_post, verify=mock.ANY) @mock.patch('azure.cli.command_modules.acr.helm.get_access_credentials', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_helm_list(self, mock_requests_get, mock_get_access_credentials): cmd = self._setup_cmd() @@ -1301,7 +1301,7 @@ def test_helm_list(self, mock_requests_get, mock_get_access_credentials): verify=mock.ANY) @mock.patch('azure.cli.command_modules.acr.helm.get_access_credentials', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_helm_show(self, mock_requests_get, mock_get_access_credentials): cmd = self._setup_cmd() @@ -1346,7 +1346,7 @@ def test_helm_show(self, mock_requests_get, mock_get_access_credentials): verify=mock.ANY) @mock.patch('azure.cli.command_modules.acr.helm.get_access_credentials', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_helm_delete(self, mock_requests_get, mock_get_access_credentials): cmd = self._setup_cmd() @@ -1380,7 +1380,7 @@ def test_helm_delete(self, mock_requests_get, mock_get_access_credentials): verify=mock.ANY) @mock.patch('azure.cli.command_modules.acr.helm.get_access_credentials', autospec=True) - @mock.patch('requests.request', autospec=True) + @mock.patch('azure.cli.command_modules.acr._docker_utils.session.request', autospec=True) def test_helm_push(self, mock_requests_get, mock_get_access_credentials): cmd = self._setup_cmd()