diff --git a/sdk/keyvault/azure-keyvault-secrets/CHANGELOG.md b/sdk/keyvault/azure-keyvault-secrets/CHANGELOG.md index 08406da65dba..a99145c35c05 100644 --- a/sdk/keyvault/azure-keyvault-secrets/CHANGELOG.md +++ b/sdk/keyvault/azure-keyvault-secrets/CHANGELOG.md @@ -3,6 +3,7 @@ ## 4.8.0b3 (Unreleased) ### Features Added +- Added support for service API version `7.5` ### Breaking Changes @@ -12,6 +13,8 @@ - Python 3.7 is no longer supported. Please use Python version 3.8 or later. - `asyncio` is no longer directly referenced by the library ([#33819](https://github.com/Azure/azure-sdk-for-python/pull/33819)) +- Updated minimum `azure-core` version to 1.29.5 +- Dropped `azure-common` requirement ## 4.8.0b2 (2023-11-03) diff --git a/sdk/keyvault/azure-keyvault-secrets/assets.json b/sdk/keyvault/azure-keyvault-secrets/assets.json index 5857c1925405..75093efde321 100644 --- a/sdk/keyvault/azure-keyvault-secrets/assets.json +++ b/sdk/keyvault/azure-keyvault-secrets/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "python", "TagPrefix": "python/keyvault/azure-keyvault-secrets", - "Tag": "python/keyvault/azure-keyvault-secrets_cecaeadbda" + "Tag": "python/keyvault/azure-keyvault-secrets_e959803e9e" } diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/__init__.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/__init__.py index 1414715b988c..1e535724e551 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/__init__.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/__init__.py @@ -6,7 +6,7 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from ._key_vault_client import KeyVaultClient +from ._client import KeyVaultClient try: from ._patch import __all__ as _patch_all diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_key_vault_client.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_client.py similarity index 62% rename from sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_key_vault_client.py rename to sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_client.py index 9d423f1627ad..28ee625036e6 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_key_vault_client.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_client.py @@ -10,40 +10,59 @@ from typing import Any from azure.core import PipelineClient +from azure.core.pipeline import policies from azure.core.rest import HttpRequest, HttpResponse from . import models as _models from ._configuration import KeyVaultClientConfiguration +from ._operations import KeyVaultClientOperationsMixin from ._serialization import Deserializer, Serializer -from .operations import KeyVaultClientOperationsMixin class KeyVaultClient(KeyVaultClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword """The key vault client performs cryptographic key operations and vault operations against the Key Vault service. - :keyword api_version: Api Version. Default value is "7.5-preview.1". Note that overriding this - default value may result in unsupported behavior. + :keyword api_version: Api Version. Default value is "7.5". Note that overriding this default + value may result in unsupported behavior. :paramtype api_version: str """ def __init__(self, **kwargs: Any) -> None: # pylint: disable=missing-client-constructor-parameter-credential _endpoint = "{vaultBaseUrl}" self._config = KeyVaultClientConfiguration(**kwargs) - self._client: PipelineClient = PipelineClient(base_url=_endpoint, config=self._config, **kwargs) - - client_models = {k: v for k, v in _models.__dict__.items() if isinstance(v, type)} + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: PipelineClient = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + client_models = {k: v for k, v in _models._models.__dict__.items() if isinstance(v, type)} + client_models.update({k: v for k, v in _models.__dict__.items() if isinstance(v, type)}) self._serialize = Serializer(client_models) self._deserialize = Deserializer(client_models) self._serialize.client_side_validation = False - def _send_request(self, request: HttpRequest, **kwargs: Any) -> HttpResponse: + def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: """Runs the network request through the client's chained policies. >>> from azure.core.rest import HttpRequest >>> request = HttpRequest("GET", "https://www.example.org/") - >>> response = client._send_request(request) + >>> response = client.send_request(request) For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request @@ -57,7 +76,7 @@ def _send_request(self, request: HttpRequest, **kwargs: Any) -> HttpResponse: request_copy = deepcopy(request) request_copy.url = self._client.format_url(request_copy.url) - return self._client.send_request(request_copy, **kwargs) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore def close(self) -> None: self._client.close() diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_configuration.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_configuration.py index 5b9bfa5f7717..c7b4428506e3 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_configuration.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_configuration.py @@ -8,29 +8,28 @@ from typing import Any -from azure.core.configuration import Configuration from azure.core.pipeline import policies VERSION = "unknown" -class KeyVaultClientConfiguration(Configuration): # pylint: disable=too-many-instance-attributes +class KeyVaultClientConfiguration: # pylint: disable=too-many-instance-attributes """Configuration for KeyVaultClient. Note that all parameters used to create this instance are saved as instance attributes. - :keyword api_version: Api Version. Default value is "7.5-preview.1". Note that overriding this - default value may result in unsupported behavior. + :keyword api_version: Api Version. Default value is "7.5". Note that overriding this default + value may result in unsupported behavior. :paramtype api_version: str """ def __init__(self, **kwargs: Any) -> None: - super(KeyVaultClientConfiguration, self).__init__(**kwargs) - api_version: str = kwargs.pop("api_version", "7.5-preview.1") + api_version: str = kwargs.pop("api_version", "7.5") self.api_version = api_version kwargs.setdefault("sdk_moniker", "keyvault/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) self._configure(**kwargs) def _configure(self, **kwargs: Any) -> None: @@ -39,7 +38,7 @@ def _configure(self, **kwargs: Any) -> None: self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) - self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs) self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs) self.authentication_policy = kwargs.get("authentication_policy") diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/operations/__init__.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_operations/__init__.py similarity index 91% rename from sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/operations/__init__.py rename to sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_operations/__init__.py index 15aeb155c95e..29ea96fccbfe 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/operations/__init__.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_operations/__init__.py @@ -6,7 +6,7 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from ._key_vault_client_operations import KeyVaultClientOperationsMixin +from ._operations import KeyVaultClientOperationsMixin from ._patch import __all__ as _patch_all from ._patch import * # pylint: disable=unused-wildcard-import diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/operations/_key_vault_client_operations.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_operations/_operations.py similarity index 73% rename from sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/operations/_key_vault_client_operations.py rename to sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_operations/_operations.py index 6f0e5ab814b3..15793e76fc29 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/operations/_key_vault_client_operations.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=too-many-lines,too-many-statements # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -20,14 +20,13 @@ ) from azure.core.paging import ItemPaged from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import HttpResponse -from azure.core.rest import HttpRequest +from azure.core.rest import HttpRequest, HttpResponse from azure.core.tracing.decorator import distributed_trace from azure.core.utils import case_insensitive_dict from .. import models as _models from .._serialization import Serializer -from .._vendor import KeyVaultClientMixinABC, _convert_request +from .._vendor import KeyVaultClientMixinABC T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -36,16 +35,16 @@ _SERIALIZER.client_side_validation = False -def build_set_secret_request(secret_name: str, **kwargs: Any) -> HttpRequest: +def build_key_vault_set_secret_request(secret_name: str, **kwargs: Any) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5-preview.1")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = kwargs.pop("template_url", "/secrets/{secret-name}") + _url = "/secrets/{secret-name}" path_format_arguments = { "secret-name": _SERIALIZER.url("secret_name", secret_name, "str", pattern=r"^[0-9a-zA-Z-]+$"), } @@ -63,15 +62,15 @@ def build_set_secret_request(secret_name: str, **kwargs: Any) -> HttpRequest: return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) -def build_delete_secret_request(secret_name: str, **kwargs: Any) -> HttpRequest: +def build_key_vault_delete_secret_request(secret_name: str, **kwargs: Any) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5-preview.1")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = kwargs.pop("template_url", "/secrets/{secret-name}") + _url = "/secrets/{secret-name}" path_format_arguments = { "secret-name": _SERIALIZER.url("secret_name", secret_name, "str"), } @@ -87,16 +86,16 @@ def build_delete_secret_request(secret_name: str, **kwargs: Any) -> HttpRequest: return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) -def build_update_secret_request(secret_name: str, secret_version: str, **kwargs: Any) -> HttpRequest: +def build_key_vault_update_secret_request(secret_name: str, secret_version: str, **kwargs: Any) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5-preview.1")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = kwargs.pop("template_url", "/secrets/{secret-name}/{secret-version}") + _url = "/secrets/{secret-name}/{secret-version}" path_format_arguments = { "secret-name": _SERIALIZER.url("secret_name", secret_name, "str"), "secret-version": _SERIALIZER.url("secret_version", secret_version, "str"), @@ -115,15 +114,15 @@ def build_update_secret_request(secret_name: str, secret_version: str, **kwargs: return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) -def build_get_secret_request(secret_name: str, secret_version: str, **kwargs: Any) -> HttpRequest: +def build_key_vault_get_secret_request(secret_name: str, secret_version: str, **kwargs: Any) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5-preview.1")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = kwargs.pop("template_url", "/secrets/{secret-name}/{secret-version}") + _url = "/secrets/{secret-name}/{secret-version}" path_format_arguments = { "secret-name": _SERIALIZER.url("secret_name", secret_name, "str"), "secret-version": _SERIALIZER.url("secret_version", secret_version, "str"), @@ -140,15 +139,15 @@ def build_get_secret_request(secret_name: str, secret_version: str, **kwargs: An return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_get_secrets_request(*, maxresults: Optional[int] = None, **kwargs: Any) -> HttpRequest: +def build_key_vault_get_secrets_request(*, maxresults: Optional[int] = None, **kwargs: Any) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5-preview.1")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = kwargs.pop("template_url", "/secrets") + _url = "/secrets" # Construct parameters if maxresults is not None: @@ -161,17 +160,17 @@ def build_get_secrets_request(*, maxresults: Optional[int] = None, **kwargs: Any return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_get_secret_versions_request( +def build_key_vault_get_secret_versions_request( # pylint: disable=name-too-long secret_name: str, *, maxresults: Optional[int] = None, **kwargs: Any ) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5-preview.1")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = kwargs.pop("template_url", "/secrets/{secret-name}/versions") + _url = "/secrets/{secret-name}/versions" path_format_arguments = { "secret-name": _SERIALIZER.url("secret_name", secret_name, "str"), } @@ -189,15 +188,17 @@ def build_get_secret_versions_request( return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_get_deleted_secrets_request(*, maxresults: Optional[int] = None, **kwargs: Any) -> HttpRequest: +def build_key_vault_get_deleted_secrets_request( # pylint: disable=name-too-long + *, maxresults: Optional[int] = None, **kwargs: Any +) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5-preview.1")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = kwargs.pop("template_url", "/deletedsecrets") + _url = "/deletedsecrets" # Construct parameters if maxresults is not None: @@ -210,15 +211,17 @@ def build_get_deleted_secrets_request(*, maxresults: Optional[int] = None, **kwa return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_get_deleted_secret_request(secret_name: str, **kwargs: Any) -> HttpRequest: +def build_key_vault_get_deleted_secret_request( # pylint: disable=name-too-long + secret_name: str, **kwargs: Any +) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5-preview.1")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = kwargs.pop("template_url", "/deletedsecrets/{secret-name}") + _url = "/deletedsecrets/{secret-name}" path_format_arguments = { "secret-name": _SERIALIZER.url("secret_name", secret_name, "str"), } @@ -234,15 +237,17 @@ def build_get_deleted_secret_request(secret_name: str, **kwargs: Any) -> HttpReq return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -def build_purge_deleted_secret_request(secret_name: str, **kwargs: Any) -> HttpRequest: +def build_key_vault_purge_deleted_secret_request( # pylint: disable=name-too-long + secret_name: str, **kwargs: Any +) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5-preview.1")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = kwargs.pop("template_url", "/deletedsecrets/{secret-name}") + _url = "/deletedsecrets/{secret-name}" path_format_arguments = { "secret-name": _SERIALIZER.url("secret_name", secret_name, "str"), } @@ -258,15 +263,17 @@ def build_purge_deleted_secret_request(secret_name: str, **kwargs: Any) -> HttpR return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) -def build_recover_deleted_secret_request(secret_name: str, **kwargs: Any) -> HttpRequest: +def build_key_vault_recover_deleted_secret_request( # pylint: disable=name-too-long + secret_name: str, **kwargs: Any +) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5-preview.1")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = kwargs.pop("template_url", "/deletedsecrets/{secret-name}/recover") + _url = "/deletedsecrets/{secret-name}/recover" path_format_arguments = { "secret-name": _SERIALIZER.url("secret_name", secret_name, "str"), } @@ -282,15 +289,15 @@ def build_recover_deleted_secret_request(secret_name: str, **kwargs: Any) -> Htt return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) -def build_backup_secret_request(secret_name: str, **kwargs: Any) -> HttpRequest: +def build_key_vault_backup_secret_request(secret_name: str, **kwargs: Any) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5-preview.1")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = kwargs.pop("template_url", "/secrets/{secret-name}/backup") + _url = "/secrets/{secret-name}/backup" path_format_arguments = { "secret-name": _SERIALIZER.url("secret_name", secret_name, "str"), } @@ -306,16 +313,16 @@ def build_backup_secret_request(secret_name: str, **kwargs: Any) -> HttpRequest: return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) -def build_restore_secret_request(**kwargs: Any) -> HttpRequest: +def build_key_vault_restore_secret_request(**kwargs: Any) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5-preview.1")) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "7.5")) accept = _headers.pop("Accept", "application/json") # Construct URL - _url = kwargs.pop("template_url", "/secrets/restore") + _url = "/secrets/restore" # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") @@ -352,13 +359,12 @@ def set_secret( identifiable or sensitive information. Required. :type secret_name: str :param parameters: The parameters for setting the secret. Required. - :type parameters: ~key_vault_client.models.SecretSetParameters + :type parameters: ~azure.keyvault.v7_5.models.SecretSetParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -367,7 +373,7 @@ def set_secret( self, vault_base_url: str, secret_name: str, - parameters: IO, + parameters: IO[bytes], *, content_type: str = "application/json", **kwargs: Any @@ -385,19 +391,22 @@ def set_secret( identifiable or sensitive information. Required. :type secret_name: str :param parameters: The parameters for setting the secret. Required. - :type parameters: IO + :type parameters: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ @distributed_trace def set_secret( - self, vault_base_url: str, secret_name: str, parameters: Union[_models.SecretSetParameters, IO], **kwargs: Any + self, + vault_base_url: str, + secret_name: str, + parameters: Union[_models.SecretSetParameters, IO[bytes]], + **kwargs: Any ) -> _models.SecretBundle: """Sets a secret in a specified key vault. @@ -412,14 +421,13 @@ def set_secret( identifiable or sensitive information. Required. :type secret_name: str :param parameters: The parameters for setting the secret. Is either a SecretSetParameters type - or a IO type. Required. - :type parameters: ~key_vault_client.models.SecretSetParameters or IO + or a IO[bytes] type. Required. + :type parameters: ~azure.keyvault.v7_5.models.SecretSetParameters or IO[bytes] :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map = { @@ -431,9 +439,8 @@ def set_secret( error_map.update(kwargs.pop("error_map", {}) or {}) _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.SecretBundle] = kwargs.pop("cls", None) @@ -445,30 +452,30 @@ def set_secret( else: _json = self._serialize.body(parameters, "SecretSetParameters") - request = build_set_secret_request( + _request = build_key_vault_set_secret_request( secret_name=secret_name, - api_version=api_version, content_type=content_type, + api_version=self._config.api_version, json=_json, content=_content, - template_url=self.set_secret.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -476,11 +483,9 @@ def set_secret( deserialized = self._deserialize("SecretBundle", pipeline_response) if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized + return cls(pipeline_response, deserialized, {}) # type: ignore - set_secret.metadata = {"url": "/secrets/{secret-name}"} + return deserialized # type: ignore @distributed_trace def delete_secret(self, vault_base_url: str, secret_name: str, **kwargs: Any) -> _models.DeletedSecretBundle: @@ -493,9 +498,8 @@ def delete_secret(self, vault_base_url: str, secret_name: str, **kwargs: Any) -> :type vault_base_url: str :param secret_name: The name of the secret. Required. :type secret_name: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: DeletedSecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.DeletedSecretBundle + :return: DeletedSecretBundle + :rtype: ~azure.keyvault.v7_5.models.DeletedSecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map = { @@ -507,32 +511,31 @@ def delete_secret(self, vault_base_url: str, secret_name: str, **kwargs: Any) -> error_map.update(kwargs.pop("error_map", {}) or {}) _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) cls: ClsType[_models.DeletedSecretBundle] = kwargs.pop("cls", None) - request = build_delete_secret_request( + _request = build_key_vault_delete_secret_request( secret_name=secret_name, - api_version=api_version, - template_url=self.delete_secret.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -540,11 +543,9 @@ def delete_secret(self, vault_base_url: str, secret_name: str, **kwargs: Any) -> deserialized = self._deserialize("DeletedSecretBundle", pipeline_response) if cls: - return cls(pipeline_response, deserialized, {}) + return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized - - delete_secret.metadata = {"url": "/secrets/{secret-name}"} + return deserialized # type: ignore @overload def update_secret( @@ -570,13 +571,12 @@ def update_secret( :param secret_version: The version of the secret. Required. :type secret_version: str :param parameters: The parameters for update secret operation. Required. - :type parameters: ~key_vault_client.models.SecretUpdateParameters + :type parameters: ~azure.keyvault.v7_5.models.SecretUpdateParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -586,7 +586,7 @@ def update_secret( vault_base_url: str, secret_name: str, secret_version: str, - parameters: IO, + parameters: IO[bytes], *, content_type: str = "application/json", **kwargs: Any @@ -604,13 +604,12 @@ def update_secret( :param secret_version: The version of the secret. Required. :type secret_version: str :param parameters: The parameters for update secret operation. Required. - :type parameters: IO + :type parameters: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -620,7 +619,7 @@ def update_secret( vault_base_url: str, secret_name: str, secret_version: str, - parameters: Union[_models.SecretUpdateParameters, IO], + parameters: Union[_models.SecretUpdateParameters, IO[bytes]], **kwargs: Any ) -> _models.SecretBundle: """Updates the attributes associated with a specified secret in a given key vault. @@ -636,14 +635,13 @@ def update_secret( :param secret_version: The version of the secret. Required. :type secret_version: str :param parameters: The parameters for update secret operation. Is either a - SecretUpdateParameters type or a IO type. Required. - :type parameters: ~key_vault_client.models.SecretUpdateParameters or IO + SecretUpdateParameters type or a IO[bytes] type. Required. + :type parameters: ~azure.keyvault.v7_5.models.SecretUpdateParameters or IO[bytes] :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map = { @@ -655,9 +653,8 @@ def update_secret( error_map.update(kwargs.pop("error_map", {}) or {}) _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.SecretBundle] = kwargs.pop("cls", None) @@ -669,31 +666,31 @@ def update_secret( else: _json = self._serialize.body(parameters, "SecretUpdateParameters") - request = build_update_secret_request( + _request = build_key_vault_update_secret_request( secret_name=secret_name, secret_version=secret_version, - api_version=api_version, content_type=content_type, + api_version=self._config.api_version, json=_json, content=_content, - template_url=self.update_secret.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -701,11 +698,9 @@ def update_secret( deserialized = self._deserialize("SecretBundle", pipeline_response) if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized + return cls(pipeline_response, deserialized, {}) # type: ignore - update_secret.metadata = {"url": "/secrets/{secret-name}/{secret-version}"} + return deserialized # type: ignore @distributed_trace def get_secret( @@ -723,9 +718,8 @@ def get_secret( :param secret_version: The version of the secret. This URI fragment is optional. If not specified, the latest version of the secret is returned. Required. :type secret_version: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map = { @@ -737,33 +731,32 @@ def get_secret( error_map.update(kwargs.pop("error_map", {}) or {}) _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) cls: ClsType[_models.SecretBundle] = kwargs.pop("cls", None) - request = build_get_secret_request( + _request = build_key_vault_get_secret_request( secret_name=secret_name, secret_version=secret_version, - api_version=api_version, - template_url=self.get_secret.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -771,15 +764,13 @@ def get_secret( deserialized = self._deserialize("SecretBundle", pipeline_response) if cls: - return cls(pipeline_response, deserialized, {}) + return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized - - get_secret.metadata = {"url": "/secrets/{secret-name}/{secret-version}"} + return deserialized # type: ignore @distributed_trace def get_secrets( - self, vault_base_url: str, maxresults: Optional[int] = None, **kwargs: Any + self, vault_base_url: str, *, maxresults: Optional[int] = None, **kwargs: Any ) -> Iterable["_models.SecretItem"]: """List secrets in a specified key vault. @@ -789,19 +780,17 @@ def get_secrets( :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. :type vault_base_url: str - :param maxresults: Maximum number of results to return in a page. If not specified, the service - will return up to 25 results. Default value is None. - :type maxresults: int - :keyword callable cls: A custom type or function that will be passed the direct response - :return: An iterator like instance of either SecretItem or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~key_vault_client.models.SecretItem] + :keyword maxresults: Maximum number of results to return in a page. If not specified, the + service will return up to 25 results. Default value is None. + :paramtype maxresults: int + :return: An iterator like instance of SecretItem + :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.v7_5.models.SecretItem] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) - cls: ClsType[_models.SecretListResult] = kwargs.pop("cls", None) + cls: ClsType[_models._models.SecretListResult] = kwargs.pop("cls", None) # pylint: disable=protected-access error_map = { 401: ClientAuthenticationError, @@ -814,18 +803,16 @@ def get_secrets( def prepare_request(next_link=None): if not next_link: - request = build_get_secrets_request( + _request = build_key_vault_get_secrets_request( maxresults=maxresults, - api_version=api_version, - template_url=self.get_secrets.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) else: # make call to next link with the client's api-version @@ -837,34 +824,37 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request def extract_data(pipeline_response): - deserialized = self._deserialize("SecretListResult", pipeline_response) + deserialized = self._deserialize( + _models._models.SecretListResult, pipeline_response # pylint: disable=protected-access + ) list_of_elem = deserialized.value if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.next_link or None, iter(list_of_elem) def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) _stream = False pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -873,11 +863,9 @@ def get_next(next_link=None): return ItemPaged(get_next, extract_data) - get_secrets.metadata = {"url": "/secrets"} - @distributed_trace def get_secret_versions( - self, vault_base_url: str, secret_name: str, maxresults: Optional[int] = None, **kwargs: Any + self, vault_base_url: str, secret_name: str, *, maxresults: Optional[int] = None, **kwargs: Any ) -> Iterable["_models.SecretItem"]: """List all versions of the specified secret. @@ -888,19 +876,17 @@ def get_secret_versions( :type vault_base_url: str :param secret_name: The name of the secret. Required. :type secret_name: str - :param maxresults: Maximum number of results to return in a page. If not specified, the service - will return up to 25 results. Default value is None. - :type maxresults: int - :keyword callable cls: A custom type or function that will be passed the direct response - :return: An iterator like instance of either SecretItem or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~key_vault_client.models.SecretItem] + :keyword maxresults: Maximum number of results to return in a page. If not specified, the + service will return up to 25 results. Default value is None. + :paramtype maxresults: int + :return: An iterator like instance of SecretItem + :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.v7_5.models.SecretItem] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) - cls: ClsType[_models.SecretListResult] = kwargs.pop("cls", None) + cls: ClsType[_models._models.SecretListResult] = kwargs.pop("cls", None) # pylint: disable=protected-access error_map = { 401: ClientAuthenticationError, @@ -913,19 +899,17 @@ def get_secret_versions( def prepare_request(next_link=None): if not next_link: - request = build_get_secret_versions_request( + _request = build_key_vault_get_secret_versions_request( secret_name=secret_name, maxresults=maxresults, - api_version=api_version, - template_url=self.get_secret_versions.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) else: # make call to next link with the client's api-version @@ -937,34 +921,37 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request def extract_data(pipeline_response): - deserialized = self._deserialize("SecretListResult", pipeline_response) + deserialized = self._deserialize( + _models._models.SecretListResult, pipeline_response # pylint: disable=protected-access + ) list_of_elem = deserialized.value if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.next_link or None, iter(list_of_elem) def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) _stream = False pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -973,11 +960,9 @@ def get_next(next_link=None): return ItemPaged(get_next, extract_data) - get_secret_versions.metadata = {"url": "/secrets/{secret-name}/versions"} - @distributed_trace def get_deleted_secrets( - self, vault_base_url: str, maxresults: Optional[int] = None, **kwargs: Any + self, vault_base_url: str, *, maxresults: Optional[int] = None, **kwargs: Any ) -> Iterable["_models.DeletedSecretItem"]: """Lists deleted secrets for the specified vault. @@ -986,19 +971,19 @@ def get_deleted_secrets( :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. :type vault_base_url: str - :param maxresults: Maximum number of results to return in a page. If not specified the service - will return up to 25 results. Default value is None. - :type maxresults: int - :keyword callable cls: A custom type or function that will be passed the direct response - :return: An iterator like instance of either DeletedSecretItem or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~key_vault_client.models.DeletedSecretItem] + :keyword maxresults: Maximum number of results to return in a page. If not specified the + service will return up to 25 results. Default value is None. + :paramtype maxresults: int + :return: An iterator like instance of DeletedSecretItem + :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.v7_5.models.DeletedSecretItem] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) - cls: ClsType[_models.DeletedSecretListResult] = kwargs.pop("cls", None) + cls: ClsType[_models._models.DeletedSecretListResult] = kwargs.pop( # pylint: disable=protected-access + "cls", None + ) error_map = { 401: ClientAuthenticationError, @@ -1011,18 +996,16 @@ def get_deleted_secrets( def prepare_request(next_link=None): if not next_link: - request = build_get_deleted_secrets_request( + _request = build_key_vault_get_deleted_secrets_request( maxresults=maxresults, - api_version=api_version, - template_url=self.get_deleted_secrets.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) else: # make call to next link with the client's api-version @@ -1034,34 +1017,37 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request def extract_data(pipeline_response): - deserialized = self._deserialize("DeletedSecretListResult", pipeline_response) + deserialized = self._deserialize( + _models._models.DeletedSecretListResult, pipeline_response # pylint: disable=protected-access + ) list_of_elem = deserialized.value if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.next_link or None, iter(list_of_elem) def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) _stream = False pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -1070,8 +1056,6 @@ def get_next(next_link=None): return ItemPaged(get_next, extract_data) - get_deleted_secrets.metadata = {"url": "/deletedsecrets"} - @distributed_trace def get_deleted_secret(self, vault_base_url: str, secret_name: str, **kwargs: Any) -> _models.DeletedSecretBundle: """Gets the specified deleted secret. @@ -1083,9 +1067,8 @@ def get_deleted_secret(self, vault_base_url: str, secret_name: str, **kwargs: An :type vault_base_url: str :param secret_name: The name of the secret. Required. :type secret_name: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: DeletedSecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.DeletedSecretBundle + :return: DeletedSecretBundle + :rtype: ~azure.keyvault.v7_5.models.DeletedSecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map = { @@ -1097,32 +1080,31 @@ def get_deleted_secret(self, vault_base_url: str, secret_name: str, **kwargs: An error_map.update(kwargs.pop("error_map", {}) or {}) _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) cls: ClsType[_models.DeletedSecretBundle] = kwargs.pop("cls", None) - request = build_get_deleted_secret_request( + _request = build_key_vault_get_deleted_secret_request( secret_name=secret_name, - api_version=api_version, - template_url=self.get_deleted_secret.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -1130,11 +1112,9 @@ def get_deleted_secret(self, vault_base_url: str, secret_name: str, **kwargs: An deserialized = self._deserialize("DeletedSecretBundle", pipeline_response) if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized + return cls(pipeline_response, deserialized, {}) # type: ignore - get_deleted_secret.metadata = {"url": "/deletedsecrets/{secret-name}"} + return deserialized # type: ignore @distributed_trace def purge_deleted_secret( # pylint: disable=inconsistent-return-statements @@ -1150,8 +1130,7 @@ def purge_deleted_secret( # pylint: disable=inconsistent-return-statements :type vault_base_url: str :param secret_name: The name of the secret. Required. :type secret_name: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: None or the result of cls(response) + :return: None :rtype: None :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1164,40 +1143,37 @@ def purge_deleted_secret( # pylint: disable=inconsistent-return-statements error_map.update(kwargs.pop("error_map", {}) or {}) _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) cls: ClsType[None] = kwargs.pop("cls", None) - request = build_purge_deleted_secret_request( + _request = build_key_vault_purge_deleted_secret_request( secret_name=secret_name, - api_version=api_version, - template_url=self.purge_deleted_secret.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [204]: + if _stream: + response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) if cls: - return cls(pipeline_response, None, {}) - - purge_deleted_secret.metadata = {"url": "/deletedsecrets/{secret-name}"} + return cls(pipeline_response, None, {}) # type: ignore @distributed_trace def recover_deleted_secret(self, vault_base_url: str, secret_name: str, **kwargs: Any) -> _models.SecretBundle: @@ -1210,9 +1186,8 @@ def recover_deleted_secret(self, vault_base_url: str, secret_name: str, **kwargs :type vault_base_url: str :param secret_name: The name of the deleted secret. Required. :type secret_name: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map = { @@ -1224,32 +1199,31 @@ def recover_deleted_secret(self, vault_base_url: str, secret_name: str, **kwargs error_map.update(kwargs.pop("error_map", {}) or {}) _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) cls: ClsType[_models.SecretBundle] = kwargs.pop("cls", None) - request = build_recover_deleted_secret_request( + _request = build_key_vault_recover_deleted_secret_request( secret_name=secret_name, - api_version=api_version, - template_url=self.recover_deleted_secret.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -1257,11 +1231,9 @@ def recover_deleted_secret(self, vault_base_url: str, secret_name: str, **kwargs deserialized = self._deserialize("SecretBundle", pipeline_response) if cls: - return cls(pipeline_response, deserialized, {}) + return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized - - recover_deleted_secret.metadata = {"url": "/deletedsecrets/{secret-name}/recover"} + return deserialized # type: ignore @distributed_trace def backup_secret(self, vault_base_url: str, secret_name: str, **kwargs: Any) -> _models.BackupSecretResult: @@ -1274,9 +1246,8 @@ def backup_secret(self, vault_base_url: str, secret_name: str, **kwargs: Any) -> :type vault_base_url: str :param secret_name: The name of the secret. Required. :type secret_name: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: BackupSecretResult or the result of cls(response) - :rtype: ~key_vault_client.models.BackupSecretResult + :return: BackupSecretResult + :rtype: ~azure.keyvault.v7_5.models.BackupSecretResult :raises ~azure.core.exceptions.HttpResponseError: """ error_map = { @@ -1288,32 +1259,31 @@ def backup_secret(self, vault_base_url: str, secret_name: str, **kwargs: Any) -> error_map.update(kwargs.pop("error_map", {}) or {}) _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) cls: ClsType[_models.BackupSecretResult] = kwargs.pop("cls", None) - request = build_backup_secret_request( + _request = build_key_vault_backup_secret_request( secret_name=secret_name, - api_version=api_version, - template_url=self.backup_secret.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -1321,11 +1291,9 @@ def backup_secret(self, vault_base_url: str, secret_name: str, **kwargs: Any) -> deserialized = self._deserialize("BackupSecretResult", pipeline_response) if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized + return cls(pipeline_response, deserialized, {}) # type: ignore - backup_secret.metadata = {"url": "/secrets/{secret-name}/backup"} + return deserialized # type: ignore @overload def restore_secret( @@ -1344,19 +1312,18 @@ def restore_secret( :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. :type vault_base_url: str :param parameters: The parameters to restore the secret. Required. - :type parameters: ~key_vault_client.models.SecretRestoreParameters + :type parameters: ~azure.keyvault.v7_5.models.SecretRestoreParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ @overload def restore_secret( - self, vault_base_url: str, parameters: IO, *, content_type: str = "application/json", **kwargs: Any + self, vault_base_url: str, parameters: IO[bytes], *, content_type: str = "application/json", **kwargs: Any ) -> _models.SecretBundle: """Restores a backed up secret to a vault. @@ -1366,19 +1333,18 @@ def restore_secret( :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. :type vault_base_url: str :param parameters: The parameters to restore the secret. Required. - :type parameters: IO + :type parameters: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ @distributed_trace def restore_secret( - self, vault_base_url: str, parameters: Union[_models.SecretRestoreParameters, IO], **kwargs: Any + self, vault_base_url: str, parameters: Union[_models.SecretRestoreParameters, IO[bytes]], **kwargs: Any ) -> _models.SecretBundle: """Restores a backed up secret to a vault. @@ -1388,14 +1354,13 @@ def restore_secret( :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. :type vault_base_url: str :param parameters: The parameters to restore the secret. Is either a SecretRestoreParameters - type or a IO type. Required. - :type parameters: ~key_vault_client.models.SecretRestoreParameters or IO + type or a IO[bytes] type. Required. + :type parameters: ~azure.keyvault.v7_5.models.SecretRestoreParameters or IO[bytes] :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map = { @@ -1407,9 +1372,8 @@ def restore_secret( error_map.update(kwargs.pop("error_map", {}) or {}) _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.SecretBundle] = kwargs.pop("cls", None) @@ -1421,29 +1385,29 @@ def restore_secret( else: _json = self._serialize.body(parameters, "SecretRestoreParameters") - request = build_restore_secret_request( - api_version=api_version, + _request = build_key_vault_restore_secret_request( content_type=content_type, + api_version=self._config.api_version, json=_json, content=_content, - template_url=self.restore_secret.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -1451,8 +1415,6 @@ def restore_secret( deserialized = self._deserialize("SecretBundle", pipeline_response) if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized + return cls(pipeline_response, deserialized, {}) # type: ignore - restore_secret.metadata = {"url": "/secrets/restore"} + return deserialized # type: ignore diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/operations/_patch.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_operations/_patch.py similarity index 100% rename from sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/operations/_patch.py rename to sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_operations/_patch.py diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_serialization.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_serialization.py index 9f3e29b11388..baa661cb82d2 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_serialization.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_serialization.py @@ -63,8 +63,8 @@ import isodate # type: ignore -from azure.core.exceptions import DeserializationError, SerializationError, raise_with_traceback -from azure.core.serialization import NULL as AzureCoreNull +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull _BOM = codecs.BOM_UTF8.decode(encoding="utf-8") @@ -124,7 +124,7 @@ def deserialize_from_text(cls, data: Optional[Union[AnyStr, IO]], content_type: pass return ET.fromstring(data_as_str) # nosec - except ET.ParseError: + except ET.ParseError as err: # It might be because the server has an issue, and returned JSON with # content-type XML.... # So let's try a JSON load, and if it's still broken @@ -143,7 +143,7 @@ def _json_attemp(data): # The function hack is because Py2.7 messes up with exception # context otherwise. _LOGGER.critical("Wasn't XML not JSON, failing") - raise_with_traceback(DeserializationError, "XML is invalid") + raise DeserializationError("XML is invalid") from err raise DeserializationError("Cannot deserialize content-type: {}".format(content_type)) @classmethod @@ -295,7 +295,7 @@ class Model(object): _validation: Dict[str, Dict[str, Any]] = {} def __init__(self, **kwargs: Any) -> None: - self.additional_properties: Dict[str, Any] = {} + self.additional_properties: Optional[Dict[str, Any]] = {} for k in kwargs: if k not in self._attribute_map: _LOGGER.warning("%s is not a known attribute of class %s and will be ignored", k, self.__class__) @@ -340,7 +340,7 @@ def _create_xml_node(cls): return _create_xml_node(xml_map.get("name", cls.__name__), xml_map.get("prefix", None), xml_map.get("ns", None)) def serialize(self, keep_readonly: bool = False, **kwargs: Any) -> JSON: - """Return the JSON that would be sent to azure from this model. + """Return the JSON that would be sent to server from this model. This is an alias to `as_dict(full_restapi_key_transformer, keep_readonly=False)`. @@ -351,7 +351,7 @@ def serialize(self, keep_readonly: bool = False, **kwargs: Any) -> JSON: :rtype: dict """ serializer = Serializer(self._infer_class_models()) - return serializer._serialize(self, keep_readonly=keep_readonly, **kwargs) + return serializer._serialize(self, keep_readonly=keep_readonly, **kwargs) # type: ignore def as_dict( self, @@ -390,7 +390,7 @@ def my_key_transformer(key, attr_desc, value): :rtype: dict """ serializer = Serializer(self._infer_class_models()) - return serializer._serialize(self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs) + return serializer._serialize(self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs) # type: ignore @classmethod def _infer_class_models(cls): @@ -415,7 +415,7 @@ def deserialize(cls: Type[ModelType], data: Any, content_type: Optional[str] = N :raises: DeserializationError if something went wrong """ deserializer = Deserializer(cls._infer_class_models()) - return deserializer(cls.__name__, data, content_type=content_type) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore @classmethod def from_dict( @@ -445,7 +445,7 @@ def from_dict( if key_extractors is None else key_extractors ) - return deserializer(cls.__name__, data, content_type=content_type) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore @classmethod def _flatten_subtype(cls, key, objects): @@ -668,7 +668,7 @@ def _serialize(self, target_obj, data_type=None, **kwargs): except (AttributeError, KeyError, TypeError) as err: msg = "Attribute {} in object {} cannot be serialized.\n{}".format(attr_name, class_name, str(target_obj)) - raise_with_traceback(SerializationError, msg, err) + raise SerializationError(msg) from err else: return serialized @@ -710,7 +710,7 @@ def body(self, data, data_type, **kwargs): ] data = deserializer._deserialize(data_type, data) except DeserializationError as err: - raise_with_traceback(SerializationError, "Unable to build a model: " + str(err), err) + raise SerializationError("Unable to build a model: " + str(err)) from err return self._serialize(data, data_type, **kwargs) @@ -730,7 +730,6 @@ def url(self, name, data, data_type, **kwargs): if kwargs.get("skip_quote") is True: output = str(output) - # https://github.com/Azure/autorest.python/issues/2063 output = output.replace("{", quote("{")).replace("}", quote("}")) else: output = quote(str(output), safe="") @@ -746,7 +745,7 @@ def query(self, name, data, data_type, **kwargs): :param str data_type: The type to be serialized from. :keyword bool skip_quote: Whether to skip quote the serialized result. Defaults to False. - :rtype: str + :rtype: str, list :raises: TypeError if serialization fails. :raises: ValueError if data is None """ @@ -755,7 +754,7 @@ def query(self, name, data, data_type, **kwargs): if data_type.startswith("["): internal_data_type = data_type[1:-1] do_quote = not kwargs.get("skip_quote", False) - return str(self.serialize_iter(data, internal_data_type, do_quote=do_quote, **kwargs)) + return self.serialize_iter(data, internal_data_type, do_quote=do_quote, **kwargs) # Not a list, regular serialization output = self.serialize_data(data, data_type, **kwargs) @@ -806,7 +805,7 @@ def serialize_data(self, data, data_type, **kwargs): raise ValueError("No value for given attribute") try: - if data is AzureCoreNull: + if data is CoreNull: return None if data_type in self.basic_types.values(): return self.serialize_basic(data, data_type, **kwargs) @@ -826,7 +825,7 @@ def serialize_data(self, data, data_type, **kwargs): except (ValueError, TypeError) as err: msg = "Unable to serialize value: {!r} as type: {!r}." - raise_with_traceback(SerializationError, msg.format(data, data_type), err) + raise SerializationError(msg.format(data, data_type)) from err else: return self._serialize(data, **kwargs) @@ -1172,10 +1171,10 @@ def serialize_iso(attr, **kwargs): return date + microseconds + "Z" except (ValueError, OverflowError) as err: msg = "Unable to serialize datetime object." - raise_with_traceback(SerializationError, msg, err) + raise SerializationError(msg) from err except AttributeError as err: msg = "ISO-8601 object must be valid Datetime object." - raise_with_traceback(TypeError, msg, err) + raise TypeError(msg) from err @staticmethod def serialize_unix(attr, **kwargs): @@ -1211,7 +1210,6 @@ def rest_key_extractor(attr, attr_desc, data): if working_data is None: # If at any point while following flatten JSON path see None, it means # that all properties under are None as well - # https://github.com/Azure/msrest-for-python/issues/197 return None key = ".".join(dict_keys[1:]) @@ -1232,7 +1230,6 @@ def rest_key_case_insensitive_extractor(attr, attr_desc, data): if working_data is None: # If at any point while following flatten JSON path see None, it means # that all properties under are None as well - # https://github.com/Azure/msrest-for-python/issues/197 return None key = ".".join(dict_keys[1:]) @@ -1483,7 +1480,7 @@ def _deserialize(self, target_obj, data): d_attrs[attr] = value except (AttributeError, TypeError, KeyError) as err: msg = "Unable to deserialize to object: " + class_name # type: ignore - raise_with_traceback(DeserializationError, msg, err) + raise DeserializationError(msg) from err else: additional_properties = self._build_additional_properties(attributes, data) return self._instantiate_model(response, d_attrs, additional_properties) @@ -1654,7 +1651,7 @@ def deserialize_data(self, data, data_type): except (ValueError, TypeError, AttributeError) as err: msg = "Unable to deserialize response data." msg += " Data: {}, {}".format(data, data_type) - raise_with_traceback(DeserializationError, msg, err) + raise DeserializationError(msg) from err else: return self._deserialize(obj_type, data) @@ -1810,7 +1807,6 @@ def deserialize_enum(data, enum_obj): data = data.value if isinstance(data, int): # Workaround. We might consider remove it in the future. - # https://github.com/Azure/azure-rest-api-specs/issues/141 try: return list(enum_obj.__members__.values())[data] except IndexError: @@ -1864,10 +1860,10 @@ def deserialize_decimal(attr): if isinstance(attr, ET.Element): attr = attr.text try: - return decimal.Decimal(attr) # type: ignore + return decimal.Decimal(str(attr)) # type: ignore except decimal.DecimalException as err: msg = "Invalid decimal {}".format(attr) - raise_with_traceback(DeserializationError, msg, err) + raise DeserializationError(msg) from err @staticmethod def deserialize_long(attr): @@ -1895,7 +1891,7 @@ def deserialize_duration(attr): duration = isodate.parse_duration(attr) except (ValueError, OverflowError, AttributeError) as err: msg = "Cannot deserialize duration object." - raise_with_traceback(DeserializationError, msg, err) + raise DeserializationError(msg) from err else: return duration @@ -1947,7 +1943,7 @@ def deserialize_rfc(attr): date_obj = date_obj.astimezone(tz=TZ_UTC) except ValueError as err: msg = "Cannot deserialize to rfc datetime object." - raise_with_traceback(DeserializationError, msg, err) + raise DeserializationError(msg) from err else: return date_obj @@ -1984,7 +1980,7 @@ def deserialize_iso(attr): raise OverflowError("Hit max or min date") except (ValueError, OverflowError, AttributeError) as err: msg = "Cannot deserialize datetime object." - raise_with_traceback(DeserializationError, msg, err) + raise DeserializationError(msg) from err else: return date_obj @@ -2000,9 +1996,10 @@ def deserialize_unix(attr): if isinstance(attr, ET.Element): attr = int(attr.text) # type: ignore try: + attr = int(attr) date_obj = datetime.datetime.fromtimestamp(attr, TZ_UTC) except ValueError as err: msg = "Cannot deserialize to unix datetime object." - raise_with_traceback(DeserializationError, msg, err) + raise DeserializationError(msg) from err else: return date_obj diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_vendor.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_vendor.py index a6bd460be3fc..db923753c642 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_vendor.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/_vendor.py @@ -8,8 +8,6 @@ from abc import ABC from typing import TYPE_CHECKING -from azure.core.pipeline.transport import HttpRequest - from ._configuration import KeyVaultClientConfiguration if TYPE_CHECKING: @@ -19,14 +17,6 @@ from ._serialization import Deserializer, Serializer -def _convert_request(request, files=None): - data = request.content if not files else None - request = HttpRequest(method=request.method, url=request.url, headers=request.headers, data=data) - if files: - request.set_formdata_body(files) - return request - - class KeyVaultClientMixinABC(ABC): """DO NOT use this class. It is for internal typing use only.""" diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/__init__.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/__init__.py index 1414715b988c..1e535724e551 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/__init__.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/__init__.py @@ -6,7 +6,7 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from ._key_vault_client import KeyVaultClient +from ._client import KeyVaultClient try: from ._patch import __all__ as _patch_all diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_key_vault_client.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_client.py similarity index 62% rename from sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_key_vault_client.py rename to sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_client.py index 3dc4b695557f..f017310ad823 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_key_vault_client.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_client.py @@ -10,40 +10,61 @@ from typing import Any, Awaitable from azure.core import AsyncPipelineClient +from azure.core.pipeline import policies from azure.core.rest import AsyncHttpResponse, HttpRequest from .. import models as _models from .._serialization import Deserializer, Serializer from ._configuration import KeyVaultClientConfiguration -from .operations import KeyVaultClientOperationsMixin +from ._operations import KeyVaultClientOperationsMixin class KeyVaultClient(KeyVaultClientOperationsMixin): # pylint: disable=client-accepts-api-version-keyword """The key vault client performs cryptographic key operations and vault operations against the Key Vault service. - :keyword api_version: Api Version. Default value is "7.5-preview.1". Note that overriding this - default value may result in unsupported behavior. + :keyword api_version: Api Version. Default value is "7.5". Note that overriding this default + value may result in unsupported behavior. :paramtype api_version: str """ def __init__(self, **kwargs: Any) -> None: # pylint: disable=missing-client-constructor-parameter-credential _endpoint = "{vaultBaseUrl}" self._config = KeyVaultClientConfiguration(**kwargs) - self._client: AsyncPipelineClient = AsyncPipelineClient(base_url=_endpoint, config=self._config, **kwargs) - - client_models = {k: v for k, v in _models.__dict__.items() if isinstance(v, type)} + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: AsyncPipelineClient = AsyncPipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + client_models = {k: v for k, v in _models._models.__dict__.items() if isinstance(v, type)} + client_models.update({k: v for k, v in _models.__dict__.items() if isinstance(v, type)}) self._serialize = Serializer(client_models) self._deserialize = Deserializer(client_models) self._serialize.client_side_validation = False - def _send_request(self, request: HttpRequest, **kwargs: Any) -> Awaitable[AsyncHttpResponse]: + def send_request( + self, request: HttpRequest, *, stream: bool = False, **kwargs: Any + ) -> Awaitable[AsyncHttpResponse]: """Runs the network request through the client's chained policies. >>> from azure.core.rest import HttpRequest >>> request = HttpRequest("GET", "https://www.example.org/") - >>> response = await client._send_request(request) + >>> response = await client.send_request(request) For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request @@ -57,7 +78,7 @@ def _send_request(self, request: HttpRequest, **kwargs: Any) -> Awaitable[AsyncH request_copy = deepcopy(request) request_copy.url = self._client.format_url(request_copy.url) - return self._client.send_request(request_copy, **kwargs) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore async def close(self) -> None: await self._client.close() diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_configuration.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_configuration.py index 15e0fb38b540..8dd6125e8e1d 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_configuration.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_configuration.py @@ -8,29 +8,28 @@ from typing import Any -from azure.core.configuration import Configuration from azure.core.pipeline import policies VERSION = "unknown" -class KeyVaultClientConfiguration(Configuration): # pylint: disable=too-many-instance-attributes +class KeyVaultClientConfiguration: # pylint: disable=too-many-instance-attributes """Configuration for KeyVaultClient. Note that all parameters used to create this instance are saved as instance attributes. - :keyword api_version: Api Version. Default value is "7.5-preview.1". Note that overriding this - default value may result in unsupported behavior. + :keyword api_version: Api Version. Default value is "7.5". Note that overriding this default + value may result in unsupported behavior. :paramtype api_version: str """ def __init__(self, **kwargs: Any) -> None: - super(KeyVaultClientConfiguration, self).__init__(**kwargs) - api_version: str = kwargs.pop("api_version", "7.5-preview.1") + api_version: str = kwargs.pop("api_version", "7.5") self.api_version = api_version kwargs.setdefault("sdk_moniker", "keyvault/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) self._configure(**kwargs) def _configure(self, **kwargs: Any) -> None: @@ -39,7 +38,7 @@ def _configure(self, **kwargs: Any) -> None: self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) - self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs) self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) self.redirect_policy = kwargs.get("redirect_policy") or policies.AsyncRedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs) self.authentication_policy = kwargs.get("authentication_policy") diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/operations/__init__.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_operations/__init__.py similarity index 91% rename from sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/operations/__init__.py rename to sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_operations/__init__.py index 15aeb155c95e..29ea96fccbfe 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/operations/__init__.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_operations/__init__.py @@ -6,7 +6,7 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from ._key_vault_client_operations import KeyVaultClientOperationsMixin +from ._operations import KeyVaultClientOperationsMixin from ._patch import __all__ as _patch_all from ._patch import * # pylint: disable=unused-wildcard-import diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/operations/_key_vault_client_operations.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_operations/_operations.py similarity index 70% rename from sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/operations/_key_vault_client_operations.py rename to sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_operations/_operations.py index 28013303f4fa..3b052a18fab6 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/operations/_key_vault_client_operations.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=too-many-lines,too-many-statements # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -20,27 +20,25 @@ map_error, ) from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import AsyncHttpResponse -from azure.core.rest import HttpRequest +from azure.core.rest import AsyncHttpResponse, HttpRequest from azure.core.tracing.decorator import distributed_trace from azure.core.tracing.decorator_async import distributed_trace_async from azure.core.utils import case_insensitive_dict from ... import models as _models -from ..._vendor import _convert_request -from ...operations._key_vault_client_operations import ( - build_backup_secret_request, - build_delete_secret_request, - build_get_deleted_secret_request, - build_get_deleted_secrets_request, - build_get_secret_request, - build_get_secret_versions_request, - build_get_secrets_request, - build_purge_deleted_secret_request, - build_recover_deleted_secret_request, - build_restore_secret_request, - build_set_secret_request, - build_update_secret_request, +from ..._operations._operations import ( + build_key_vault_backup_secret_request, + build_key_vault_delete_secret_request, + build_key_vault_get_deleted_secret_request, + build_key_vault_get_deleted_secrets_request, + build_key_vault_get_secret_request, + build_key_vault_get_secret_versions_request, + build_key_vault_get_secrets_request, + build_key_vault_purge_deleted_secret_request, + build_key_vault_recover_deleted_secret_request, + build_key_vault_restore_secret_request, + build_key_vault_set_secret_request, + build_key_vault_update_secret_request, ) from .._vendor import KeyVaultClientMixinABC @@ -72,13 +70,12 @@ async def set_secret( identifiable or sensitive information. Required. :type secret_name: str :param parameters: The parameters for setting the secret. Required. - :type parameters: ~key_vault_client.models.SecretSetParameters + :type parameters: ~azure.keyvault.v7_5.models.SecretSetParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -87,7 +84,7 @@ async def set_secret( self, vault_base_url: str, secret_name: str, - parameters: IO, + parameters: IO[bytes], *, content_type: str = "application/json", **kwargs: Any @@ -105,19 +102,22 @@ async def set_secret( identifiable or sensitive information. Required. :type secret_name: str :param parameters: The parameters for setting the secret. Required. - :type parameters: IO + :type parameters: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ @distributed_trace_async async def set_secret( - self, vault_base_url: str, secret_name: str, parameters: Union[_models.SecretSetParameters, IO], **kwargs: Any + self, + vault_base_url: str, + secret_name: str, + parameters: Union[_models.SecretSetParameters, IO[bytes]], + **kwargs: Any ) -> _models.SecretBundle: """Sets a secret in a specified key vault. @@ -132,14 +132,13 @@ async def set_secret( identifiable or sensitive information. Required. :type secret_name: str :param parameters: The parameters for setting the secret. Is either a SecretSetParameters type - or a IO type. Required. - :type parameters: ~key_vault_client.models.SecretSetParameters or IO + or a IO[bytes] type. Required. + :type parameters: ~azure.keyvault.v7_5.models.SecretSetParameters or IO[bytes] :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map = { @@ -151,9 +150,8 @@ async def set_secret( error_map.update(kwargs.pop("error_map", {}) or {}) _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.SecretBundle] = kwargs.pop("cls", None) @@ -165,30 +163,30 @@ async def set_secret( else: _json = self._serialize.body(parameters, "SecretSetParameters") - request = build_set_secret_request( + _request = build_key_vault_set_secret_request( secret_name=secret_name, - api_version=api_version, content_type=content_type, + api_version=self._config.api_version, json=_json, content=_content, - template_url=self.set_secret.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + await response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -196,11 +194,9 @@ async def set_secret( deserialized = self._deserialize("SecretBundle", pipeline_response) if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized + return cls(pipeline_response, deserialized, {}) # type: ignore - set_secret.metadata = {"url": "/secrets/{secret-name}"} + return deserialized # type: ignore @distributed_trace_async async def delete_secret(self, vault_base_url: str, secret_name: str, **kwargs: Any) -> _models.DeletedSecretBundle: @@ -213,9 +209,8 @@ async def delete_secret(self, vault_base_url: str, secret_name: str, **kwargs: A :type vault_base_url: str :param secret_name: The name of the secret. Required. :type secret_name: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: DeletedSecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.DeletedSecretBundle + :return: DeletedSecretBundle + :rtype: ~azure.keyvault.v7_5.models.DeletedSecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map = { @@ -227,32 +222,31 @@ async def delete_secret(self, vault_base_url: str, secret_name: str, **kwargs: A error_map.update(kwargs.pop("error_map", {}) or {}) _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) cls: ClsType[_models.DeletedSecretBundle] = kwargs.pop("cls", None) - request = build_delete_secret_request( + _request = build_key_vault_delete_secret_request( secret_name=secret_name, - api_version=api_version, - template_url=self.delete_secret.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + await response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -260,11 +254,9 @@ async def delete_secret(self, vault_base_url: str, secret_name: str, **kwargs: A deserialized = self._deserialize("DeletedSecretBundle", pipeline_response) if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized + return cls(pipeline_response, deserialized, {}) # type: ignore - delete_secret.metadata = {"url": "/secrets/{secret-name}"} + return deserialized # type: ignore @overload async def update_secret( @@ -290,13 +282,12 @@ async def update_secret( :param secret_version: The version of the secret. Required. :type secret_version: str :param parameters: The parameters for update secret operation. Required. - :type parameters: ~key_vault_client.models.SecretUpdateParameters + :type parameters: ~azure.keyvault.v7_5.models.SecretUpdateParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -306,7 +297,7 @@ async def update_secret( vault_base_url: str, secret_name: str, secret_version: str, - parameters: IO, + parameters: IO[bytes], *, content_type: str = "application/json", **kwargs: Any @@ -324,13 +315,12 @@ async def update_secret( :param secret_version: The version of the secret. Required. :type secret_version: str :param parameters: The parameters for update secret operation. Required. - :type parameters: IO + :type parameters: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -340,7 +330,7 @@ async def update_secret( vault_base_url: str, secret_name: str, secret_version: str, - parameters: Union[_models.SecretUpdateParameters, IO], + parameters: Union[_models.SecretUpdateParameters, IO[bytes]], **kwargs: Any ) -> _models.SecretBundle: """Updates the attributes associated with a specified secret in a given key vault. @@ -356,14 +346,13 @@ async def update_secret( :param secret_version: The version of the secret. Required. :type secret_version: str :param parameters: The parameters for update secret operation. Is either a - SecretUpdateParameters type or a IO type. Required. - :type parameters: ~key_vault_client.models.SecretUpdateParameters or IO + SecretUpdateParameters type or a IO[bytes] type. Required. + :type parameters: ~azure.keyvault.v7_5.models.SecretUpdateParameters or IO[bytes] :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map = { @@ -375,9 +364,8 @@ async def update_secret( error_map.update(kwargs.pop("error_map", {}) or {}) _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.SecretBundle] = kwargs.pop("cls", None) @@ -389,31 +377,31 @@ async def update_secret( else: _json = self._serialize.body(parameters, "SecretUpdateParameters") - request = build_update_secret_request( + _request = build_key_vault_update_secret_request( secret_name=secret_name, secret_version=secret_version, - api_version=api_version, content_type=content_type, + api_version=self._config.api_version, json=_json, content=_content, - template_url=self.update_secret.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + await response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -421,11 +409,9 @@ async def update_secret( deserialized = self._deserialize("SecretBundle", pipeline_response) if cls: - return cls(pipeline_response, deserialized, {}) + return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized - - update_secret.metadata = {"url": "/secrets/{secret-name}/{secret-version}"} + return deserialized # type: ignore @distributed_trace_async async def get_secret( @@ -443,9 +429,8 @@ async def get_secret( :param secret_version: The version of the secret. This URI fragment is optional. If not specified, the latest version of the secret is returned. Required. :type secret_version: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map = { @@ -457,33 +442,32 @@ async def get_secret( error_map.update(kwargs.pop("error_map", {}) or {}) _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) cls: ClsType[_models.SecretBundle] = kwargs.pop("cls", None) - request = build_get_secret_request( + _request = build_key_vault_get_secret_request( secret_name=secret_name, secret_version=secret_version, - api_version=api_version, - template_url=self.get_secret.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + await response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -491,15 +475,13 @@ async def get_secret( deserialized = self._deserialize("SecretBundle", pipeline_response) if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized + return cls(pipeline_response, deserialized, {}) # type: ignore - get_secret.metadata = {"url": "/secrets/{secret-name}/{secret-version}"} + return deserialized # type: ignore @distributed_trace def get_secrets( - self, vault_base_url: str, maxresults: Optional[int] = None, **kwargs: Any + self, vault_base_url: str, *, maxresults: Optional[int] = None, **kwargs: Any ) -> AsyncIterable["_models.SecretItem"]: """List secrets in a specified key vault. @@ -509,19 +491,17 @@ def get_secrets( :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. :type vault_base_url: str - :param maxresults: Maximum number of results to return in a page. If not specified, the service - will return up to 25 results. Default value is None. - :type maxresults: int - :keyword callable cls: A custom type or function that will be passed the direct response - :return: An iterator like instance of either SecretItem or the result of cls(response) - :rtype: ~azure.core.async_paging.AsyncItemPaged[~key_vault_client.models.SecretItem] + :keyword maxresults: Maximum number of results to return in a page. If not specified, the + service will return up to 25 results. Default value is None. + :paramtype maxresults: int + :return: An iterator like instance of SecretItem + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_5.models.SecretItem] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) - cls: ClsType[_models.SecretListResult] = kwargs.pop("cls", None) + cls: ClsType[_models._models.SecretListResult] = kwargs.pop("cls", None) # pylint: disable=protected-access error_map = { 401: ClientAuthenticationError, @@ -534,18 +514,16 @@ def get_secrets( def prepare_request(next_link=None): if not next_link: - request = build_get_secrets_request( + _request = build_key_vault_get_secrets_request( maxresults=maxresults, - api_version=api_version, - template_url=self.get_secrets.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) else: # make call to next link with the client's api-version @@ -557,34 +535,37 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request async def extract_data(pipeline_response): - deserialized = self._deserialize("SecretListResult", pipeline_response) + deserialized = self._deserialize( + _models._models.SecretListResult, pipeline_response # pylint: disable=protected-access + ) list_of_elem = deserialized.value if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.next_link or None, AsyncList(list_of_elem) async def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) _stream = False pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + await response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -593,11 +574,9 @@ async def get_next(next_link=None): return AsyncItemPaged(get_next, extract_data) - get_secrets.metadata = {"url": "/secrets"} - @distributed_trace def get_secret_versions( - self, vault_base_url: str, secret_name: str, maxresults: Optional[int] = None, **kwargs: Any + self, vault_base_url: str, secret_name: str, *, maxresults: Optional[int] = None, **kwargs: Any ) -> AsyncIterable["_models.SecretItem"]: """List all versions of the specified secret. @@ -608,19 +587,17 @@ def get_secret_versions( :type vault_base_url: str :param secret_name: The name of the secret. Required. :type secret_name: str - :param maxresults: Maximum number of results to return in a page. If not specified, the service - will return up to 25 results. Default value is None. - :type maxresults: int - :keyword callable cls: A custom type or function that will be passed the direct response - :return: An iterator like instance of either SecretItem or the result of cls(response) - :rtype: ~azure.core.async_paging.AsyncItemPaged[~key_vault_client.models.SecretItem] + :keyword maxresults: Maximum number of results to return in a page. If not specified, the + service will return up to 25 results. Default value is None. + :paramtype maxresults: int + :return: An iterator like instance of SecretItem + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_5.models.SecretItem] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) - cls: ClsType[_models.SecretListResult] = kwargs.pop("cls", None) + cls: ClsType[_models._models.SecretListResult] = kwargs.pop("cls", None) # pylint: disable=protected-access error_map = { 401: ClientAuthenticationError, @@ -633,19 +610,17 @@ def get_secret_versions( def prepare_request(next_link=None): if not next_link: - request = build_get_secret_versions_request( + _request = build_key_vault_get_secret_versions_request( secret_name=secret_name, maxresults=maxresults, - api_version=api_version, - template_url=self.get_secret_versions.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) else: # make call to next link with the client's api-version @@ -657,34 +632,37 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request async def extract_data(pipeline_response): - deserialized = self._deserialize("SecretListResult", pipeline_response) + deserialized = self._deserialize( + _models._models.SecretListResult, pipeline_response # pylint: disable=protected-access + ) list_of_elem = deserialized.value if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.next_link or None, AsyncList(list_of_elem) async def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) _stream = False pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + await response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -693,11 +671,9 @@ async def get_next(next_link=None): return AsyncItemPaged(get_next, extract_data) - get_secret_versions.metadata = {"url": "/secrets/{secret-name}/versions"} - @distributed_trace def get_deleted_secrets( - self, vault_base_url: str, maxresults: Optional[int] = None, **kwargs: Any + self, vault_base_url: str, *, maxresults: Optional[int] = None, **kwargs: Any ) -> AsyncIterable["_models.DeletedSecretItem"]: """Lists deleted secrets for the specified vault. @@ -706,19 +682,19 @@ def get_deleted_secrets( :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. :type vault_base_url: str - :param maxresults: Maximum number of results to return in a page. If not specified the service - will return up to 25 results. Default value is None. - :type maxresults: int - :keyword callable cls: A custom type or function that will be passed the direct response - :return: An iterator like instance of either DeletedSecretItem or the result of cls(response) - :rtype: ~azure.core.async_paging.AsyncItemPaged[~key_vault_client.models.DeletedSecretItem] + :keyword maxresults: Maximum number of results to return in a page. If not specified the + service will return up to 25 results. Default value is None. + :paramtype maxresults: int + :return: An iterator like instance of DeletedSecretItem + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.v7_5.models.DeletedSecretItem] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) - cls: ClsType[_models.DeletedSecretListResult] = kwargs.pop("cls", None) + cls: ClsType[_models._models.DeletedSecretListResult] = kwargs.pop( # pylint: disable=protected-access + "cls", None + ) error_map = { 401: ClientAuthenticationError, @@ -731,18 +707,16 @@ def get_deleted_secrets( def prepare_request(next_link=None): if not next_link: - request = build_get_deleted_secrets_request( + _request = build_key_vault_get_deleted_secrets_request( maxresults=maxresults, - api_version=api_version, - template_url=self.get_deleted_secrets.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) else: # make call to next link with the client's api-version @@ -754,34 +728,37 @@ def prepare_request(next_link=None): } ) _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( + _request = HttpRequest( "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) - request.method = "GET" - return request + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request async def extract_data(pipeline_response): - deserialized = self._deserialize("DeletedSecretListResult", pipeline_response) + deserialized = self._deserialize( + _models._models.DeletedSecretListResult, pipeline_response # pylint: disable=protected-access + ) list_of_elem = deserialized.value if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.next_link or None, AsyncList(list_of_elem) async def get_next(next_link=None): - request = prepare_request(next_link) + _request = prepare_request(next_link) _stream = False pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + await response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -790,8 +767,6 @@ async def get_next(next_link=None): return AsyncItemPaged(get_next, extract_data) - get_deleted_secrets.metadata = {"url": "/deletedsecrets"} - @distributed_trace_async async def get_deleted_secret( self, vault_base_url: str, secret_name: str, **kwargs: Any @@ -805,9 +780,8 @@ async def get_deleted_secret( :type vault_base_url: str :param secret_name: The name of the secret. Required. :type secret_name: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: DeletedSecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.DeletedSecretBundle + :return: DeletedSecretBundle + :rtype: ~azure.keyvault.v7_5.models.DeletedSecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map = { @@ -819,32 +793,31 @@ async def get_deleted_secret( error_map.update(kwargs.pop("error_map", {}) or {}) _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) cls: ClsType[_models.DeletedSecretBundle] = kwargs.pop("cls", None) - request = build_get_deleted_secret_request( + _request = build_key_vault_get_deleted_secret_request( secret_name=secret_name, - api_version=api_version, - template_url=self.get_deleted_secret.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + await response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -852,11 +825,9 @@ async def get_deleted_secret( deserialized = self._deserialize("DeletedSecretBundle", pipeline_response) if cls: - return cls(pipeline_response, deserialized, {}) + return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized - - get_deleted_secret.metadata = {"url": "/deletedsecrets/{secret-name}"} + return deserialized # type: ignore @distributed_trace_async async def purge_deleted_secret( # pylint: disable=inconsistent-return-statements @@ -872,8 +843,7 @@ async def purge_deleted_secret( # pylint: disable=inconsistent-return-statement :type vault_base_url: str :param secret_name: The name of the secret. Required. :type secret_name: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: None or the result of cls(response) + :return: None :rtype: None :raises ~azure.core.exceptions.HttpResponseError: """ @@ -886,40 +856,37 @@ async def purge_deleted_secret( # pylint: disable=inconsistent-return-statement error_map.update(kwargs.pop("error_map", {}) or {}) _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) cls: ClsType[None] = kwargs.pop("cls", None) - request = build_purge_deleted_secret_request( + _request = build_key_vault_purge_deleted_secret_request( secret_name=secret_name, - api_version=api_version, - template_url=self.purge_deleted_secret.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [204]: + if _stream: + await response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) if cls: - return cls(pipeline_response, None, {}) - - purge_deleted_secret.metadata = {"url": "/deletedsecrets/{secret-name}"} + return cls(pipeline_response, None, {}) # type: ignore @distributed_trace_async async def recover_deleted_secret( @@ -934,9 +901,8 @@ async def recover_deleted_secret( :type vault_base_url: str :param secret_name: The name of the deleted secret. Required. :type secret_name: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map = { @@ -948,32 +914,31 @@ async def recover_deleted_secret( error_map.update(kwargs.pop("error_map", {}) or {}) _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) cls: ClsType[_models.SecretBundle] = kwargs.pop("cls", None) - request = build_recover_deleted_secret_request( + _request = build_key_vault_recover_deleted_secret_request( secret_name=secret_name, - api_version=api_version, - template_url=self.recover_deleted_secret.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + await response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -981,11 +946,9 @@ async def recover_deleted_secret( deserialized = self._deserialize("SecretBundle", pipeline_response) if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized + return cls(pipeline_response, deserialized, {}) # type: ignore - recover_deleted_secret.metadata = {"url": "/deletedsecrets/{secret-name}/recover"} + return deserialized # type: ignore @distributed_trace_async async def backup_secret(self, vault_base_url: str, secret_name: str, **kwargs: Any) -> _models.BackupSecretResult: @@ -998,9 +961,8 @@ async def backup_secret(self, vault_base_url: str, secret_name: str, **kwargs: A :type vault_base_url: str :param secret_name: The name of the secret. Required. :type secret_name: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: BackupSecretResult or the result of cls(response) - :rtype: ~key_vault_client.models.BackupSecretResult + :return: BackupSecretResult + :rtype: ~azure.keyvault.v7_5.models.BackupSecretResult :raises ~azure.core.exceptions.HttpResponseError: """ error_map = { @@ -1012,32 +974,31 @@ async def backup_secret(self, vault_base_url: str, secret_name: str, **kwargs: A error_map.update(kwargs.pop("error_map", {}) or {}) _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) cls: ClsType[_models.BackupSecretResult] = kwargs.pop("cls", None) - request = build_backup_secret_request( + _request = build_key_vault_backup_secret_request( secret_name=secret_name, - api_version=api_version, - template_url=self.backup_secret.metadata["url"], + api_version=self._config.api_version, headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + await response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -1045,11 +1006,9 @@ async def backup_secret(self, vault_base_url: str, secret_name: str, **kwargs: A deserialized = self._deserialize("BackupSecretResult", pipeline_response) if cls: - return cls(pipeline_response, deserialized, {}) + return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized - - backup_secret.metadata = {"url": "/secrets/{secret-name}/backup"} + return deserialized # type: ignore @overload async def restore_secret( @@ -1068,19 +1027,18 @@ async def restore_secret( :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. :type vault_base_url: str :param parameters: The parameters to restore the secret. Required. - :type parameters: ~key_vault_client.models.SecretRestoreParameters + :type parameters: ~azure.keyvault.v7_5.models.SecretRestoreParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ @overload async def restore_secret( - self, vault_base_url: str, parameters: IO, *, content_type: str = "application/json", **kwargs: Any + self, vault_base_url: str, parameters: IO[bytes], *, content_type: str = "application/json", **kwargs: Any ) -> _models.SecretBundle: """Restores a backed up secret to a vault. @@ -1090,19 +1048,18 @@ async def restore_secret( :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. :type vault_base_url: str :param parameters: The parameters to restore the secret. Required. - :type parameters: IO + :type parameters: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. Default value is "application/json". :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ @distributed_trace_async async def restore_secret( - self, vault_base_url: str, parameters: Union[_models.SecretRestoreParameters, IO], **kwargs: Any + self, vault_base_url: str, parameters: Union[_models.SecretRestoreParameters, IO[bytes]], **kwargs: Any ) -> _models.SecretBundle: """Restores a backed up secret to a vault. @@ -1112,14 +1069,13 @@ async def restore_secret( :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. :type vault_base_url: str :param parameters: The parameters to restore the secret. Is either a SecretRestoreParameters - type or a IO type. Required. - :type parameters: ~key_vault_client.models.SecretRestoreParameters or IO + type or a IO[bytes] type. Required. + :type parameters: ~azure.keyvault.v7_5.models.SecretRestoreParameters or IO[bytes] :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: SecretBundle or the result of cls(response) - :rtype: ~key_vault_client.models.SecretBundle + :return: SecretBundle + :rtype: ~azure.keyvault.v7_5.models.SecretBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map = { @@ -1131,9 +1087,8 @@ async def restore_secret( error_map.update(kwargs.pop("error_map", {}) or {}) _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + _params = kwargs.pop("params", {}) or {} - api_version: str = kwargs.pop("api_version", _params.pop("api-version", self._config.api_version)) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[_models.SecretBundle] = kwargs.pop("cls", None) @@ -1145,29 +1100,29 @@ async def restore_secret( else: _json = self._serialize.body(parameters, "SecretRestoreParameters") - request = build_restore_secret_request( - api_version=api_version, + _request = build_key_vault_restore_secret_request( content_type=content_type, + api_version=self._config.api_version, json=_json, content=_content, - template_url=self.restore_secret.metadata["url"], headers=_headers, params=_params, ) - request = _convert_request(request) path_format_arguments = { "vaultBaseUrl": self._serialize.url("vault_base_url", vault_base_url, "str", skip_quote=True), } - request.url = self._client.format_url(request.url, **path_format_arguments) + _request.url = self._client.format_url(_request.url, **path_format_arguments) _stream = False pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, stream=_stream, **kwargs + _request, stream=_stream, **kwargs ) response = pipeline_response.http_response if response.status_code not in [200]: + if _stream: + await response.read() # Load the body in memory and close the socket map_error(status_code=response.status_code, response=response, error_map=error_map) error = self._deserialize.failsafe_deserialize(_models.KeyVaultError, pipeline_response) raise HttpResponseError(response=response, model=error) @@ -1175,8 +1130,6 @@ async def restore_secret( deserialized = self._deserialize("SecretBundle", pipeline_response) if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized + return cls(pipeline_response, deserialized, {}) # type: ignore - restore_secret.metadata = {"url": "/secrets/restore"} + return deserialized # type: ignore diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/operations/_patch.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_operations/_patch.py similarity index 100% rename from sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/operations/_patch.py rename to sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_operations/_patch.py diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_vendor.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_vendor.py index 111bdf8bf447..92c6d827acd9 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_vendor.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/aio/_vendor.py @@ -8,8 +8,6 @@ from abc import ABC from typing import TYPE_CHECKING -from azure.core.pipeline.transport import HttpRequest - from ._configuration import KeyVaultClientConfiguration if TYPE_CHECKING: diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/models/__init__.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/models/__init__.py index 94ee65b5cc01..cd1acd6f066f 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/models/__init__.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/models/__init__.py @@ -6,23 +6,21 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from ._models_py3 import Attributes -from ._models_py3 import BackupSecretResult -from ._models_py3 import DeletedSecretBundle -from ._models_py3 import DeletedSecretItem -from ._models_py3 import DeletedSecretListResult -from ._models_py3 import Error -from ._models_py3 import KeyVaultError -from ._models_py3 import SecretAttributes -from ._models_py3 import SecretBundle -from ._models_py3 import SecretItem -from ._models_py3 import SecretListResult -from ._models_py3 import SecretProperties -from ._models_py3 import SecretRestoreParameters -from ._models_py3 import SecretSetParameters -from ._models_py3 import SecretUpdateParameters +from ._models import Attributes +from ._models import BackupSecretResult +from ._models import DeletedSecretBundle +from ._models import DeletedSecretItem +from ._models import Error +from ._models import KeyVaultError +from ._models import SecretAttributes +from ._models import SecretBundle +from ._models import SecretItem +from ._models import SecretProperties +from ._models import SecretRestoreParameters +from ._models import SecretSetParameters +from ._models import SecretUpdateParameters -from ._key_vault_client_enums import DeletionRecoveryLevel +from ._enums import DeletionRecoveryLevel from ._patch import __all__ as _patch_all from ._patch import * # pylint: disable=unused-wildcard-import from ._patch import patch_sdk as _patch_sdk @@ -32,13 +30,11 @@ "BackupSecretResult", "DeletedSecretBundle", "DeletedSecretItem", - "DeletedSecretListResult", "Error", "KeyVaultError", "SecretAttributes", "SecretBundle", "SecretItem", - "SecretListResult", "SecretProperties", "SecretRestoreParameters", "SecretSetParameters", diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/models/_key_vault_client_enums.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/models/_enums.py similarity index 50% rename from sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/models/_key_vault_client_enums.py rename to sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/models/_enums.py index 69c2260c6c84..80c08be245c9 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/models/_key_vault_client_enums.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/models/_enums.py @@ -18,37 +18,37 @@ class DeletionRecoveryLevel(str, Enum, metaclass=CaseInsensitiveEnumMeta): PURGEABLE = "Purgeable" """Denotes a vault state in which deletion is an irreversible operation, without the possibility - #: for recovery. This level corresponds to no protection being available against a Delete - #: operation; the data is irretrievably lost upon accepting a Delete operation at the entity level - #: or higher (vault, resource group, subscription etc.)""" + for recovery. This level corresponds to no protection being available against a Delete + operation; the data is irretrievably lost upon accepting a Delete operation at the entity level + or higher (vault, resource group, subscription etc.)""" RECOVERABLE_PURGEABLE = "Recoverable+Purgeable" """Denotes a vault state in which deletion is recoverable, and which also permits immediate and - #: permanent deletion (i.e. purge). This level guarantees the recoverability of the deleted entity - #: during the retention interval (90 days), unless a Purge operation is requested, or the - #: subscription is cancelled. System wil permanently delete it after 90 days, if not recovered""" + permanent deletion (i.e. purge). This level guarantees the recoverability of the deleted entity + during the retention interval (90 days), unless a Purge operation is requested, or the + subscription is cancelled. System wil permanently delete it after 90 days, if not recovered""" RECOVERABLE = "Recoverable" """Denotes a vault state in which deletion is recoverable without the possibility for immediate - #: and permanent deletion (i.e. purge). This level guarantees the recoverability of the deleted - #: entity during the retention interval(90 days) and while the subscription is still available. - #: System wil permanently delete it after 90 days, if not recovered""" + and permanent deletion (i.e. purge). This level guarantees the recoverability of the deleted + entity during the retention interval(90 days) and while the subscription is still available. + System wil permanently delete it after 90 days, if not recovered""" RECOVERABLE_PROTECTED_SUBSCRIPTION = "Recoverable+ProtectedSubscription" """Denotes a vault and subscription state in which deletion is recoverable within retention - #: interval (90 days), immediate and permanent deletion (i.e. purge) is not permitted, and in - #: which the subscription itself cannot be permanently canceled. System wil permanently delete it - #: after 90 days, if not recovered""" + interval (90 days), immediate and permanent deletion (i.e. purge) is not permitted, and in + which the subscription itself cannot be permanently canceled. System wil permanently delete it + after 90 days, if not recovered""" CUSTOMIZED_RECOVERABLE_PURGEABLE = "CustomizedRecoverable+Purgeable" """Denotes a vault state in which deletion is recoverable, and which also permits immediate and - #: permanent deletion (i.e. purge when 7<= SoftDeleteRetentionInDays < 90). This level guarantees - #: the recoverability of the deleted entity during the retention interval, unless a Purge - #: operation is requested, or the subscription is cancelled.""" + permanent deletion (i.e. purge when 7<= SoftDeleteRetentionInDays < 90). This level guarantees + the recoverability of the deleted entity during the retention interval, unless a Purge + operation is requested, or the subscription is cancelled.""" CUSTOMIZED_RECOVERABLE = "CustomizedRecoverable" """Denotes a vault state in which deletion is recoverable without the possibility for immediate - #: and permanent deletion (i.e. purge when 7<= SoftDeleteRetentionInDays < 90).This level - #: guarantees the recoverability of the deleted entity during the retention interval and while the - #: subscription is still available.""" + and permanent deletion (i.e. purge when 7<= SoftDeleteRetentionInDays < 90).This level + guarantees the recoverability of the deleted entity during the retention interval and while the + subscription is still available.""" CUSTOMIZED_RECOVERABLE_PROTECTED_SUBSCRIPTION = "CustomizedRecoverable+ProtectedSubscription" """Denotes a vault and subscription state in which deletion is recoverable, immediate and - #: permanent deletion (i.e. purge) is not permitted, and in which the subscription itself cannot - #: be permanently canceled when 7<= SoftDeleteRetentionInDays < 90. This level guarantees the - #: recoverability of the deleted entity during the retention interval, and also reflects the fact - #: that the subscription itself cannot be cancelled.""" + permanent deletion (i.e. purge) is not permitted, and in which the subscription itself cannot + be permanently canceled when 7<= SoftDeleteRetentionInDays < 90. This level guarantees the + recoverability of the deleted entity during the retention interval, and also reflects the fact + that the subscription itself cannot be cancelled.""" diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/models/_models_py3.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/models/_models.py similarity index 95% rename from sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/models/_models_py3.py rename to sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/models/_models.py index 92c4e09655aa..fe4da13250aa 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/models/_models_py3.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_generated/models/_models.py @@ -106,7 +106,7 @@ class SecretBundle(_serialization.Model): :ivar content_type: The content type of the secret. :vartype content_type: str :ivar attributes: The secret management attributes. - :vartype attributes: ~key_vault_client.models.SecretAttributes + :vartype attributes: ~azure.keyvault.v7_5.models.SecretAttributes :ivar tags: Application specific metadata in the form of key-value pairs. :vartype tags: dict[str, str] :ivar kid: If this is a secret backing a KV certificate, then this field specifies the @@ -150,7 +150,7 @@ def __init__( :keyword content_type: The content type of the secret. :paramtype content_type: str :keyword attributes: The secret management attributes. - :paramtype attributes: ~key_vault_client.models.SecretAttributes + :paramtype attributes: ~azure.keyvault.v7_5.models.SecretAttributes :keyword tags: Application specific metadata in the form of key-value pairs. :paramtype tags: dict[str, str] """ @@ -177,7 +177,7 @@ class DeletedSecretBundle(SecretBundle): :ivar content_type: The content type of the secret. :vartype content_type: str :ivar attributes: The secret management attributes. - :vartype attributes: ~key_vault_client.models.SecretAttributes + :vartype attributes: ~azure.keyvault.v7_5.models.SecretAttributes :ivar tags: Application specific metadata in the form of key-value pairs. :vartype tags: dict[str, str] :ivar kid: If this is a secret backing a KV certificate, then this field specifies the @@ -234,7 +234,7 @@ def __init__( :keyword content_type: The content type of the secret. :paramtype content_type: str :keyword attributes: The secret management attributes. - :paramtype attributes: ~key_vault_client.models.SecretAttributes + :paramtype attributes: ~azure.keyvault.v7_5.models.SecretAttributes :keyword tags: Application specific metadata in the form of key-value pairs. :paramtype tags: dict[str, str] :keyword recovery_id: The url of the recovery object, used to identify and recover the deleted @@ -255,7 +255,7 @@ class SecretItem(_serialization.Model): :ivar id: Secret identifier. :vartype id: str :ivar attributes: The secret management attributes. - :vartype attributes: ~key_vault_client.models.SecretAttributes + :vartype attributes: ~azure.keyvault.v7_5.models.SecretAttributes :ivar tags: Application specific metadata in the form of key-value pairs. :vartype tags: dict[str, str] :ivar content_type: Type of the secret value such as a password. @@ -290,7 +290,7 @@ def __init__( :keyword id: Secret identifier. :paramtype id: str :keyword attributes: The secret management attributes. - :paramtype attributes: ~key_vault_client.models.SecretAttributes + :paramtype attributes: ~azure.keyvault.v7_5.models.SecretAttributes :keyword tags: Application specific metadata in the form of key-value pairs. :paramtype tags: dict[str, str] :keyword content_type: Type of the secret value such as a password. @@ -312,7 +312,7 @@ class DeletedSecretItem(SecretItem): :ivar id: Secret identifier. :vartype id: str :ivar attributes: The secret management attributes. - :vartype attributes: ~key_vault_client.models.SecretAttributes + :vartype attributes: ~azure.keyvault.v7_5.models.SecretAttributes :ivar tags: Application specific metadata in the form of key-value pairs. :vartype tags: dict[str, str] :ivar content_type: Type of the secret value such as a password. @@ -360,7 +360,7 @@ def __init__( :keyword id: Secret identifier. :paramtype id: str :keyword attributes: The secret management attributes. - :paramtype attributes: ~key_vault_client.models.SecretAttributes + :paramtype attributes: ~azure.keyvault.v7_5.models.SecretAttributes :keyword tags: Application specific metadata in the form of key-value pairs. :paramtype tags: dict[str, str] :keyword content_type: Type of the secret value such as a password. @@ -382,7 +382,7 @@ class DeletedSecretListResult(_serialization.Model): :ivar value: A response message containing a list of the deleted secrets in the vault along with a link to the next page of deleted secrets. - :vartype value: list[~key_vault_client.models.DeletedSecretItem] + :vartype value: list[~azure.keyvault.v7_5.models.DeletedSecretItem] :ivar next_link: The URL to get the next set of deleted secrets. :vartype next_link: str """ @@ -414,7 +414,7 @@ class Error(_serialization.Model): :ivar message: The error message. :vartype message: str :ivar inner_error: The key vault server error. - :vartype inner_error: ~key_vault_client.models.Error + :vartype inner_error: ~azure.keyvault.v7_5.models.Error """ _validation = { @@ -443,7 +443,7 @@ class KeyVaultError(_serialization.Model): Variables are only populated by the server, and will be ignored when sending a request. :ivar error: The key vault server error. - :vartype error: ~key_vault_client.models.Error + :vartype error: ~azure.keyvault.v7_5.models.Error """ _validation = { @@ -484,7 +484,7 @@ class SecretAttributes(Attributes): interval. Known values are: "Purgeable", "Recoverable+Purgeable", "Recoverable", "Recoverable+ProtectedSubscription", "CustomizedRecoverable+Purgeable", "CustomizedRecoverable", and "CustomizedRecoverable+ProtectedSubscription". - :vartype recovery_level: str or ~key_vault_client.models.DeletionRecoveryLevel + :vartype recovery_level: str or ~azure.keyvault.v7_5.models.DeletionRecoveryLevel """ _validation = { @@ -532,7 +532,7 @@ class SecretListResult(_serialization.Model): :ivar value: A response message containing a list of secrets in the key vault along with a link to the next page of secrets. - :vartype value: list[~key_vault_client.models.SecretItem] + :vartype value: list[~azure.keyvault.v7_5.models.SecretItem] :ivar next_link: The URL to get the next set of secrets. :vartype next_link: str """ @@ -577,7 +577,7 @@ def __init__(self, *, content_type: Optional[str] = None, **kwargs: Any) -> None class SecretRestoreParameters(_serialization.Model): """The secret restore parameters. - All required parameters must be populated in order to send to Azure. + All required parameters must be populated in order to send to server. :ivar secret_bundle_backup: The backup blob associated with a secret bundle. Required. :vartype secret_bundle_backup: bytes @@ -603,7 +603,7 @@ def __init__(self, *, secret_bundle_backup: bytes, **kwargs: Any) -> None: class SecretSetParameters(_serialization.Model): """The secret set parameters. - All required parameters must be populated in order to send to Azure. + All required parameters must be populated in order to send to server. :ivar value: The value of the secret. Required. :vartype value: str @@ -612,7 +612,7 @@ class SecretSetParameters(_serialization.Model): :ivar content_type: Type of the secret value such as a password. :vartype content_type: str :ivar secret_attributes: The secret management attributes. - :vartype secret_attributes: ~key_vault_client.models.SecretAttributes + :vartype secret_attributes: ~azure.keyvault.v7_5.models.SecretAttributes """ _validation = { @@ -643,7 +643,7 @@ def __init__( :keyword content_type: Type of the secret value such as a password. :paramtype content_type: str :keyword secret_attributes: The secret management attributes. - :paramtype secret_attributes: ~key_vault_client.models.SecretAttributes + :paramtype secret_attributes: ~azure.keyvault.v7_5.models.SecretAttributes """ super().__init__(**kwargs) self.value = value @@ -658,7 +658,7 @@ class SecretUpdateParameters(_serialization.Model): :ivar content_type: Type of the secret value such as a password. :vartype content_type: str :ivar secret_attributes: The secret management attributes. - :vartype secret_attributes: ~key_vault_client.models.SecretAttributes + :vartype secret_attributes: ~azure.keyvault.v7_5.models.SecretAttributes :ivar tags: Application specific metadata in the form of key-value pairs. :vartype tags: dict[str, str] """ @@ -681,7 +681,7 @@ def __init__( :keyword content_type: Type of the secret value such as a password. :paramtype content_type: str :keyword secret_attributes: The secret management attributes. - :paramtype secret_attributes: ~key_vault_client.models.SecretAttributes + :paramtype secret_attributes: ~azure.keyvault.v7_5.models.SecretAttributes :keyword tags: Application specific metadata in the form of key-value pairs. :paramtype tags: dict[str, str] """ diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/async_challenge_auth_policy.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/async_challenge_auth_policy.py index 3c2ef95e3176..6fc8f7892ac8 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/async_challenge_auth_policy.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/async_challenge_auth_policy.py @@ -14,6 +14,7 @@ protocol again. """ +from copy import deepcopy import time from typing import Any, Optional from urllib.parse import urlparse @@ -22,6 +23,7 @@ from azure.core.credentials_async import AsyncTokenCredential from azure.core.pipeline import PipelineRequest, PipelineResponse from azure.core.pipeline.policies import AsyncBearerTokenCredentialPolicy +from azure.core.rest import HttpRequest from . import http_challenge_cache as ChallengeCache from .challenge_auth_policy import _enforce_tls, _update_challenge @@ -39,6 +41,7 @@ def __init__(self, credential: AsyncTokenCredential, *scopes: str, **kwargs: Any self._credential = credential self._token: Optional[AccessToken] = None self._verify_challenge_resource = kwargs.pop("verify_challenge_resource", True) + self._request_copy: Optional[HttpRequest] = None async def on_request(self, request: PipelineRequest) -> None: _enforce_tls(request) @@ -60,12 +63,17 @@ async def on_request(self, request: PipelineRequest) -> None: # else: discover authentication information by eliciting a challenge from Key Vault. Remove any request data, # saving it for later. Key Vault will reject the request as unauthorized and respond with a challenge. - # on_challenge will parse that challenge, reattach any body removed here, authorize the request, and tell - # super to send it again. - if request.http_request.body: - request.context["key_vault_request_data"] = request.http_request.body - request.http_request.set_json_body(None) - request.http_request.headers["Content-Length"] = "0" + # on_challenge will parse that challenge, use the original request including the body, authorize the + # request, and tell super to send it again. + if request.http_request.content: + self._request_copy = request.http_request + bodiless_request = HttpRequest( + method=request.http_request.method, + url=request.http_request.url, + headers=deepcopy(request.http_request.headers), + ) + bodiless_request.headers["Content-Length"] = "0" + request.http_request = bodiless_request async def on_challenge(self, request: PipelineRequest, response: PipelineResponse) -> bool: @@ -89,8 +97,9 @@ async def on_challenge(self, request: PipelineRequest, response: PipelineRespons "See https://aka.ms/azsdk/blog/vault-uri for more information." ) - body = request.context.pop("key_vault_request_data", None) - request.http_request.set_text_body(body) # no-op when text is None + # If we had created a request copy in on_request, use it now to send along the original body content + if self._request_copy: + request.http_request = self._request_copy # The tenant parsed from AD FS challenges is "adfs"; we don't actually need a tenant for AD FS authentication # For AD FS we skip cross-tenant authentication per https://github.com/Azure/azure-sdk-for-python/issues/28648 diff --git a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/challenge_auth_policy.py b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/challenge_auth_policy.py index 7cd10de68a86..41ed3fe794b8 100644 --- a/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/challenge_auth_policy.py +++ b/sdk/keyvault/azure-keyvault-secrets/azure/keyvault/secrets/_shared/challenge_auth_policy.py @@ -14,6 +14,7 @@ protocol again. """ +from copy import deepcopy import time from typing import Any, Optional from urllib.parse import urlparse @@ -22,6 +23,7 @@ from azure.core.exceptions import ServiceRequestError from azure.core.pipeline import PipelineRequest, PipelineResponse from azure.core.pipeline.policies import BearerTokenCredentialPolicy +from azure.core.rest import HttpRequest from .http_challenge import HttpChallenge from . import http_challenge_cache as ChallengeCache @@ -68,6 +70,7 @@ def __init__(self, credential: TokenCredential, *scopes: str, **kwargs: Any) -> self._credential = credential self._token: Optional[AccessToken] = None self._verify_challenge_resource = kwargs.pop("verify_challenge_resource", True) + self._request_copy: Optional[HttpRequest] = None def on_request(self, request: PipelineRequest) -> None: _enforce_tls(request) @@ -89,12 +92,17 @@ def on_request(self, request: PipelineRequest) -> None: # else: discover authentication information by eliciting a challenge from Key Vault. Remove any request data, # saving it for later. Key Vault will reject the request as unauthorized and respond with a challenge. - # on_challenge will parse that challenge, reattach any body removed here, authorize the request, and tell - # super to send it again. - if request.http_request.body: - request.context["key_vault_request_data"] = request.http_request.body - request.http_request.set_json_body(None) - request.http_request.headers["Content-Length"] = "0" + # on_challenge will parse that challenge, use the original request including the body, authorize the + # request, and tell super to send it again. + if request.http_request.content: + self._request_copy = request.http_request + bodiless_request = HttpRequest( + method=request.http_request.method, + url=request.http_request.url, + headers=deepcopy(request.http_request.headers), + ) + bodiless_request.headers["Content-Length"] = "0" + request.http_request = bodiless_request def on_challenge(self, request: PipelineRequest, response: PipelineResponse) -> bool: try: @@ -117,8 +125,9 @@ def on_challenge(self, request: PipelineRequest, response: PipelineResponse) -> "See https://aka.ms/azsdk/blog/vault-uri for more information." ) - body = request.context.pop("key_vault_request_data", None) - request.http_request.set_text_body(body) # no-op when text is None + # If we had created a request copy in on_request, use it now to send along the original body content + if self._request_copy: + request.http_request = self._request_copy # The tenant parsed from AD FS challenges is "adfs"; we don't actually need a tenant for AD FS authentication # For AD FS we skip cross-tenant authentication per https://github.com/Azure/azure-sdk-for-python/issues/28648 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 323118523b54..0be6566ce508 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 @@ -24,7 +24,7 @@ class ApiVersion(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Key Vault API versions supported by this package""" #: this is the default version - V7_5_PREVIEW_1 = "7.5-preview.1" + V7_5 = "7.5" V7_4 = "7.4" V7_3 = "7.3" V7_2 = "7.2" @@ -33,7 +33,7 @@ class ApiVersion(str, Enum, metaclass=CaseInsensitiveEnumMeta): V2016_10_01 = "2016-10-01" -DEFAULT_VERSION = ApiVersion.V7_5_PREVIEW_1 +DEFAULT_VERSION = ApiVersion.V7_5 _SERIALIZER = Serializer() _SERIALIZER.client_side_validation = False diff --git a/sdk/keyvault/azure-keyvault-secrets/setup.py b/sdk/keyvault/azure-keyvault-secrets/setup.py index 20198a06650b..759c27e782f5 100644 --- a/sdk/keyvault/azure-keyvault-secrets/setup.py +++ b/sdk/keyvault/azure-keyvault-secrets/setup.py @@ -68,8 +68,7 @@ ), python_requires=">=3.8", install_requires=[ - "azure-common~=1.1", - "azure-core<2.0.0,>=1.24.0", + "azure-core<2.0.0,>=1.29.5", "isodate>=0.6.1", "typing-extensions>=4.0.1", ],