From d279c13eadb35c08d3dfeb279fbedd39c78764a9 Mon Sep 17 00:00:00 2001 From: Paul Van Eck Date: Wed, 4 Feb 2026 03:21:40 +0000 Subject: [PATCH] [Identity] Update HttpRequest class usage This updates HttpRequest imports from azure.core.transport to use the HttpRequest class from azure.core.rest. The HttpRequest class from azure.core.transport is considered legacy. Updating this also enables the transports from `corehttp` to be used with azure-identity, including the `HttpxTransports`. Signed-off-by: Paul Van Eck --- sdk/identity/azure-identity/CHANGELOG.md | 1 + .../identity/_credentials/app_service.py | 6 ++-- .../azure/identity/_credentials/azure_arc.py | 6 ++-- .../azure/identity/_credentials/azure_ml.py | 6 ++-- .../identity/_credentials/cloud_shell.py | 5 ++-- .../azure/identity/_credentials/imds.py | 6 ++-- .../identity/_credentials/service_fabric.py | 8 +++--- .../azure/identity/_internal/aad_client.py | 2 +- .../identity/_internal/aad_client_base.py | 2 +- .../_internal/managed_identity_client.py | 2 +- .../azure/identity/_internal/msal_client.py | 28 ++++++++----------- .../identity/aio/_internal/aad_client.py | 2 +- .../bearer_token_auth_policy.py | 2 +- .../tests/test_imds_credential.py | 3 +- .../tests/test_imds_credential_async.py | 3 +- .../tests/test_managed_identity_client.py | 2 +- .../test_managed_identity_client_async.py | 2 +- 17 files changed, 38 insertions(+), 48 deletions(-) diff --git a/sdk/identity/azure-identity/CHANGELOG.md b/sdk/identity/azure-identity/CHANGELOG.md index a164938150c9..5c0f944d3b57 100644 --- a/sdk/identity/azure-identity/CHANGELOG.md +++ b/sdk/identity/azure-identity/CHANGELOG.md @@ -18,6 +18,7 @@ ### Other Changes - Bumped minimum dependency on `msal` to `>=1.31.0`. +- Replace instances of `azure.core.pipeline.transport.HttpRequest` with `azure.core.rest.HttpRequest`. ([#44993](https://github.com/Azure/azure-sdk-for-python/pull/44993)) ## 1.26.0b1 (2025-11-07) diff --git a/sdk/identity/azure-identity/azure/identity/_credentials/app_service.py b/sdk/identity/azure-identity/azure/identity/_credentials/app_service.py index ff4531cb8525..4f8bca54380f 100644 --- a/sdk/identity/azure-identity/azure/identity/_credentials/app_service.py +++ b/sdk/identity/azure-identity/azure/identity/_credentials/app_service.py @@ -5,7 +5,7 @@ import functools import os from typing import Optional, Dict, Any -from azure.core.pipeline.transport import HttpRequest +from azure.core.rest import HttpRequest from .._constants import EnvironmentVariables from .._internal.msal_managed_identity_client import MsalManagedIdentityClient @@ -34,6 +34,4 @@ def _get_client_args(**kwargs: Any) -> Optional[Dict]: def _get_request(url: str, scope: str, identity_config: Dict) -> HttpRequest: - request = HttpRequest("GET", url) - request.format_parameters(dict({"api-version": "2019-08-01", "resource": scope}, **identity_config)) - return request + return HttpRequest("GET", url, params=dict({"api-version": "2019-08-01", "resource": scope}, **identity_config)) diff --git a/sdk/identity/azure-identity/azure/identity/_credentials/azure_arc.py b/sdk/identity/azure-identity/azure/identity/_credentials/azure_arc.py index 765af7bc7cfe..b43edaecb7f9 100644 --- a/sdk/identity/azure-identity/azure/identity/_credentials/azure_arc.py +++ b/sdk/identity/azure-identity/azure/identity/_credentials/azure_arc.py @@ -7,7 +7,7 @@ from typing import Dict from azure.core.exceptions import ClientAuthenticationError -from azure.core.pipeline.transport import HttpRequest +from azure.core.rest import HttpRequest from azure.core.pipeline.policies import HTTPPolicy from azure.core.pipeline import PipelineRequest, PipelineResponse @@ -27,9 +27,7 @@ def _get_request(url: str, scope: str, identity_config: Dict) -> HttpRequest: "DefaultAzureCredential ensure the AZURE_CLIENT_ID environment variable is not set." ) - request = HttpRequest("GET", url) - request.format_parameters(dict({"api-version": "2020-06-01", "resource": scope}, **identity_config)) - return request + return HttpRequest("GET", url, params=dict({"api-version": "2020-06-01", "resource": scope}, **identity_config)) def _get_secret_key(response: PipelineResponse) -> str: diff --git a/sdk/identity/azure-identity/azure/identity/_credentials/azure_ml.py b/sdk/identity/azure-identity/azure/identity/_credentials/azure_ml.py index bed313195c2c..3572ca624cbc 100644 --- a/sdk/identity/azure-identity/azure/identity/_credentials/azure_ml.py +++ b/sdk/identity/azure-identity/azure/identity/_credentials/azure_ml.py @@ -6,7 +6,7 @@ import os from typing import Optional, Dict -from azure.core.pipeline.transport import HttpRequest +from azure.core.rest import HttpRequest from .._constants import EnvironmentVariables from .._internal.msal_managed_identity_client import MsalManagedIdentityClient @@ -39,9 +39,7 @@ def _get_client_args(**kwargs) -> Optional[Dict]: def _get_request(url: str, scope: str, identity_config: Dict) -> HttpRequest: - request = HttpRequest("GET", url) - request.format_parameters(dict({"api-version": "2017-09-01", "resource": scope}, **identity_config)) - return request + return HttpRequest("GET", url, params=dict({"api-version": "2017-09-01", "resource": scope}, **identity_config)) def _parse_expires_on(content: Dict) -> None: diff --git a/sdk/identity/azure-identity/azure/identity/_credentials/cloud_shell.py b/sdk/identity/azure-identity/azure/identity/_credentials/cloud_shell.py index 61aefdb0c28b..41d8fb82f929 100644 --- a/sdk/identity/azure-identity/azure/identity/_credentials/cloud_shell.py +++ b/sdk/identity/azure-identity/azure/identity/_credentials/cloud_shell.py @@ -6,7 +6,7 @@ import os from typing import Any, Optional, Dict, Mapping -from azure.core.pipeline.transport import HttpRequest +from azure.core.rest import HttpRequest from .._constants import EnvironmentVariables from .._internal import within_dac @@ -43,5 +43,4 @@ def get_unavailable_message(self, desc: str = "") -> str: def _get_request(url: str, scope: str, identity_config: Dict) -> HttpRequest: - request = HttpRequest("POST", url, data=dict({"resource": scope}, **identity_config)) - return request + return HttpRequest("POST", url, data=dict({"resource": scope}, **identity_config)) diff --git a/sdk/identity/azure-identity/azure/identity/_credentials/imds.py b/sdk/identity/azure-identity/azure/identity/_credentials/imds.py index b1e82bb88052..ece23fbc4419 100644 --- a/sdk/identity/azure-identity/azure/identity/_credentials/imds.py +++ b/sdk/identity/azure-identity/azure/identity/_credentials/imds.py @@ -8,7 +8,7 @@ from azure.core.pipeline import PipelineResponse from azure.core.exceptions import ClientAuthenticationError, HttpResponseError -from azure.core.pipeline.transport import HttpRequest +from azure.core.rest import HttpRequest from azure.core.credentials import AccessTokenInfo from azure.core.pipeline.policies import RetryPolicy @@ -60,9 +60,7 @@ def _get_request(scope: str, identity_config: Dict) -> HttpRequest: os.environ.get(EnvironmentVariables.AZURE_POD_IDENTITY_AUTHORITY_HOST, IMDS_AUTHORITY).strip("/") + IMDS_TOKEN_PATH ) - request = HttpRequest("GET", url) - request.format_parameters(dict({"api-version": "2018-02-01", "resource": scope}, **identity_config)) - return request + return HttpRequest("GET", url, params=dict({"api-version": "2018-02-01", "resource": scope}, **identity_config)) def _check_forbidden_response(ex: HttpResponseError) -> None: diff --git a/sdk/identity/azure-identity/azure/identity/_credentials/service_fabric.py b/sdk/identity/azure-identity/azure/identity/_credentials/service_fabric.py index c3fe591cc5d2..b79234ee4adf 100644 --- a/sdk/identity/azure-identity/azure/identity/_credentials/service_fabric.py +++ b/sdk/identity/azure-identity/azure/identity/_credentials/service_fabric.py @@ -8,7 +8,7 @@ from azure.core.credentials import AccessToken, AccessTokenInfo, TokenRequestOptions from azure.core.exceptions import ClientAuthenticationError -from azure.core.pipeline.transport import HttpRequest +from azure.core.rest import HttpRequest from .._constants import EnvironmentVariables from .._internal.msal_managed_identity_client import MsalManagedIdentityClient @@ -55,6 +55,6 @@ def _get_client_args(**kwargs: Any) -> Optional[Dict]: def _get_request(url: str, scope: str, identity_config: Dict) -> HttpRequest: - request = HttpRequest("GET", url) - request.format_parameters(dict({"api-version": "2019-07-01-preview", "resource": scope}, **identity_config)) - return request + return HttpRequest( + "GET", url, params=dict({"api-version": "2019-07-01-preview", "resource": scope}, **identity_config) + ) diff --git a/sdk/identity/azure-identity/azure/identity/_internal/aad_client.py b/sdk/identity/azure-identity/azure/identity/_internal/aad_client.py index 216f601f3869..d4d9ff0ae536 100644 --- a/sdk/identity/azure-identity/azure/identity/_internal/aad_client.py +++ b/sdk/identity/azure-identity/azure/identity/_internal/aad_client.py @@ -7,7 +7,7 @@ from azure.core.credentials import AccessTokenInfo from azure.core.pipeline import Pipeline -from azure.core.pipeline.transport import HttpRequest +from azure.core.rest import HttpRequest from .aad_client_base import AadClientBase from .aadclient_certificate import AadClientCertificate from .pipeline import build_pipeline diff --git a/sdk/identity/azure-identity/azure/identity/_internal/aad_client_base.py b/sdk/identity/azure-identity/azure/identity/_internal/aad_client_base.py index b66cb15ab1b1..e359cc50af8a 100644 --- a/sdk/identity/azure-identity/azure/identity/_internal/aad_client_base.py +++ b/sdk/identity/azure-identity/azure/identity/_internal/aad_client_base.py @@ -13,7 +13,7 @@ from azure.core.pipeline import PipelineResponse from azure.core.pipeline.policies import ContentDecodePolicy -from azure.core.pipeline.transport import HttpRequest +from azure.core.rest import HttpRequest from azure.core.credentials import AccessTokenInfo from azure.core.exceptions import ClientAuthenticationError from .utils import get_default_authority, normalize_authority, resolve_tenant diff --git a/sdk/identity/azure-identity/azure/identity/_internal/managed_identity_client.py b/sdk/identity/azure-identity/azure/identity/_internal/managed_identity_client.py index 44b318e6bb19..d305ffe33abc 100644 --- a/sdk/identity/azure-identity/azure/identity/_internal/managed_identity_client.py +++ b/sdk/identity/azure-identity/azure/identity/_internal/managed_identity_client.py @@ -12,7 +12,7 @@ from azure.core.exceptions import ClientAuthenticationError, DecodeError from azure.core.pipeline.policies import ContentDecodePolicy from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import HttpRequest +from azure.core.rest import HttpRequest from .. import CredentialUnavailableError from .._internal import _scopes_to_resource from .._internal.pipeline import build_pipeline diff --git a/sdk/identity/azure-identity/azure/identity/_internal/msal_client.py b/sdk/identity/azure-identity/azure/identity/_internal/msal_client.py index 0fc6cdbef569..b09bcbb6fc9e 100644 --- a/sdk/identity/azure-identity/azure/identity/_internal/msal_client.py +++ b/sdk/identity/azure-identity/azure/identity/_internal/msal_client.py @@ -7,10 +7,7 @@ from azure.core.exceptions import ClientAuthenticationError from azure.core.pipeline.policies import ContentDecodePolicy -from azure.core.pipeline.transport import ( # pylint:disable=no-legacy-azure-core-http-response-import - HttpRequest, - HttpResponse, -) +from azure.core.rest import HttpRequest, HttpResponse from azure.core.pipeline import PipelineResponse from .pipeline import build_pipeline @@ -22,7 +19,7 @@ class MsalResponse: """Wraps HttpResponse according to msal.oauth2cli.http. :param response: The response to wrap. - :type response: ~azure.core.pipeline.transport.HttpResponse + :type response: ~azure.core.rest.HttpResponse """ def __init__(self, response: PipelineResponse) -> None: @@ -84,19 +81,20 @@ def post( **kwargs: Any ) -> MsalResponse: # pylint:disable=unused-argument - request = HttpRequest("POST", url, headers=headers) - if params: - request.format_parameters(params) + request_headers = dict(headers) if headers else {} + content: Optional[bytes] = None + request_data: Optional[Dict[str, str]] = None + if data: if isinstance(data, dict): - request.headers["Content-Type"] = "application/x-www-form-urlencoded" - request.set_formdata_body(data) + request_headers["Content-Type"] = "application/x-www-form-urlencoded" + request_data = data elif isinstance(data, str): - body_bytes = data.encode("utf-8") - request.set_bytes_body(body_bytes) + content = data.encode("utf-8") else: raise ValueError('expected "data" to be text or a dict') + request = HttpRequest("POST", url, headers=request_headers, params=params, data=request_data, content=content) response = self._pipeline.run(request, stream=False, retry_on_methods=_POST) self._store_auth_error(response) return MsalResponse(response) @@ -105,9 +103,7 @@ def get( self, url: str, params: Optional[Dict[str, str]] = None, headers: Optional[Dict[str, str]] = None, **kwargs: Any ) -> MsalResponse: # pylint:disable=unused-argument - request = HttpRequest("GET", url, headers=headers) - if params: - request.format_parameters(params) + request = HttpRequest("GET", url, headers=headers, params=params) response = self._pipeline.run(request, stream=False) self._store_auth_error(response) return MsalResponse(response) @@ -118,7 +114,7 @@ def get_error_response(self, msal_result: Dict) -> Optional[HttpResponse]: :param msal_result: The result of an MSAL request. :type msal_result: dict :return: The HTTP response associated with the error, if any. - :rtype: ~azure.core.pipeline.transport.HttpResponse or None + :rtype: ~azure.core.rest.HttpResponse or None """ error_code, response = getattr(self._local, "error", (None, None)) if response and error_code == msal_result.get("error"): diff --git a/sdk/identity/azure-identity/azure/identity/aio/_internal/aad_client.py b/sdk/identity/azure-identity/azure/identity/aio/_internal/aad_client.py index 7b99f85ac912..bfe2625f24da 100644 --- a/sdk/identity/azure-identity/azure/identity/aio/_internal/aad_client.py +++ b/sdk/identity/azure-identity/azure/identity/aio/_internal/aad_client.py @@ -8,7 +8,7 @@ from azure.core.credentials import AccessTokenInfo from azure.core.pipeline import AsyncPipeline from azure.core.pipeline.policies import AsyncHTTPPolicy, SansIOHTTPPolicy -from azure.core.pipeline.transport import HttpRequest +from azure.core.rest import HttpRequest from ..._internal import AadClientCertificate from ..._internal import AadClientBase from ..._internal.pipeline import build_async_pipeline diff --git a/sdk/identity/azure-identity/tests/perfstress_tests/bearer_token_auth_policy.py b/sdk/identity/azure-identity/tests/perfstress_tests/bearer_token_auth_policy.py index bb59a93c212c..48fdb57a13b6 100644 --- a/sdk/identity/azure-identity/tests/perfstress_tests/bearer_token_auth_policy.py +++ b/sdk/identity/azure-identity/tests/perfstress_tests/bearer_token_auth_policy.py @@ -12,7 +12,7 @@ from azure.core.credentials import AccessToken from azure.core.pipeline import AsyncPipeline, Pipeline from azure.core.pipeline.policies import AsyncBearerTokenCredentialPolicy, BearerTokenCredentialPolicy -from azure.core.pipeline.transport import HttpRequest +from azure.core.rest import HttpRequest class BearerTokenPolicyTest(PerfStressTest): diff --git a/sdk/identity/azure-identity/tests/test_imds_credential.py b/sdk/identity/azure-identity/tests/test_imds_credential.py index a1d5ff3fa76f..ea0c057a4602 100644 --- a/sdk/identity/azure-identity/tests/test_imds_credential.py +++ b/sdk/identity/azure-identity/tests/test_imds_credential.py @@ -16,7 +16,8 @@ ) from azure.core.pipeline import PipelineResponse from azure.core.pipeline.policies import RetryPolicy -from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.rest import HttpRequest +from azure.core.pipeline.transport import HttpResponse import pytest from helpers import mock, mock_response, Request, validating_transport, GET_TOKEN_METHODS diff --git a/sdk/identity/azure-identity/tests/test_imds_credential_async.py b/sdk/identity/azure-identity/tests/test_imds_credential_async.py index 051f360fa660..79dbc47aad86 100644 --- a/sdk/identity/azure-identity/tests/test_imds_credential_async.py +++ b/sdk/identity/azure-identity/tests/test_imds_credential_async.py @@ -17,7 +17,8 @@ from azure.identity._credentials.imds import PIPELINE_SETTINGS from azure.core.pipeline import PipelineResponse from azure.core.pipeline.policies import AsyncRetryPolicy -from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.rest import HttpRequest +from azure.core.pipeline.transport import HttpResponse import pytest from helpers import mock_response, Request, GET_TOKEN_METHODS diff --git a/sdk/identity/azure-identity/tests/test_managed_identity_client.py b/sdk/identity/azure-identity/tests/test_managed_identity_client.py index 0e9636ae047f..a96c7472f4c3 100644 --- a/sdk/identity/azure-identity/tests/test_managed_identity_client.py +++ b/sdk/identity/azure-identity/tests/test_managed_identity_client.py @@ -6,7 +6,7 @@ import time from azure.core.exceptions import ClientAuthenticationError, ServiceRequestError -from azure.core.pipeline.transport import HttpRequest +from azure.core.rest import HttpRequest from azure.identity._internal.managed_identity_client import ManagedIdentityClient import pytest diff --git a/sdk/identity/azure-identity/tests/test_managed_identity_client_async.py b/sdk/identity/azure-identity/tests/test_managed_identity_client_async.py index 03a9d870aa4a..96ddfd70814b 100644 --- a/sdk/identity/azure-identity/tests/test_managed_identity_client_async.py +++ b/sdk/identity/azure-identity/tests/test_managed_identity_client_async.py @@ -7,7 +7,7 @@ from unittest.mock import Mock, patch from azure.core.exceptions import ClientAuthenticationError, ServiceRequestError -from azure.core.pipeline.transport import HttpRequest +from azure.core.rest import HttpRequest from azure.identity.aio._internal.managed_identity_client import AsyncManagedIdentityClient import pytest