diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/__init__.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/__init__.py index f4b6c6c3563a..72fb27441900 100644 --- a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/__init__.py +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/__init__.py @@ -3,8 +3,6 @@ # Licensed under the MIT License. # ------------------------------------ from collections import namedtuple -import platform -from .._version import VERSION try: import urllib.parse as parse @@ -12,10 +10,6 @@ # pylint:disable=import-error import urlparse as parse # type: ignore -USER_AGENT = "azsdk-python-keyvault-keys/{} Python/{} ({})".format( - VERSION, platform.python_version(), platform.platform() -) - from .challenge_auth_policy import ChallengeAuthPolicy, ChallengeAuthPolicyBase from .client_base import KeyVaultClientBase from .http_challenge import HttpChallenge diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/async_client_base.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/async_client_base.py index 8018b3110248..974e96d32b3c 100644 --- a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/async_client_base.py +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/async_client_base.py @@ -12,7 +12,8 @@ from msrest.serialization import Model from ._generated import KeyVaultClient -from . import AsyncChallengeAuthPolicy, USER_AGENT +from . import AsyncChallengeAuthPolicy +from .._user_agent import USER_AGENT if TYPE_CHECKING: @@ -39,6 +40,23 @@ def _create_config( # https://github.com/Azure/azure-sdk-for-python/issues/6637 config.user_agent_policy = UserAgentPolicy(base_user_agent=USER_AGENT, **kwargs) + # Override config policies if found in kwargs + # TODO: should be unnecessary after next regeneration (written 2019-08-02) + if "user_agent_policy" in kwargs: + config.user_agent_policy = kwargs["user_agent_policy"] + if "headers_policy" in kwargs: + config.headers_policy = kwargs["headers_policy"] + if "proxy_policy" in kwargs: + config.proxy_policy = kwargs["proxy_policy"] + if "logging_policy" in kwargs: + config.logging_policy = kwargs["logging_policy"] + if "retry_policy" in kwargs: + config.retry_policy = kwargs["retry_policy"] + if "custom_hook_policy" in kwargs: + config.custom_hook_policy = kwargs["custom_hook_policy"] + if "redirect_policy" in kwargs: + config.redirect_policy = kwargs["redirect_policy"] + return config def __init__( diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/client_base.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/client_base.py index a521c09a1585..0cbb2c68f1b8 100644 --- a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/client_base.py +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_shared/client_base.py @@ -18,7 +18,7 @@ from azure.core.pipeline.transport import HttpTransport from .challenge_auth_policy import ChallengeAuthPolicy -from . import USER_AGENT +from .._user_agent import USER_AGENT KEY_VAULT_SCOPE = "https://vault.azure.net/.default" @@ -39,6 +39,23 @@ def _create_config(credential, api_version=None, **kwargs): # https://github.com/Azure/azure-sdk-for-python/issues/6637 config.user_agent_policy = UserAgentPolicy(base_user_agent=USER_AGENT, **kwargs) + # Override config policies if found in kwargs + # TODO: should be unnecessary after next regeneration (written 2019-08-02) + if "user_agent_policy" in kwargs: + config.user_agent_policy = kwargs["user_agent_policy"] + if "headers_policy" in kwargs: + config.headers_policy = kwargs["headers_policy"] + if "proxy_policy" in kwargs: + config.proxy_policy = kwargs["proxy_policy"] + if "logging_policy" in kwargs: + config.logging_policy = kwargs["logging_policy"] + if "retry_policy" in kwargs: + config.retry_policy = kwargs["retry_policy"] + if "custom_hook_policy" in kwargs: + config.custom_hook_policy = kwargs["custom_hook_policy"] + if "redirect_policy" in kwargs: + config.redirect_policy = kwargs["redirect_policy"] + return config def __init__(self, vault_url, credential, transport=None, api_version=None, **kwargs): diff --git a/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_user_agent.py b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_user_agent.py new file mode 100644 index 000000000000..ad189cea275f --- /dev/null +++ b/sdk/keyvault/azure-keyvault-keys/azure/keyvault/keys/_user_agent.py @@ -0,0 +1,10 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +import platform +from ._version import VERSION + +USER_AGENT = "azsdk-python-keyvault-keys/{} Python/{} ({})".format( + VERSION, platform.python_version(), platform.platform() +) diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/async_client_base.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/async_client_base.py index 193e6e324c7e..84b2d367a30b 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/async_client_base.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/async_client_base.py @@ -3,14 +3,17 @@ # Licensed under the MIT License. # ------------------------------------ from typing import Any, Callable, Mapping, AsyncIterator, TYPE_CHECKING + from azure.core.configuration import Configuration from azure.core.pipeline import AsyncPipeline +from azure.core.pipeline.policies import UserAgentPolicy from azure.core.pipeline.policies.distributed_tracing import DistributedTracingPolicy from azure.core.pipeline.transport import AsyncHttpTransport from msrest.serialization import Model from ._generated import KeyVaultClient from . import AsyncChallengeAuthPolicy +from .._user_agent import USER_AGENT if TYPE_CHECKING: @@ -22,14 +25,7 @@ class AsyncKeyVaultClientBase: - """ - :param credential: A credential or credential provider which can be used to authenticate to the vault, - a ValueError will be raised if the entity is not provided - :type credential: azure.authentication.Credential or azure.authentication.CredentialProvider - :param str vault_url: The url of the vault to which the client will connect, - a ValueError will be raised if the entity is not provided - :param ~azure.core.configuration.Configuration config: The configuration for the SecretClient - """ + """Base class for async Key Vault clients""" @staticmethod def _create_config( @@ -39,6 +35,27 @@ def _create_config( api_version = KeyVaultClient.DEFAULT_API_VERSION config = KeyVaultClient.get_configuration_class(api_version, aio=True)(credential, **kwargs) config.authentication_policy = AsyncChallengeAuthPolicy(credential) + + # replace the autorest-generated UserAgentPolicy and its hard-coded user agent + # https://github.com/Azure/azure-sdk-for-python/issues/6637 + config.user_agent_policy = UserAgentPolicy(base_user_agent=USER_AGENT, **kwargs) + + # Override config policies if found in kwargs + if "user_agent_policy" in kwargs: + config.user_agent_policy = kwargs["user_agent_policy"] + if "headers_policy" in kwargs: + config.headers_policy = kwargs["headers_policy"] + if "proxy_policy" in kwargs: + config.proxy_policy = kwargs["proxy_policy"] + if "logging_policy" in kwargs: + config.logging_policy = kwargs["logging_policy"] + if "retry_policy" in kwargs: + config.retry_policy = kwargs["retry_policy"] + if "custom_hook_policy" in kwargs: + config.custom_hook_policy = kwargs["custom_hook_policy"] + if "redirect_policy" in kwargs: + config.redirect_policy = kwargs["redirect_policy"] + return config def __init__( @@ -86,6 +103,7 @@ def _build_pipeline(config: Configuration, transport: AsyncHttpTransport, **kwar if transport is None: from azure.core.pipeline.transport import AioHttpTransport + transport = AioHttpTransport(**kwargs) return AsyncPipeline(transport, policies=policies) diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/client_base.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/client_base.py index dbde6d74f640..8b358c513233 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/client_base.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/client_base.py @@ -3,9 +3,12 @@ # Licensed under the MIT License. # ------------------------------------ from typing import TYPE_CHECKING + from azure.core import Configuration from azure.core.pipeline import Pipeline +from azure.core.pipeline.policies import UserAgentPolicy from azure.core.pipeline.transport import RequestsTransport +from azure.core.pipeline.policies.distributed_tracing import DistributedTracingPolicy from ._generated import KeyVaultClient if TYPE_CHECKING: @@ -15,21 +18,14 @@ from azure.core.pipeline.transport import HttpTransport from .challenge_auth_policy import ChallengeAuthPolicy -from azure.core.pipeline.policies.distributed_tracing import DistributedTracingPolicy +from .._user_agent import USER_AGENT KEY_VAULT_SCOPE = "https://vault.azure.net/.default" class KeyVaultClientBase(object): - """ - :param credential: A credential or credential provider which can be used to authenticate to the vault, - a ValueError will be raised if the entity is not provided - :type credential: azure.core.credentials.TokenCredential - :param str vault_url: The url of the vault to which the client will connect, - a ValueError will be raised if the entity is not provided - :param ~azure.core.configuration.Configuration config: The configuration for the KeyClient - """ + """Base class for Key Vault clients""" @staticmethod def _create_config(credential, api_version=None, **kwargs): @@ -38,6 +34,27 @@ def _create_config(credential, api_version=None, **kwargs): api_version = KeyVaultClient.DEFAULT_API_VERSION config = KeyVaultClient.get_configuration_class(api_version, aio=False)(credential, **kwargs) config.authentication_policy = ChallengeAuthPolicy(credential) + + # replace the autorest-generated UserAgentPolicy and its hard-coded user agent + # https://github.com/Azure/azure-sdk-for-python/issues/6637 + config.user_agent_policy = UserAgentPolicy(base_user_agent=USER_AGENT, **kwargs) + + # Override config policies if found in kwargs + if "user_agent_policy" in kwargs: + config.user_agent_policy = kwargs["user_agent_policy"] + if "headers_policy" in kwargs: + config.headers_policy = kwargs["headers_policy"] + if "proxy_policy" in kwargs: + config.proxy_policy = kwargs["proxy_policy"] + if "logging_policy" in kwargs: + config.logging_policy = kwargs["logging_policy"] + if "retry_policy" in kwargs: + config.retry_policy = kwargs["retry_policy"] + if "custom_hook_policy" in kwargs: + config.custom_hook_policy = kwargs["custom_hook_policy"] + if "redirect_policy" in kwargs: + config.redirect_policy = kwargs["redirect_policy"] + return config def __init__(self, vault_url, credential, transport=None, api_version=None, **kwargs): diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_user_agent.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_user_agent.py new file mode 100644 index 000000000000..507849d98ba9 --- /dev/null +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_user_agent.py @@ -0,0 +1,10 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +import platform +from ._version import VERSION + +USER_AGENT = "azsdk-python-keyvault-secrets/{} Python/{} ({})".format( + VERSION, platform.python_version(), platform.platform() +)