From 66995e0c227ecab83900eeceb92416838e664db6 Mon Sep 17 00:00:00 2001 From: mccoyp Date: Thu, 3 Nov 2022 15:26:21 -0700 Subject: [PATCH 01/14] Target preview version in generated code --- .../_generated/_key_vault_client.py | 2 +- .../_generated/_operations_mixin.py | 131 ++++++++++++++++-- .../_generated/aio/_key_vault_client.py | 2 +- .../_generated/aio/_operations_mixin.py | 131 ++++++++++++++++-- .../administration/_generated/models.py | 2 +- .../v7_4_preview_1/models/_models_py3.py | 10 +- 6 files changed, 248 insertions(+), 30 deletions(-) diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/_key_vault_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/_key_vault_client.py index 63dc06f9a882..5e4dacf1d404 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/_key_vault_client.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/_key_vault_client.py @@ -43,7 +43,7 @@ class KeyVaultClient(KeyVaultClientOperationsMixin, MultiApiClientMixin, _SDKCli :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. """ - DEFAULT_API_VERSION = '7.3' + DEFAULT_API_VERSION = '7.4-preview.1' _PROFILE_TAG = "azure.keyvault.KeyVaultClient" LATEST_PROFILE = ProfileDefinition({ _PROFILE_TAG: { diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/_operations_mixin.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/_operations_mixin.py index 1ee9c6c4184c..c8c3cd1c6306 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/_operations_mixin.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/_operations_mixin.py @@ -24,8 +24,7 @@ def begin_full_backup( azure_storage_blob_container_uri: Optional[Union[_models.SASTokenParameter, IO]] = None, **kwargs: Any ) -> LROPoller[_models.FullBackupOperation]: - """Creates a full backup using a user-provided SAS token to an Azure blob storage container. This - operation is supported only by the Managed HSM service. + """Creates a full backup using a user-provided SAS token to an Azure blob storage container. :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. :type vault_base_url: str @@ -33,7 +32,8 @@ def begin_full_backup( valid Azure blob container where full backup needs to be stored. This token needs to be valid for at least next 24 hours from the time of making this call. Is either a model type or a IO type. Default value is None. - :type azure_storage_blob_container_uri: ~azure.keyvault.v7_3.models.SASTokenParameter or IO + :type azure_storage_blob_container_uri: ~azure.keyvault.v7_4_preview_1.models.SASTokenParameter + or IO :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str @@ -47,7 +47,8 @@ def begin_full_backup( Retry-After header is present. :return: An instance of LROPoller that returns either FullBackupOperation or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.keyvault.v7_3.models.FullBackupOperation] + :rtype: + ~azure.core.polling.LROPoller[~azure.keyvault.v7_4_preview_1.models.FullBackupOperation] :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('begin_full_backup') @@ -81,7 +82,8 @@ def begin_full_restore_operation( :type vault_base_url: str :param restore_blob_details: The Azure blob SAS token pointing to a folder where the previous successful full backup was stored. Is either a model type or a IO type. Default value is None. - :type restore_blob_details: ~azure.keyvault.v7_3.models.RestoreOperationParameters or IO + :type restore_blob_details: ~azure.keyvault.v7_4_preview_1.models.RestoreOperationParameters or + IO :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str @@ -95,7 +97,7 @@ def begin_full_restore_operation( Retry-After header is present. :return: An instance of LROPoller that returns either RestoreOperation or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.keyvault.v7_3.models.RestoreOperation] + :rtype: ~azure.core.polling.LROPoller[~azure.keyvault.v7_4_preview_1.models.RestoreOperation] :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('begin_full_restore_operation') @@ -132,8 +134,8 @@ def begin_selective_key_restore_operation( :type key_name: str :param restore_blob_details: The Azure blob SAS token pointing to a folder where the previous successful full backup was stored. Is either a model type or a IO type. Default value is None. - :type restore_blob_details: ~azure.keyvault.v7_3.models.SelectiveKeyRestoreOperationParameters - or IO + :type restore_blob_details: + ~azure.keyvault.v7_4_preview_1.models.SelectiveKeyRestoreOperationParameters or IO :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str @@ -147,7 +149,8 @@ def begin_selective_key_restore_operation( Retry-After header is present. :return: An instance of LROPoller that returns either SelectiveKeyRestoreOperation or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.keyvault.v7_3.models.SelectiveKeyRestoreOperation] + :rtype: + ~azure.core.polling.LROPoller[~azure.keyvault.v7_4_preview_1.models.SelectiveKeyRestoreOperation] :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('begin_selective_key_restore_operation') @@ -182,7 +185,7 @@ def full_backup_status( :type job_id: str :keyword callable cls: A custom type or function that will be passed the direct response :return: FullBackupOperation or the result of cls(response) - :rtype: ~azure.keyvault.v7_3.models.FullBackupOperation + :rtype: ~azure.keyvault.v7_4_preview_1.models.FullBackupOperation :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('full_backup_status') @@ -203,6 +206,70 @@ def full_backup_status( mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) return mixin_instance.full_backup_status(vault_base_url, job_id, **kwargs) + def get_setting_value( + self, + vault_base_url: str, + setting_name: str, + **kwargs: Any + ) -> _models.Setting: + """Get specified account setting value. + + Retrieves the value of a specified, value account setting. + + :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. + :type vault_base_url: str + :param setting_name: The name of the account setting. Must be a valid settings option. + Required. + :type setting_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Setting or the result of cls(response) + :rtype: ~azure.keyvault.v7_4_preview_1.models.Setting + :raises ~azure.core.exceptions.HttpResponseError: + """ + api_version = self._get_api_version('get_setting_value') + if api_version == '7.4-preview.1': + from .v7_4_preview_1.operations import KeyVaultClientOperationsMixin as OperationClass + else: + raise ValueError("API version {} does not have operation 'get_setting_value'".format(api_version)) + mixin_instance = OperationClass() + mixin_instance._client = self._client + mixin_instance._config = self._config + mixin_instance._config.api_version = api_version + mixin_instance._serialize = Serializer(self._models_dict(api_version)) + mixin_instance._serialize.client_side_validation = False + mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) + return mixin_instance.get_setting_value(vault_base_url, setting_name, **kwargs) + + def get_settings( + self, + vault_base_url: str, + **kwargs: Any + ) -> _models.SettingsListResult: + """List account settings. + + Retrieves a list of all the available account settings that can be configured. + + :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. + :type vault_base_url: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SettingsListResult or the result of cls(response) + :rtype: ~azure.keyvault.v7_4_preview_1.models.SettingsListResult + :raises ~azure.core.exceptions.HttpResponseError: + """ + api_version = self._get_api_version('get_settings') + if api_version == '7.4-preview.1': + from .v7_4_preview_1.operations import KeyVaultClientOperationsMixin as OperationClass + else: + raise ValueError("API version {} does not have operation 'get_settings'".format(api_version)) + mixin_instance = OperationClass() + mixin_instance._client = self._client + mixin_instance._config = self._config + mixin_instance._config.api_version = api_version + mixin_instance._serialize = Serializer(self._models_dict(api_version)) + mixin_instance._serialize.client_side_validation = False + mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) + return mixin_instance.get_settings(vault_base_url, **kwargs) + def restore_status( self, vault_base_url: str, @@ -217,7 +284,7 @@ def restore_status( :type job_id: str :keyword callable cls: A custom type or function that will be passed the direct response :return: RestoreOperation or the result of cls(response) - :rtype: ~azure.keyvault.v7_3.models.RestoreOperation + :rtype: ~azure.keyvault.v7_4_preview_1.models.RestoreOperation :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('restore_status') @@ -237,3 +304,45 @@ def restore_status( mixin_instance._serialize.client_side_validation = False mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) return mixin_instance.restore_status(vault_base_url, job_id, **kwargs) + + def update_settings( + self, + vault_base_url: str, + setting_name: str, + parameters: Union[_models.UpdateSettingsRequest, IO], + **kwargs: Any + ) -> _models.Setting: + """Updates key vault account setting, stores it, then returns the setting name and value to the + client. + + Description of the pool setting to be updated. + + :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. + :type vault_base_url: str + :param setting_name: The name of the account setting. Must be a valid settings option. + Required. + :type setting_name: str + :param parameters: The parameters to update an account setting. Is either a model type or a IO + type. Required. + :type parameters: ~azure.keyvault.v7_4_preview_1.models.UpdateSettingsRequest or IO + :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: Setting or the result of cls(response) + :rtype: ~azure.keyvault.v7_4_preview_1.models.Setting + :raises ~azure.core.exceptions.HttpResponseError: + """ + api_version = self._get_api_version('update_settings') + if api_version == '7.4-preview.1': + from .v7_4_preview_1.operations import KeyVaultClientOperationsMixin as OperationClass + else: + raise ValueError("API version {} does not have operation 'update_settings'".format(api_version)) + mixin_instance = OperationClass() + mixin_instance._client = self._client + mixin_instance._config = self._config + mixin_instance._config.api_version = api_version + mixin_instance._serialize = Serializer(self._models_dict(api_version)) + mixin_instance._serialize.client_side_validation = False + mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) + return mixin_instance.update_settings(vault_base_url, setting_name, parameters, **kwargs) diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/aio/_key_vault_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/aio/_key_vault_client.py index 548f8432a870..2152c21dfcfd 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/aio/_key_vault_client.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/aio/_key_vault_client.py @@ -43,7 +43,7 @@ class KeyVaultClient(KeyVaultClientOperationsMixin, MultiApiClientMixin, _SDKCli :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. """ - DEFAULT_API_VERSION = '7.3' + DEFAULT_API_VERSION = '7.4-preview.1' _PROFILE_TAG = "azure.keyvault.KeyVaultClient" LATEST_PROFILE = ProfileDefinition({ _PROFILE_TAG: { diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/aio/_operations_mixin.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/aio/_operations_mixin.py index 3199461d9c79..9fd40b0355a2 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/aio/_operations_mixin.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/aio/_operations_mixin.py @@ -24,8 +24,7 @@ async def begin_full_backup( azure_storage_blob_container_uri: Optional[Union[_models.SASTokenParameter, IO]] = None, **kwargs: Any ) -> AsyncLROPoller[_models.FullBackupOperation]: - """Creates a full backup using a user-provided SAS token to an Azure blob storage container. This - operation is supported only by the Managed HSM service. + """Creates a full backup using a user-provided SAS token to an Azure blob storage container. :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. :type vault_base_url: str @@ -33,7 +32,8 @@ async def begin_full_backup( valid Azure blob container where full backup needs to be stored. This token needs to be valid for at least next 24 hours from the time of making this call. Is either a model type or a IO type. Default value is None. - :type azure_storage_blob_container_uri: ~azure.keyvault.v7_3.models.SASTokenParameter or IO + :type azure_storage_blob_container_uri: ~azure.keyvault.v7_4_preview_1.models.SASTokenParameter + or IO :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str @@ -47,7 +47,8 @@ async def begin_full_backup( Retry-After header is present. :return: An instance of AsyncLROPoller that returns either FullBackupOperation or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.keyvault.v7_3.models.FullBackupOperation] + :rtype: + ~azure.core.polling.AsyncLROPoller[~azure.keyvault.v7_4_preview_1.models.FullBackupOperation] :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('begin_full_backup') @@ -81,7 +82,8 @@ async def begin_full_restore_operation( :type vault_base_url: str :param restore_blob_details: The Azure blob SAS token pointing to a folder where the previous successful full backup was stored. Is either a model type or a IO type. Default value is None. - :type restore_blob_details: ~azure.keyvault.v7_3.models.RestoreOperationParameters or IO + :type restore_blob_details: ~azure.keyvault.v7_4_preview_1.models.RestoreOperationParameters or + IO :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str @@ -95,7 +97,8 @@ async def begin_full_restore_operation( Retry-After header is present. :return: An instance of AsyncLROPoller that returns either RestoreOperation or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.keyvault.v7_3.models.RestoreOperation] + :rtype: + ~azure.core.polling.AsyncLROPoller[~azure.keyvault.v7_4_preview_1.models.RestoreOperation] :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('begin_full_restore_operation') @@ -132,8 +135,8 @@ async def begin_selective_key_restore_operation( :type key_name: str :param restore_blob_details: The Azure blob SAS token pointing to a folder where the previous successful full backup was stored. Is either a model type or a IO type. Default value is None. - :type restore_blob_details: ~azure.keyvault.v7_3.models.SelectiveKeyRestoreOperationParameters - or IO + :type restore_blob_details: + ~azure.keyvault.v7_4_preview_1.models.SelectiveKeyRestoreOperationParameters or IO :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str @@ -148,7 +151,7 @@ async def begin_selective_key_restore_operation( :return: An instance of AsyncLROPoller that returns either SelectiveKeyRestoreOperation or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.keyvault.v7_3.models.SelectiveKeyRestoreOperation] + ~azure.core.polling.AsyncLROPoller[~azure.keyvault.v7_4_preview_1.models.SelectiveKeyRestoreOperation] :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('begin_selective_key_restore_operation') @@ -183,7 +186,7 @@ async def full_backup_status( :type job_id: str :keyword callable cls: A custom type or function that will be passed the direct response :return: FullBackupOperation or the result of cls(response) - :rtype: ~azure.keyvault.v7_3.models.FullBackupOperation + :rtype: ~azure.keyvault.v7_4_preview_1.models.FullBackupOperation :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('full_backup_status') @@ -204,6 +207,70 @@ async def full_backup_status( mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) return await mixin_instance.full_backup_status(vault_base_url, job_id, **kwargs) + async def get_setting_value( + self, + vault_base_url: str, + setting_name: str, + **kwargs: Any + ) -> _models.Setting: + """Get specified account setting value. + + Retrieves the value of a specified, value account setting. + + :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. + :type vault_base_url: str + :param setting_name: The name of the account setting. Must be a valid settings option. + Required. + :type setting_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Setting or the result of cls(response) + :rtype: ~azure.keyvault.v7_4_preview_1.models.Setting + :raises ~azure.core.exceptions.HttpResponseError: + """ + api_version = self._get_api_version('get_setting_value') + if api_version == '7.4-preview.1': + from ..v7_4_preview_1.aio.operations import KeyVaultClientOperationsMixin as OperationClass + else: + raise ValueError("API version {} does not have operation 'get_setting_value'".format(api_version)) + mixin_instance = OperationClass() + mixin_instance._client = self._client + mixin_instance._config = self._config + mixin_instance._config.api_version = api_version + mixin_instance._serialize = Serializer(self._models_dict(api_version)) + mixin_instance._serialize.client_side_validation = False + mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) + return await mixin_instance.get_setting_value(vault_base_url, setting_name, **kwargs) + + async def get_settings( + self, + vault_base_url: str, + **kwargs: Any + ) -> _models.SettingsListResult: + """List account settings. + + Retrieves a list of all the available account settings that can be configured. + + :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. + :type vault_base_url: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SettingsListResult or the result of cls(response) + :rtype: ~azure.keyvault.v7_4_preview_1.models.SettingsListResult + :raises ~azure.core.exceptions.HttpResponseError: + """ + api_version = self._get_api_version('get_settings') + if api_version == '7.4-preview.1': + from ..v7_4_preview_1.aio.operations import KeyVaultClientOperationsMixin as OperationClass + else: + raise ValueError("API version {} does not have operation 'get_settings'".format(api_version)) + mixin_instance = OperationClass() + mixin_instance._client = self._client + mixin_instance._config = self._config + mixin_instance._config.api_version = api_version + mixin_instance._serialize = Serializer(self._models_dict(api_version)) + mixin_instance._serialize.client_side_validation = False + mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) + return await mixin_instance.get_settings(vault_base_url, **kwargs) + async def restore_status( self, vault_base_url: str, @@ -218,7 +285,7 @@ async def restore_status( :type job_id: str :keyword callable cls: A custom type or function that will be passed the direct response :return: RestoreOperation or the result of cls(response) - :rtype: ~azure.keyvault.v7_3.models.RestoreOperation + :rtype: ~azure.keyvault.v7_4_preview_1.models.RestoreOperation :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('restore_status') @@ -238,3 +305,45 @@ async def restore_status( mixin_instance._serialize.client_side_validation = False mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) return await mixin_instance.restore_status(vault_base_url, job_id, **kwargs) + + async def update_settings( + self, + vault_base_url: str, + setting_name: str, + parameters: Union[_models.UpdateSettingsRequest, IO], + **kwargs: Any + ) -> _models.Setting: + """Updates key vault account setting, stores it, then returns the setting name and value to the + client. + + Description of the pool setting to be updated. + + :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. + :type vault_base_url: str + :param setting_name: The name of the account setting. Must be a valid settings option. + Required. + :type setting_name: str + :param parameters: The parameters to update an account setting. Is either a model type or a IO + type. Required. + :type parameters: ~azure.keyvault.v7_4_preview_1.models.UpdateSettingsRequest or IO + :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: Setting or the result of cls(response) + :rtype: ~azure.keyvault.v7_4_preview_1.models.Setting + :raises ~azure.core.exceptions.HttpResponseError: + """ + api_version = self._get_api_version('update_settings') + if api_version == '7.4-preview.1': + from ..v7_4_preview_1.aio.operations import KeyVaultClientOperationsMixin as OperationClass + else: + raise ValueError("API version {} does not have operation 'update_settings'".format(api_version)) + mixin_instance = OperationClass() + mixin_instance._client = self._client + mixin_instance._config = self._config + mixin_instance._config.api_version = api_version + mixin_instance._serialize = Serializer(self._models_dict(api_version)) + mixin_instance._serialize.client_side_validation = False + mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) + return await mixin_instance.update_settings(vault_base_url, setting_name, parameters, **kwargs) diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/models.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/models.py index 000bcdc107ad..f4ea33207336 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/models.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/models.py @@ -4,4 +4,4 @@ # Licensed under the MIT License. See License.txt in the project root for # license information. # -------------------------------------------------------------------------- -from .v7_3.models import * +from .v7_4_preview_1.models import * diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/v7_4_preview_1/models/_models_py3.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/v7_4_preview_1/models/_models_py3.py index 9cf9f190557c..7587d147981b 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/v7_4_preview_1/models/_models_py3.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/v7_4_preview_1/models/_models_py3.py @@ -903,23 +903,23 @@ class SettingsListResult(_serialization.Model): Variables are only populated by the server, and will be ignored when sending a request. - :ivar value: A response message containing a list of account settings with their associated + :ivar settings: A response message containing a list of account settings with their associated value. - :vartype value: list[~azure.keyvault.v7_4_preview_1.models.Setting] + :vartype settings: list[~azure.keyvault.v7_4_preview_1.models.Setting] """ _validation = { - "value": {"readonly": True}, + "settings": {"readonly": True}, } _attribute_map = { - "value": {"key": "value", "type": "[Setting]"}, + "settings": {"key": "settings", "type": "[Setting]"}, } def __init__(self, **kwargs): """ """ super().__init__(**kwargs) - self.value = None + self.settings = None class UpdateSettingsRequest(_serialization.Model): From a7684cc38b1d92e3011b208f94e28b4599f4d6bc Mon Sep 17 00:00:00 2001 From: mccoyp Date: Thu, 3 Nov 2022 16:17:22 -0700 Subject: [PATCH 02/14] Add _generated_models.py --- .../administration/_generated_models.py | 1050 +++++++++++++++++ 1 file changed, 1050 insertions(+) create mode 100644 sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated_models.py diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated_models.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated_models.py new file mode 100644 index 000000000000..98dcb98f970d --- /dev/null +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated_models.py @@ -0,0 +1,1050 @@ +# coding=utf-8 +# pylint: disable=too-many-lines +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from enum import Enum +import datetime +from typing import List, Optional, Union + +from azure.core import CaseInsensitiveEnumMeta + +from ._generated import _serialization + + +class Attributes(_serialization.Model): + """The object attributes managed by the KeyVault service. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar enabled: Determines whether the object is enabled. + :vartype enabled: bool + :ivar not_before: Not before date in UTC. + :vartype not_before: ~datetime.datetime + :ivar expires: Expiry date in UTC. + :vartype expires: ~datetime.datetime + :ivar created: Creation time in UTC. + :vartype created: ~datetime.datetime + :ivar updated: Last updated time in UTC. + :vartype updated: ~datetime.datetime + """ + + _validation = { + "created": {"readonly": True}, + "updated": {"readonly": True}, + } + + _attribute_map = { + "enabled": {"key": "enabled", "type": "bool"}, + "not_before": {"key": "nbf", "type": "unix-time"}, + "expires": {"key": "exp", "type": "unix-time"}, + "created": {"key": "created", "type": "unix-time"}, + "updated": {"key": "updated", "type": "unix-time"}, + } + + def __init__( + self, + *, + enabled: Optional[bool] = None, + not_before: Optional[datetime.datetime] = None, + expires: Optional[datetime.datetime] = None, + **kwargs + ): + """ + :keyword enabled: Determines whether the object is enabled. + :paramtype enabled: bool + :keyword not_before: Not before date in UTC. + :paramtype not_before: ~datetime.datetime + :keyword expires: Expiry date in UTC. + :paramtype expires: ~datetime.datetime + """ + super().__init__(**kwargs) + self.enabled = enabled + self.not_before = not_before + self.expires = expires + self.created = None + self.updated = None + + +class Error(_serialization.Model): + """The key vault server error. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar code: The error code. + :vartype code: str + :ivar message: The error message. + :vartype message: str + :ivar inner_error: The key vault server error. + :vartype inner_error: ~azure.keyvault.administration._generated_models.Error + """ + + _validation = { + "code": {"readonly": True}, + "message": {"readonly": True}, + "inner_error": {"readonly": True}, + } + + _attribute_map = { + "code": {"key": "code", "type": "str"}, + "message": {"key": "message", "type": "str"}, + "inner_error": {"key": "innererror", "type": "Error"}, + } + + def __init__(self, **kwargs): + """ """ + super().__init__(**kwargs) + self.code = None + self.message = None + self.inner_error = None + + +class FullBackupOperation(_serialization.Model): + """Full backup operation. + + :ivar status: Status of the backup operation. + :vartype status: str + :ivar status_details: The status details of backup operation. + :vartype status_details: str + :ivar error: Error encountered, if any, during the full backup operation. + :vartype error: ~azure.keyvault.administration._generated_models.Error + :ivar start_time: The start time of the backup operation in UTC. + :vartype start_time: ~datetime.datetime + :ivar end_time: The end time of the backup operation in UTC. + :vartype end_time: ~datetime.datetime + :ivar job_id: Identifier for the full backup operation. + :vartype job_id: str + :ivar azure_storage_blob_container_uri: The Azure blob storage container Uri which contains the + full backup. + :vartype azure_storage_blob_container_uri: str + """ + + _attribute_map = { + "status": {"key": "status", "type": "str"}, + "status_details": {"key": "statusDetails", "type": "str"}, + "error": {"key": "error", "type": "Error"}, + "start_time": {"key": "startTime", "type": "unix-time"}, + "end_time": {"key": "endTime", "type": "unix-time"}, + "job_id": {"key": "jobId", "type": "str"}, + "azure_storage_blob_container_uri": {"key": "azureStorageBlobContainerUri", "type": "str"}, + } + + def __init__( + self, + *, + status: Optional[str] = None, + status_details: Optional[str] = None, + error: Optional["Error"] = None, + start_time: Optional[datetime.datetime] = None, + end_time: Optional[datetime.datetime] = None, + job_id: Optional[str] = None, + azure_storage_blob_container_uri: Optional[str] = None, + **kwargs + ): + """ + :keyword status: Status of the backup operation. + :paramtype status: str + :keyword status_details: The status details of backup operation. + :paramtype status_details: str + :keyword error: Error encountered, if any, during the full backup operation. + :paramtype error: ~azure.keyvault.administration._generated_models.Error + :keyword start_time: The start time of the backup operation in UTC. + :paramtype start_time: ~datetime.datetime + :keyword end_time: The end time of the backup operation in UTC. + :paramtype end_time: ~datetime.datetime + :keyword job_id: Identifier for the full backup operation. + :paramtype job_id: str + :keyword azure_storage_blob_container_uri: The Azure blob storage container Uri which contains + the full backup. + :paramtype azure_storage_blob_container_uri: str + """ + super().__init__(**kwargs) + self.status = status + self.status_details = status_details + self.error = error + self.start_time = start_time + self.end_time = end_time + self.job_id = job_id + self.azure_storage_blob_container_uri = azure_storage_blob_container_uri + + +class KeyVaultError(_serialization.Model): + """The key vault error exception. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar error: The key vault server error. + :vartype error: ~azure.keyvault.administration._generated_models.Error + """ + + _validation = { + "error": {"readonly": True}, + } + + _attribute_map = { + "error": {"key": "error", "type": "Error"}, + } + + def __init__(self, **kwargs): + """ """ + super().__init__(**kwargs) + self.error = None + + +class Permission(_serialization.Model): + """Role definition permissions. + + :ivar actions: Action permissions that are granted. + :vartype actions: list[str] + :ivar not_actions: Action permissions that are excluded but not denied. They may be granted by + other role definitions assigned to a principal. + :vartype not_actions: list[str] + :ivar data_actions: Data action permissions that are granted. + :vartype data_actions: list[str or ~azure.keyvault.administration._generated_models.DataAction] + :ivar not_data_actions: Data action permissions that are excluded but not denied. They may be + granted by other role definitions assigned to a principal. + :vartype not_data_actions: list[str or ~azure.keyvault.administration._generated_models.DataAction] + """ + + _attribute_map = { + "actions": {"key": "actions", "type": "[str]"}, + "not_actions": {"key": "notActions", "type": "[str]"}, + "data_actions": {"key": "dataActions", "type": "[str]"}, + "not_data_actions": {"key": "notDataActions", "type": "[str]"}, + } + + def __init__( + self, + *, + actions: Optional[List[str]] = None, + not_actions: Optional[List[str]] = None, + data_actions: Optional[List[Union[str, "DataAction"]]] = None, + not_data_actions: Optional[List[Union[str, "DataAction"]]] = None, + **kwargs + ): + """ + :keyword actions: Action permissions that are granted. + :paramtype actions: list[str] + :keyword not_actions: Action permissions that are excluded but not denied. They may be granted + by other role definitions assigned to a principal. + :paramtype not_actions: list[str] + :keyword data_actions: Data action permissions that are granted. + :paramtype data_actions: list[str or ~azure.keyvault.administration._generated_models.DataAction] + :keyword not_data_actions: Data action permissions that are excluded but not denied. They may + be granted by other role definitions assigned to a principal. + :paramtype not_data_actions: list[str or ~azure.keyvault.administration._generated_models.DataAction] + """ + super().__init__(**kwargs) + self.actions = actions + self.not_actions = not_actions + self.data_actions = data_actions + self.not_data_actions = not_data_actions + + +class RestoreOperation(_serialization.Model): + """Restore operation. + + :ivar status: Status of the restore operation. + :vartype status: str + :ivar status_details: The status details of restore operation. + :vartype status_details: str + :ivar error: Error encountered, if any, during the restore operation. + :vartype error: ~azure.keyvault.administration._generated_models.Error + :ivar job_id: Identifier for the restore operation. + :vartype job_id: str + :ivar start_time: The start time of the restore operation. + :vartype start_time: ~datetime.datetime + :ivar end_time: The end time of the restore operation. + :vartype end_time: ~datetime.datetime + """ + + _attribute_map = { + "status": {"key": "status", "type": "str"}, + "status_details": {"key": "statusDetails", "type": "str"}, + "error": {"key": "error", "type": "Error"}, + "job_id": {"key": "jobId", "type": "str"}, + "start_time": {"key": "startTime", "type": "unix-time"}, + "end_time": {"key": "endTime", "type": "unix-time"}, + } + + def __init__( + self, + *, + status: Optional[str] = None, + status_details: Optional[str] = None, + error: Optional["Error"] = None, + job_id: Optional[str] = None, + start_time: Optional[datetime.datetime] = None, + end_time: Optional[datetime.datetime] = None, + **kwargs + ): + """ + :keyword status: Status of the restore operation. + :paramtype status: str + :keyword status_details: The status details of restore operation. + :paramtype status_details: str + :keyword error: Error encountered, if any, during the restore operation. + :paramtype error: ~azure.keyvault.administration._generated_models.Error + :keyword job_id: Identifier for the restore operation. + :paramtype job_id: str + :keyword start_time: The start time of the restore operation. + :paramtype start_time: ~datetime.datetime + :keyword end_time: The end time of the restore operation. + :paramtype end_time: ~datetime.datetime + """ + super().__init__(**kwargs) + self.status = status + self.status_details = status_details + self.error = error + self.job_id = job_id + self.start_time = start_time + self.end_time = end_time + + +class RestoreOperationParameters(_serialization.Model): + """RestoreOperationParameters. + + All required parameters must be populated in order to send to Azure. + + :ivar sas_token_parameters: Required. + :vartype sas_token_parameters: ~azure.keyvault.administration._generated_models.SASTokenParameter + :ivar folder_to_restore: The Folder name of the blob where the previous successful full backup + was stored. Required. + :vartype folder_to_restore: str + """ + + _validation = { + "sas_token_parameters": {"required": True}, + "folder_to_restore": {"required": True}, + } + + _attribute_map = { + "sas_token_parameters": {"key": "sasTokenParameters", "type": "SASTokenParameter"}, + "folder_to_restore": {"key": "folderToRestore", "type": "str"}, + } + + def __init__(self, *, sas_token_parameters: "SASTokenParameter", folder_to_restore: str, **kwargs): + """ + :keyword sas_token_parameters: Required. + :paramtype sas_token_parameters: ~azure.keyvault.administration._generated_models.SASTokenParameter + :keyword folder_to_restore: The Folder name of the blob where the previous successful full + backup was stored. Required. + :paramtype folder_to_restore: str + """ + super().__init__(**kwargs) + self.sas_token_parameters = sas_token_parameters + self.folder_to_restore = folder_to_restore + + +class RoleAssignment(_serialization.Model): + """Role Assignments. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The role assignment ID. + :vartype id: str + :ivar name: The role assignment name. + :vartype name: str + :ivar type: The role assignment type. + :vartype type: str + :ivar properties: Role assignment properties. + :vartype properties: ~azure.keyvault.administration._generated_models.RoleAssignmentPropertiesWithScope + """ + + _validation = { + "id": {"readonly": True}, + "name": {"readonly": True}, + "type": {"readonly": True}, + } + + _attribute_map = { + "id": {"key": "id", "type": "str"}, + "name": {"key": "name", "type": "str"}, + "type": {"key": "type", "type": "str"}, + "properties": {"key": "properties", "type": "RoleAssignmentPropertiesWithScope"}, + } + + def __init__(self, *, properties: Optional["RoleAssignmentPropertiesWithScope"] = None, **kwargs): + """ + :keyword properties: Role assignment properties. + :paramtype properties: ~azure.keyvault.administration._generated_models.RoleAssignmentPropertiesWithScope + """ + super().__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.properties = properties + + +class RoleAssignmentCreateParameters(_serialization.Model): + """Role assignment create parameters. + + All required parameters must be populated in order to send to Azure. + + :ivar properties: Role assignment properties. Required. + :vartype properties: ~azure.keyvault.administration._generated_models.RoleAssignmentProperties + """ + + _validation = { + "properties": {"required": True}, + } + + _attribute_map = { + "properties": {"key": "properties", "type": "RoleAssignmentProperties"}, + } + + def __init__(self, *, properties: "RoleAssignmentProperties", **kwargs): + """ + :keyword properties: Role assignment properties. Required. + :paramtype properties: ~azure.keyvault.administration._generated_models.RoleAssignmentProperties + """ + super().__init__(**kwargs) + self.properties = properties + + +class RoleAssignmentFilter(_serialization.Model): + """Role Assignments filter. + + :ivar principal_id: Returns role assignment of the specific principal. + :vartype principal_id: str + """ + + _attribute_map = { + "principal_id": {"key": "principalId", "type": "str"}, + } + + def __init__(self, *, principal_id: Optional[str] = None, **kwargs): + """ + :keyword principal_id: Returns role assignment of the specific principal. + :paramtype principal_id: str + """ + super().__init__(**kwargs) + self.principal_id = principal_id + + +class RoleAssignmentListResult(_serialization.Model): + """Role assignment list operation result. + + :ivar value: Role assignment list. + :vartype value: list[~azure.keyvault.administration._generated_models.RoleAssignment] + :ivar next_link: The URL to use for getting the next set of results. + :vartype next_link: str + """ + + _attribute_map = { + "value": {"key": "value", "type": "[RoleAssignment]"}, + "next_link": {"key": "nextLink", "type": "str"}, + } + + def __init__( + self, *, value: Optional[List["RoleAssignment"]] = None, next_link: Optional[str] = None, **kwargs + ): + """ + :keyword value: Role assignment list. + :paramtype value: list[~azure.keyvault.administration._generated_models.RoleAssignment] + :keyword next_link: The URL to use for getting the next set of results. + :paramtype next_link: str + """ + super().__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class RoleAssignmentProperties(_serialization.Model): + """Role assignment properties. + + All required parameters must be populated in order to send to Azure. + + :ivar role_definition_id: The role definition ID used in the role assignment. Required. + :vartype role_definition_id: str + :ivar principal_id: The principal ID assigned to the role. This maps to the ID inside the + Active Directory. It can point to a user, service principal, or security group. Required. + :vartype principal_id: str + """ + + _validation = { + "role_definition_id": {"required": True}, + "principal_id": {"required": True}, + } + + _attribute_map = { + "role_definition_id": {"key": "roleDefinitionId", "type": "str"}, + "principal_id": {"key": "principalId", "type": "str"}, + } + + def __init__(self, *, role_definition_id: str, principal_id: str, **kwargs): + """ + :keyword role_definition_id: The role definition ID used in the role assignment. Required. + :paramtype role_definition_id: str + :keyword principal_id: The principal ID assigned to the role. This maps to the ID inside the + Active Directory. It can point to a user, service principal, or security group. Required. + :paramtype principal_id: str + """ + super().__init__(**kwargs) + self.role_definition_id = role_definition_id + self.principal_id = principal_id + + +class RoleAssignmentPropertiesWithScope(_serialization.Model): + """Role assignment properties with scope. + + :ivar scope: The role scope. Known values are: "/" and "/keys". + :vartype scope: str or ~azure.keyvault.administration._generated_models.RoleScope + :ivar role_definition_id: The role definition ID. + :vartype role_definition_id: str + :ivar principal_id: The principal ID. + :vartype principal_id: str + """ + + _attribute_map = { + "scope": {"key": "scope", "type": "str"}, + "role_definition_id": {"key": "roleDefinitionId", "type": "str"}, + "principal_id": {"key": "principalId", "type": "str"}, + } + + def __init__( + self, + *, + scope: Optional[Union[str, "RoleScope"]] = None, + role_definition_id: Optional[str] = None, + principal_id: Optional[str] = None, + **kwargs + ): + """ + :keyword scope: The role scope. Known values are: "/" and "/keys". + :paramtype scope: str or ~azure.keyvault.administration._generated_models.RoleScope + :keyword role_definition_id: The role definition ID. + :paramtype role_definition_id: str + :keyword principal_id: The principal ID. + :paramtype principal_id: str + """ + super().__init__(**kwargs) + self.scope = scope + self.role_definition_id = role_definition_id + self.principal_id = principal_id + + +class RoleDefinition(_serialization.Model): + """Role definition. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The role definition ID. + :vartype id: str + :ivar name: The role definition name. + :vartype name: str + :ivar type: The role definition type. "Microsoft.Authorization/roleDefinitions" + :vartype type: str or ~azure.keyvault.administration._generated_models.RoleDefinitionType + :ivar role_name: The role name. + :vartype role_name: str + :ivar description: The role definition description. + :vartype description: str + :ivar role_type: The role type. Known values are: "AKVBuiltInRole" and "CustomRole". + :vartype role_type: str or ~azure.keyvault.administration._generated_models.RoleType + :ivar permissions: Role definition permissions. + :vartype permissions: list[~azure.keyvault.administration._generated_models.Permission] + :ivar assignable_scopes: Role definition assignable scopes. + :vartype assignable_scopes: list[str or ~azure.keyvault.administration._generated_models.RoleScope] + """ + + _validation = { + "id": {"readonly": True}, + "name": {"readonly": True}, + "type": {"readonly": True}, + } + + _attribute_map = { + "id": {"key": "id", "type": "str"}, + "name": {"key": "name", "type": "str"}, + "type": {"key": "type", "type": "str"}, + "role_name": {"key": "properties.roleName", "type": "str"}, + "description": {"key": "properties.description", "type": "str"}, + "role_type": {"key": "properties.type", "type": "str"}, + "permissions": {"key": "properties.permissions", "type": "[Permission]"}, + "assignable_scopes": {"key": "properties.assignableScopes", "type": "[str]"}, + } + + def __init__( + self, + *, + role_name: Optional[str] = None, + description: Optional[str] = None, + role_type: Optional[Union[str, "RoleType"]] = None, + permissions: Optional[List["Permission"]] = None, + assignable_scopes: Optional[List[Union[str, "RoleScope"]]] = None, + **kwargs + ): + """ + :keyword role_name: The role name. + :paramtype role_name: str + :keyword description: The role definition description. + :paramtype description: str + :keyword role_type: The role type. Known values are: "AKVBuiltInRole" and "CustomRole". + :paramtype role_type: str or ~azure.keyvault.administration._generated_models.RoleType + :keyword permissions: Role definition permissions. + :paramtype permissions: list[~azure.keyvault.administration._generated_models.Permission] + :keyword assignable_scopes: Role definition assignable scopes. + :paramtype assignable_scopes: list[str or ~azure.keyvault.administration._generated_models.RoleScope] + """ + super().__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.role_name = role_name + self.description = description + self.role_type = role_type + self.permissions = permissions + self.assignable_scopes = assignable_scopes + + +class RoleDefinitionCreateParameters(_serialization.Model): + """Role definition create parameters. + + All required parameters must be populated in order to send to Azure. + + :ivar properties: Role definition properties. Required. + :vartype properties: ~azure.keyvault.administration._generated_models.RoleDefinitionProperties + """ + + _validation = { + "properties": {"required": True}, + } + + _attribute_map = { + "properties": {"key": "properties", "type": "RoleDefinitionProperties"}, + } + + def __init__(self, *, properties: "RoleDefinitionProperties", **kwargs): + """ + :keyword properties: Role definition properties. Required. + :paramtype properties: ~azure.keyvault.administration._generated_models.RoleDefinitionProperties + """ + super().__init__(**kwargs) + self.properties = properties + + +class RoleDefinitionFilter(_serialization.Model): + """Role Definitions filter. + + :ivar role_name: Returns role definition with the specific name. + :vartype role_name: str + """ + + _attribute_map = { + "role_name": {"key": "roleName", "type": "str"}, + } + + def __init__(self, *, role_name: Optional[str] = None, **kwargs): + """ + :keyword role_name: Returns role definition with the specific name. + :paramtype role_name: str + """ + super().__init__(**kwargs) + self.role_name = role_name + + +class RoleDefinitionListResult(_serialization.Model): + """Role definition list operation result. + + :ivar value: Role definition list. + :vartype value: list[~azure.keyvault.administration._generated_models.RoleDefinition] + :ivar next_link: The URL to use for getting the next set of results. + :vartype next_link: str + """ + + _attribute_map = { + "value": {"key": "value", "type": "[RoleDefinition]"}, + "next_link": {"key": "nextLink", "type": "str"}, + } + + def __init__( + self, *, value: Optional[List["RoleDefinition"]] = None, next_link: Optional[str] = None, **kwargs + ): + """ + :keyword value: Role definition list. + :paramtype value: list[~azure.keyvault.administration._generated_models.RoleDefinition] + :keyword next_link: The URL to use for getting the next set of results. + :paramtype next_link: str + """ + super().__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class RoleDefinitionProperties(_serialization.Model): + """Role definition properties. + + :ivar role_name: The role name. + :vartype role_name: str + :ivar description: The role definition description. + :vartype description: str + :ivar role_type: The role type. Known values are: "AKVBuiltInRole" and "CustomRole". + :vartype role_type: str or ~azure.keyvault.administration._generated_models.RoleType + :ivar permissions: Role definition permissions. + :vartype permissions: list[~azure.keyvault.administration._generated_models.Permission] + :ivar assignable_scopes: Role definition assignable scopes. + :vartype assignable_scopes: list[str or ~azure.keyvault.administration._generated_models.RoleScope] + """ + + _attribute_map = { + "role_name": {"key": "roleName", "type": "str"}, + "description": {"key": "description", "type": "str"}, + "role_type": {"key": "type", "type": "str"}, + "permissions": {"key": "permissions", "type": "[Permission]"}, + "assignable_scopes": {"key": "assignableScopes", "type": "[str]"}, + } + + def __init__( + self, + *, + role_name: Optional[str] = None, + description: Optional[str] = None, + role_type: Optional[Union[str, "RoleType"]] = None, + permissions: Optional[List["Permission"]] = None, + assignable_scopes: Optional[List[Union[str, "RoleScope"]]] = None, + **kwargs + ): + """ + :keyword role_name: The role name. + :paramtype role_name: str + :keyword description: The role definition description. + :paramtype description: str + :keyword role_type: The role type. Known values are: "AKVBuiltInRole" and "CustomRole". + :paramtype role_type: str or ~azure.keyvault.administration._generated_models.RoleType + :keyword permissions: Role definition permissions. + :paramtype permissions: list[~azure.keyvault.administration._generated_models.Permission] + :keyword assignable_scopes: Role definition assignable scopes. + :paramtype assignable_scopes: list[str or ~azure.keyvault.administration._generated_models.RoleScope] + """ + super().__init__(**kwargs) + self.role_name = role_name + self.description = description + self.role_type = role_type + self.permissions = permissions + self.assignable_scopes = assignable_scopes + + +class SASTokenParameter(_serialization.Model): + """SASTokenParameter. + + All required parameters must be populated in order to send to Azure. + + :ivar storage_resource_uri: Azure Blob storage container Uri. Required. + :vartype storage_resource_uri: str + :ivar token: The SAS token pointing to an Azure Blob storage container. Required. + :vartype token: str + """ + + _validation = { + "storage_resource_uri": {"required": True}, + "token": {"required": True}, + } + + _attribute_map = { + "storage_resource_uri": {"key": "storageResourceUri", "type": "str"}, + "token": {"key": "token", "type": "str"}, + } + + def __init__(self, *, storage_resource_uri: str, token: str, **kwargs): + """ + :keyword storage_resource_uri: Azure Blob storage container Uri. Required. + :paramtype storage_resource_uri: str + :keyword token: The SAS token pointing to an Azure Blob storage container. Required. + :paramtype token: str + """ + super().__init__(**kwargs) + self.storage_resource_uri = storage_resource_uri + self.token = token + + +class SelectiveKeyRestoreOperation(_serialization.Model): + """Selective Key Restore operation. + + :ivar status: Status of the restore operation. + :vartype status: str + :ivar status_details: The status details of restore operation. + :vartype status_details: str + :ivar error: Error encountered, if any, during the selective key restore operation. + :vartype error: ~azure.keyvault.administration._generated_models.Error + :ivar job_id: Identifier for the selective key restore operation. + :vartype job_id: str + :ivar start_time: The start time of the restore operation. + :vartype start_time: ~datetime.datetime + :ivar end_time: The end time of the restore operation. + :vartype end_time: ~datetime.datetime + """ + + _attribute_map = { + "status": {"key": "status", "type": "str"}, + "status_details": {"key": "statusDetails", "type": "str"}, + "error": {"key": "error", "type": "Error"}, + "job_id": {"key": "jobId", "type": "str"}, + "start_time": {"key": "startTime", "type": "unix-time"}, + "end_time": {"key": "endTime", "type": "unix-time"}, + } + + def __init__( + self, + *, + status: Optional[str] = None, + status_details: Optional[str] = None, + error: Optional["Error"] = None, + job_id: Optional[str] = None, + start_time: Optional[datetime.datetime] = None, + end_time: Optional[datetime.datetime] = None, + **kwargs + ): + """ + :keyword status: Status of the restore operation. + :paramtype status: str + :keyword status_details: The status details of restore operation. + :paramtype status_details: str + :keyword error: Error encountered, if any, during the selective key restore operation. + :paramtype error: ~azure.keyvault.administration._generated_models.Error + :keyword job_id: Identifier for the selective key restore operation. + :paramtype job_id: str + :keyword start_time: The start time of the restore operation. + :paramtype start_time: ~datetime.datetime + :keyword end_time: The end time of the restore operation. + :paramtype end_time: ~datetime.datetime + """ + super().__init__(**kwargs) + self.status = status + self.status_details = status_details + self.error = error + self.job_id = job_id + self.start_time = start_time + self.end_time = end_time + + +class SelectiveKeyRestoreOperationParameters(_serialization.Model): + """SelectiveKeyRestoreOperationParameters. + + All required parameters must be populated in order to send to Azure. + + :ivar sas_token_parameters: Required. + :vartype sas_token_parameters: ~azure.keyvault.administration._generated_models.SASTokenParameter + :ivar folder: The Folder name of the blob where the previous successful full backup was stored. + Required. + :vartype folder: str + """ + + _validation = { + "sas_token_parameters": {"required": True}, + "folder": {"required": True}, + } + + _attribute_map = { + "sas_token_parameters": {"key": "sasTokenParameters", "type": "SASTokenParameter"}, + "folder": {"key": "folder", "type": "str"}, + } + + def __init__(self, *, sas_token_parameters: "SASTokenParameter", folder: str, **kwargs): + """ + :keyword sas_token_parameters: Required. + :paramtype sas_token_parameters: ~azure.keyvault.administration._generated_models.SASTokenParameter + :keyword folder: The Folder name of the blob where the previous successful full backup was + stored. Required. + :paramtype folder: str + """ + super().__init__(**kwargs) + self.sas_token_parameters = sas_token_parameters + self.folder = folder + + +class Setting(_serialization.Model): + """Setting. + + All required parameters must be populated in order to send to Azure. + + :ivar name: The account setting to be updated. Required. + :vartype name: str + :ivar value: The value of the pool setting. Required. + :vartype value: str + :ivar type: The type specifier of the value. "boolean" + :vartype type: str or ~azure.keyvault.administration._generated_models.SettingTypeEnum + """ + + _validation = { + "name": {"required": True}, + "value": {"required": True}, + } + + _attribute_map = { + "name": {"key": "name", "type": "str"}, + "value": {"key": "value", "type": "str"}, + "type": {"key": "type", "type": "str"}, + } + + def __init__( + self, *, name: str, value: str, type: Optional[Union[str, "SettingTypeEnum"]] = None, **kwargs + ): + """ + :keyword name: The account setting to be updated. Required. + :paramtype name: str + :keyword value: The value of the pool setting. Required. + :paramtype value: str + :keyword type: The type specifier of the value. "boolean" + :paramtype type: str or ~azure.keyvault.administration._generated_models.SettingTypeEnum + """ + super().__init__(**kwargs) + self.name = name + self.value = value + self.type = type + + +class SettingsListResult(_serialization.Model): + """The settings list result. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar settings: A response message containing a list of account settings with their associated + value. + :vartype settings: list[~azure.keyvault.administration._generated_models.models.Setting] + """ + + _validation = { + "settings": {"readonly": True}, + } + + _attribute_map = { + "settings": {"key": "settings", "type": "[Setting]"}, + } + + def __init__(self, **kwargs): + """ """ + super().__init__(**kwargs) + self.settings = None + + +class UpdateSettingsRequest(_serialization.Model): + """The update settings request object. + + All required parameters must be populated in order to send to Azure. + + :ivar value: The value of the pool setting. Required. + :vartype value: str + """ + + _validation = { + "value": {"required": True}, + } + + _attribute_map = { + "value": {"key": "value", "type": "str"}, + } + + def __init__(self, *, value: str, **kwargs): + """ + :keyword value: The value of the pool setting. Required. + :paramtype value: str + """ + super().__init__(**kwargs) + self.value = value + + +class DataAction(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Supported permissions for data actions.""" + + #: Read HSM key metadata. + READ_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/read/action" + #: Update an HSM key. + WRITE_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/write/action" + #: Read deleted HSM key. + READ_DELETED_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/deletedKeys/read/action" + #: Recover deleted HSM key. + RECOVER_DELETED_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/deletedKeys/recover/action" + #: Backup HSM keys. + BACKUP_HSM_KEYS = "Microsoft.KeyVault/managedHsm/keys/backup/action" + #: Restore HSM keys. + RESTORE_HSM_KEYS = "Microsoft.KeyVault/managedHsm/keys/restore/action" + #: Delete role assignment. + DELETE_ROLE_ASSIGNMENT = "Microsoft.KeyVault/managedHsm/roleAssignments/delete/action" + #: Get role assignment. + GET_ROLE_ASSIGNMENT = "Microsoft.KeyVault/managedHsm/roleAssignments/read/action" + #: Create or update role assignment. + WRITE_ROLE_ASSIGNMENT = "Microsoft.KeyVault/managedHsm/roleAssignments/write/action" + #: Get role definition. + READ_ROLE_DEFINITION = "Microsoft.KeyVault/managedHsm/roleDefinitions/read/action" + #: Create or update role definition. + WRITE_ROLE_DEFINITION = "Microsoft.KeyVault/managedHsm/roleDefinitions/write/action" + #: Delete role definition. + DELETE_ROLE_DEFINITION = "Microsoft.KeyVault/managedHsm/roleDefinitions/delete/action" + #: Encrypt using an HSM key. + ENCRYPT_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/encrypt/action" + #: Decrypt using an HSM key. + DECRYPT_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/decrypt/action" + #: Wrap using an HSM key. + WRAP_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/wrap/action" + #: Unwrap using an HSM key. + UNWRAP_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/unwrap/action" + #: Sign using an HSM key. + SIGN_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/sign/action" + #: Verify using an HSM key. + VERIFY_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/verify/action" + #: Create an HSM key. + CREATE_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/create" + #: Delete an HSM key. + DELETE_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/delete" + #: Export an HSM key. + EXPORT_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/export/action" + #: Release an HSM key using Secure Key Release. + RELEASE_KEY = "Microsoft.KeyVault/managedHsm/keys/release/action" + #: Import an HSM key. + IMPORT_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/import/action" + #: Purge a deleted HSM key. + PURGE_DELETED_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/deletedKeys/delete" + #: Download an HSM security domain. + DOWNLOAD_HSM_SECURITY_DOMAIN = "Microsoft.KeyVault/managedHsm/securitydomain/download/action" + #: Check status of HSM security domain download. + DOWNLOAD_HSM_SECURITY_DOMAIN_STATUS = "Microsoft.KeyVault/managedHsm/securitydomain/download/read" + #: Upload an HSM security domain. + UPLOAD_HSM_SECURITY_DOMAIN = "Microsoft.KeyVault/managedHsm/securitydomain/upload/action" + #: Check the status of the HSM security domain exchange file. + READ_HSM_SECURITY_DOMAIN_STATUS = "Microsoft.KeyVault/managedHsm/securitydomain/upload/read" + #: Download an HSM security domain transfer key. + READ_HSM_SECURITY_DOMAIN_TRANSFER_KEY = "Microsoft.KeyVault/managedHsm/securitydomain/transferkey/read" + #: Start an HSM backup. + START_HSM_BACKUP = "Microsoft.KeyVault/managedHsm/backup/start/action" + #: Start an HSM restore. + START_HSM_RESTORE = "Microsoft.KeyVault/managedHsm/restore/start/action" + #: Read an HSM backup status. + READ_HSM_BACKUP_STATUS = "Microsoft.KeyVault/managedHsm/backup/status/action" + #: Read an HSM restore status. + READ_HSM_RESTORE_STATUS = "Microsoft.KeyVault/managedHsm/restore/status/action" + #: Generate random numbers. + RANDOM_NUMBERS_GENERATE = "Microsoft.KeyVault/managedHsm/rng/action" + + +class RoleDefinitionType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The role definition type.""" + + MICROSOFT_AUTHORIZATION_ROLE_DEFINITIONS = "Microsoft.Authorization/roleDefinitions" + + +class RoleScope(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The role scope.""" + + #: Global scope + GLOBAL = "/" + #: Keys scope + KEYS = "/keys" + + +class RoleType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The role type.""" + + #: Built in role. + BUILT_IN_ROLE = "AKVBuiltInRole" + #: Custom role. + CUSTOM_ROLE = "CustomRole" + + +class SettingTypeEnum(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The type specifier of the value.""" + + BOOLEAN = "boolean" From c60b3f5d537615558fe6e7127fe341128804b39c Mon Sep 17 00:00:00 2001 From: mccoyp Date: Thu, 3 Nov 2022 16:23:46 -0700 Subject: [PATCH 03/14] Add KeyVaultSettingsClient --- .../azure/keyvault/administration/__init__.py | 9 ++- .../azure/keyvault/administration/_enums.py | 6 ++ .../azure/keyvault/administration/_models.py | 37 ++++++++++- .../administration/_settings_client.py | 64 +++++++++++++++++++ .../administration/aio/_settings_client.py | 64 +++++++++++++++++++ 5 files changed, 176 insertions(+), 4 deletions(-) create mode 100644 sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py create mode 100644 sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/__init__.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/__init__.py index b58200d00948..abe54673d276 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/__init__.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/__init__.py @@ -4,19 +4,23 @@ # ------------------------------------ from ._access_control_client import KeyVaultAccessControlClient from ._backup_client import KeyVaultBackupClient -from ._enums import KeyVaultRoleScope, KeyVaultDataAction +from ._enums import KeyVaultRoleScope, KeyVaultDataAction, SettingType from ._internal.client_base import ApiVersion from ._models import ( + GetSettingsResult, KeyVaultBackupResult, KeyVaultPermission, KeyVaultRoleAssignment, KeyVaultRoleAssignmentProperties, KeyVaultRoleDefinition, + KeyVaultSetting, ) +from ._settings_client import KeyVaultSettingsClient __all__ = [ "ApiVersion", + "GetSettingsResult", "KeyVaultBackupResult", "KeyVaultAccessControlClient", "KeyVaultBackupClient", @@ -26,6 +30,9 @@ "KeyVaultRoleAssignmentProperties", "KeyVaultRoleDefinition", "KeyVaultRoleScope", + "KeyVaultSetting", + "KeyVaultSettingsClient", + "SettingType", ] from ._version import VERSION diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_enums.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_enums.py index ce21fb4110ac..98376695c967 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_enums.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_enums.py @@ -85,3 +85,9 @@ class KeyVaultDataAction(str, Enum, metaclass=CaseInsensitiveEnumMeta): READ_HSM_RESTORE_STATUS = "Microsoft.KeyVault/managedHsm/restore/status/action" #: Generate random numbers. RANDOM_NUMBERS_GENERATE = "Microsoft.KeyVault/managedHsm/rng/action" + + +class SettingType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The type specifier of the setting value.""" + + BOOLEAN = "boolean" diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_models.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_models.py index 63ad7be766d1..250829c2f681 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_models.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_models.py @@ -2,10 +2,9 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. # ------------------------------------ -from typing import TYPE_CHECKING +from typing import Any -if TYPE_CHECKING: - from typing import Any +from ._enums import SettingType class KeyVaultPermission(object): @@ -155,3 +154,35 @@ def __init__(self, **kwargs): @classmethod def _from_generated(cls, response, deserialized_operation, response_headers): # pylint:disable=unused-argument return cls(folder_url=deserialized_operation.azure_storage_blob_container_uri) + + +class KeyVaultSetting(object): + """A Key Vault setting. + + :ivar str name: The name of the account setting. + :ivar str value: The value of the pool setting. + :ivar SettingType type: The type specifier of the value. + """ + + def __init__(self, **kwargs): + self.name = kwargs.get("name") + self.value = kwargs.get("value") + self.type = kwargs.get("type") + + @classmethod + def _from_generated(cls, setting): + return cls(name=setting.name, value=setting.value, type=SettingType(setting.type)) + + +class GetSettingsResult(object): + """All settings for an account. + + :ivar list[KeyVaultSetting] settings: A list of an account's setting names and values. + """ + + def __init__(self, **kwargs): + self.settings = kwargs.get("settings") + + @classmethod + def _from_generated(cls, settings): + return cls(settings=[KeyVaultSetting._from_generated(setting) for setting in settings]) diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py new file mode 100644 index 000000000000..4fae4e45cf1f --- /dev/null +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py @@ -0,0 +1,64 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +from ._generated_models import UpdateSettingsRequest +from ._internal import KeyVaultClientBase +from ._models import GetSettingsResult, KeyVaultSetting + +class KeyVaultSettingsClient(KeyVaultClientBase): + """Provides methods to create, update, get, and list settings for an Azure Key Vault. + + :param str vault_url: URL of the vault on which the client will operate. This is also called the vault's "DNS Name". + You should validate that this URL references a valid Key Vault or Managed HSM resource. + See https://aka.ms/azsdk/blog/vault-uri for details. + :param credential: An object which can provide an access token for the vault, such as a credential from + :mod:`azure.identity` + :type credential: :class:`~azure.core.credentials.TokenCredential` + + :keyword api_version: Version of the service API to use. Defaults to the most recent. + :paramtype api_version: ~azure.keyvault.administration.ApiVersion + :keyword bool verify_challenge_resource: Whether to verify the authentication challenge resource matches the Key + Vault or Managed HSM domain. Defaults to True. + """ + + def set_setting(self, name: str, value: str, **kwargs) -> KeyVaultSetting: + """Creates or updates a given account setting with the provided value. + + :param str name: The name of the account setting to create or update. + :param str value: The value to set. + + :returns: The created or updated account setting, as a :class:`~azure.keyvault.administration.KeyVaultSetting`. + :rtype: ~azure.keyvault.administration.KeyVaultSetting + :raises: :class:`~azure.core.exceptions.HttpResponseError` + """ + parameters = UpdateSettingsRequest(value=value) + result = self._client.update_settings( + vault_base_url=self._vault_url, + setting_name=name, + parameters=parameters, + **kwargs + ) + return KeyVaultSetting._from_generated(result) + + def get_setting(self, name: str, **kwargs) -> KeyVaultSetting: + """Gets the setting with the specified name. + + :param str name: The name of the account setting. + + :returns: The account setting, as a :class:`~azure.keyvault.administration.KeyVaultSetting`. + :rtype: ~azure.keyvault.administration.KeyVaultSetting + :raises: :class:`~azure.core.exceptions.HttpResponseError` + """ + result = self._client.get_setting_value(vault_base_url=self._vault_url, setting_name=name, **kwargs) + return KeyVaultSetting._from_generated(result) + + def get_settings(self, **kwargs) -> GetSettingsResult: + """Gets all account settings. + + :returns: A :class:`~azure.keyvault.administration.GetSettingsResult` object containing the account's settings. + :rtype: ~azure.keyvault.administration.GetSettingsResult + :raises: :class:`~azure.core.exceptions.HttpResponseError` + """ + result = self._client.get_settings(vault_base_url=self._vault_url, *kwargs) + return GetSettingsResult._from_generated(result) diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py new file mode 100644 index 000000000000..ef347a68d7ed --- /dev/null +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py @@ -0,0 +1,64 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +from .._generated_models import UpdateSettingsRequest +from .._internal import AsyncKeyVaultClientBase +from .._models import GetSettingsResult, KeyVaultSetting + +class KeyVaultSettingsClient(AsyncKeyVaultClientBase): + """Provides methods to create, update, get, and list settings for an Azure Key Vault. + + :param str vault_url: URL of the vault on which the client will operate. This is also called the vault's "DNS Name". + You should validate that this URL references a valid Key Vault or Managed HSM resource. + See https://aka.ms/azsdk/blog/vault-uri for details. + :param credential: An object which can provide an access token for the vault, such as a credential from + :mod:`azure.identity.aio` + :type credential: :class:`~azure.core.credentials_async.AsyncTokenCredential` + + :keyword api_version: Version of the service API to use. Defaults to the most recent. + :paramtype api_version: ~azure.keyvault.administration.ApiVersion + :keyword bool verify_challenge_resource: Whether to verify the authentication challenge resource matches the Key + Vault or Managed HSM domain. Defaults to True. + """ + + async def set_setting(self, name: str, value: str, **kwargs) -> KeyVaultSetting: + """Creates or updates a given account setting with the provided value. + + :param str name: The name of the account setting to create or update. + :param str value: The value to set. + + :returns: The created or updated account setting, as a :class:`~azure.keyvault.administration.KeyVaultSetting`. + :rtype: ~azure.keyvault.administration.KeyVaultSetting + :raises: :class:`~azure.core.exceptions.HttpResponseError` + """ + parameters = UpdateSettingsRequest(value=value) + result = await self._client.update_settings( + vault_base_url=self._vault_url, + setting_name=name, + parameters=parameters, + **kwargs + ) + return KeyVaultSetting._from_generated(result) + + async def get_setting(self, name: str, **kwargs) -> KeyVaultSetting: + """Gets the setting with the specified name. + + :param str name: The name of the account setting. + + :returns: The account setting, as a :class:`~azure.keyvault.administration.KeyVaultSetting`. + :rtype: ~azure.keyvault.administration.KeyVaultSetting + :raises: :class:`~azure.core.exceptions.HttpResponseError` + """ + result = await self._client.get_setting_value(vault_base_url=self._vault_url, setting_name=name, **kwargs) + return KeyVaultSetting._from_generated(result) + + async def get_settings(self, **kwargs) -> GetSettingsResult: + """Gets all account settings. + + :returns: A :class:`~azure.keyvault.administration.GetSettingsResult` object containing the account's settings. + :rtype: ~azure.keyvault.administration.GetSettingsResult + :raises: :class:`~azure.core.exceptions.HttpResponseError` + """ + result = await self._client.get_settings(vault_base_url=self._vault_url, *kwargs) + return GetSettingsResult._from_generated(result) From 5752d471f51eda5f73065b07d1c20497460ec055 Mon Sep 17 00:00:00 2001 From: mccoyp Date: Thu, 3 Nov 2022 20:07:01 -0700 Subject: [PATCH 04/14] Add API version; drop 3.6; add 3.11 --- .../azure-keyvault-administration/CHANGELOG.md | 10 +++++----- sdk/keyvault/azure-keyvault-administration/README.md | 5 +++-- .../keyvault/administration/_internal/client_base.py | 3 ++- sdk/keyvault/azure-keyvault-administration/setup.py | 6 +++--- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/sdk/keyvault/azure-keyvault-administration/CHANGELOG.md b/sdk/keyvault/azure-keyvault-administration/CHANGELOG.md index 74f978807282..f448d96a4f93 100644 --- a/sdk/keyvault/azure-keyvault-administration/CHANGELOG.md +++ b/sdk/keyvault/azure-keyvault-administration/CHANGELOG.md @@ -1,14 +1,14 @@ # Release History -## 4.3.0b1 (Unreleased) +## 4.3.0b1 (2022-11-08) ### Features Added - -### Breaking Changes - -### Bugs Fixed +- Added sync and async `KeyVaultSettingsClient`s for getting and updating Managed HSM settings. +- Added support for service API version `7.4-preview.1` ### Other Changes +- Python 3.6 is no longer supported. Please use Python version 3.7 or later. +- Key Vault API version `7.4-preview.1` is now the default - Updated minimum `azure-core` version to 1.24.0 - Dropped `msrest` requirement - Added requirement for `isodate>=0.6.1` (`isodate` was required by `msrest`) diff --git a/sdk/keyvault/azure-keyvault-administration/README.md b/sdk/keyvault/azure-keyvault-administration/README.md index 3422d69a07b9..a2c43bf6ab81 100644 --- a/sdk/keyvault/azure-keyvault-administration/README.md +++ b/sdk/keyvault/azure-keyvault-administration/README.md @@ -18,7 +18,8 @@ create, manage, and deploy public and private SSL/TLS certificates ## _Disclaimer_ -_Azure SDK Python packages support for Python 2.7 has ended 01 January 2022. For more information and questions, please refer to https://github.com/Azure/azure-sdk-for-python/issues/20691_. +_Azure SDK Python packages support for Python 2.7 has ended 01 January 2022. For more information and questions, please refer to https://github.com/Azure/azure-sdk-for-python/issues/20691._ +_Python 3.7 or later is required to use this package. For more details, please refer to [Azure SDK for Python version support policy](https://github.com/Azure/azure-sdk-for-python/wiki/Azure-SDKs-Python-version-support-policy)._ ## Getting started ### Install packages @@ -32,7 +33,7 @@ authentication as demonstrated below. ### Prerequisites * An [Azure subscription][azure_sub] -* Python 3.6 or later +* Python 3.7 or later * An existing [Key Vault Managed HSM][managed_hsm]. If you need to create one, you can do so using the Azure CLI by following the steps in [this document][managed_hsm_cli]. ### Authenticate the client diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_internal/client_base.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_internal/client_base.py index 84e913a8c0df..f7bb660f6bc5 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_internal/client_base.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_internal/client_base.py @@ -23,11 +23,12 @@ class ApiVersion(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Key Vault API versions supported by this package""" #: this is the default version + V7_4_preview_1 = "7.4-preview.1" V7_3 = "7.3" V7_2 = "7.2" -DEFAULT_VERSION = ApiVersion.V7_3 +DEFAULT_VERSION = ApiVersion.V7_4_preview_1 class KeyVaultClientBase(object): diff --git a/sdk/keyvault/azure-keyvault-administration/setup.py b/sdk/keyvault/azure-keyvault-administration/setup.py index ee818e4092a5..76cbc699a5de 100644 --- a/sdk/keyvault/azure-keyvault-administration/setup.py +++ b/sdk/keyvault/azure-keyvault-administration/setup.py @@ -44,15 +44,15 @@ author_email="azurekeyvault@microsoft.com", url="https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/keyvault/azure-keyvault-administration", classifiers=[ - "Development Status :: 5 - Production/Stable", + "Development Status :: 4 - Beta", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", "License :: OSI Approved :: MIT License", ], zip_safe=False, @@ -65,7 +65,7 @@ "azure.keyvault", ] ), - python_requires=">=3.6", + python_requires=">=3.7", install_requires=[ "azure-common~=1.1", "azure-core<2.0.0,>=1.24.0", From 515089b4d2035c7a4f64e0ac48afb73d58203b5d Mon Sep 17 00:00:00 2001 From: mccoyp Date: Fri, 4 Nov 2022 11:44:27 -0700 Subject: [PATCH 05/14] We can't create settings --- .../administration/_settings_client.py | 40 +++++++++---------- .../administration/aio/_settings_client.py | 40 +++++++++---------- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py index 4fae4e45cf1f..ef4edca323a2 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py @@ -7,7 +7,7 @@ from ._models import GetSettingsResult, KeyVaultSetting class KeyVaultSettingsClient(KeyVaultClientBase): - """Provides methods to create, update, get, and list settings for an Azure Key Vault. + """Provides methods to update, get, and list settings for an Azure Key Vault. :param str vault_url: URL of the vault on which the client will operate. This is also called the vault's "DNS Name". You should validate that this URL references a valid Key Vault or Managed HSM resource. @@ -22,25 +22,6 @@ class KeyVaultSettingsClient(KeyVaultClientBase): Vault or Managed HSM domain. Defaults to True. """ - def set_setting(self, name: str, value: str, **kwargs) -> KeyVaultSetting: - """Creates or updates a given account setting with the provided value. - - :param str name: The name of the account setting to create or update. - :param str value: The value to set. - - :returns: The created or updated account setting, as a :class:`~azure.keyvault.administration.KeyVaultSetting`. - :rtype: ~azure.keyvault.administration.KeyVaultSetting - :raises: :class:`~azure.core.exceptions.HttpResponseError` - """ - parameters = UpdateSettingsRequest(value=value) - result = self._client.update_settings( - vault_base_url=self._vault_url, - setting_name=name, - parameters=parameters, - **kwargs - ) - return KeyVaultSetting._from_generated(result) - def get_setting(self, name: str, **kwargs) -> KeyVaultSetting: """Gets the setting with the specified name. @@ -62,3 +43,22 @@ def get_settings(self, **kwargs) -> GetSettingsResult: """ result = self._client.get_settings(vault_base_url=self._vault_url, *kwargs) return GetSettingsResult._from_generated(result) + + def update_setting(self, name: str, value: str, **kwargs) -> KeyVaultSetting: + """Updates a given account setting with the provided value. + + :param str name: The name of the account setting to update. + :param str value: The value to set. + + :returns: The updated account setting, as a :class:`~azure.keyvault.administration.KeyVaultSetting`. + :rtype: ~azure.keyvault.administration.KeyVaultSetting + :raises: :class:`~azure.core.exceptions.HttpResponseError` + """ + parameters = UpdateSettingsRequest(value=value) + result = self._client.update_settings( + vault_base_url=self._vault_url, + setting_name=name, + parameters=parameters, + **kwargs + ) + return KeyVaultSetting._from_generated(result) diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py index ef347a68d7ed..64405cbd5471 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py @@ -7,7 +7,7 @@ from .._models import GetSettingsResult, KeyVaultSetting class KeyVaultSettingsClient(AsyncKeyVaultClientBase): - """Provides methods to create, update, get, and list settings for an Azure Key Vault. + """Provides methods to update, get, and list settings for an Azure Key Vault. :param str vault_url: URL of the vault on which the client will operate. This is also called the vault's "DNS Name". You should validate that this URL references a valid Key Vault or Managed HSM resource. @@ -22,25 +22,6 @@ class KeyVaultSettingsClient(AsyncKeyVaultClientBase): Vault or Managed HSM domain. Defaults to True. """ - async def set_setting(self, name: str, value: str, **kwargs) -> KeyVaultSetting: - """Creates or updates a given account setting with the provided value. - - :param str name: The name of the account setting to create or update. - :param str value: The value to set. - - :returns: The created or updated account setting, as a :class:`~azure.keyvault.administration.KeyVaultSetting`. - :rtype: ~azure.keyvault.administration.KeyVaultSetting - :raises: :class:`~azure.core.exceptions.HttpResponseError` - """ - parameters = UpdateSettingsRequest(value=value) - result = await self._client.update_settings( - vault_base_url=self._vault_url, - setting_name=name, - parameters=parameters, - **kwargs - ) - return KeyVaultSetting._from_generated(result) - async def get_setting(self, name: str, **kwargs) -> KeyVaultSetting: """Gets the setting with the specified name. @@ -62,3 +43,22 @@ async def get_settings(self, **kwargs) -> GetSettingsResult: """ result = await self._client.get_settings(vault_base_url=self._vault_url, *kwargs) return GetSettingsResult._from_generated(result) + + async def update_setting(self, name: str, value: str, **kwargs) -> KeyVaultSetting: + """Updates a given account setting with the provided value. + + :param str name: The name of the account setting to update. + :param str value: The value to set. + + :returns: The updated account setting, as a :class:`~azure.keyvault.administration.KeyVaultSetting`. + :rtype: ~azure.keyvault.administration.KeyVaultSetting + :raises: :class:`~azure.core.exceptions.HttpResponseError` + """ + parameters = UpdateSettingsRequest(value=value) + result = await self._client.update_settings( + vault_base_url=self._vault_url, + setting_name=name, + parameters=parameters, + **kwargs + ) + return KeyVaultSetting._from_generated(result) From 8baea715dcd960a6a7c64b7381a724e15c38c199 Mon Sep 17 00:00:00 2001 From: mccoyp Date: Mon, 7 Nov 2022 18:13:45 -0800 Subject: [PATCH 06/14] Expose async client --- .../azure/keyvault/administration/aio/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/__init__.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/__init__.py index af5affe57e5a..d1f1bd6d374a 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/__init__.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/__init__.py @@ -4,5 +4,6 @@ # ------------------------------------ from ._access_control_client import KeyVaultAccessControlClient from ._backup_client import KeyVaultBackupClient +from ._settings_client import KeyVaultSettingsClient -__all__ = ["KeyVaultAccessControlClient", "KeyVaultBackupClient"] +__all__ = ["KeyVaultAccessControlClient", "KeyVaultBackupClient", "KeyVaultSettingsClient"] From 1121dcd32e13c054bbead60daf5474537b30d310 Mon Sep 17 00:00:00 2001 From: mccoyp Date: Mon, 14 Nov 2022 16:19:03 -0800 Subject: [PATCH 07/14] wip; get_settings -> list_settings --- .../keyvault/administration/_settings_client.py | 16 +++++++++++----- .../administration/aio/_settings_client.py | 14 ++++++++++---- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py index ef4edca323a2..aded67a2ad1b 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py @@ -2,9 +2,12 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. # ------------------------------------ +from azure.core.paging import ItemPaged +from azure.core.tracing.decorator import distributed_trace + from ._generated_models import UpdateSettingsRequest from ._internal import KeyVaultClientBase -from ._models import GetSettingsResult, KeyVaultSetting +from ._models import KeyVaultSetting class KeyVaultSettingsClient(KeyVaultClientBase): """Provides methods to update, get, and list settings for an Azure Key Vault. @@ -22,6 +25,7 @@ class KeyVaultSettingsClient(KeyVaultClientBase): Vault or Managed HSM domain. Defaults to True. """ + @distributed_trace def get_setting(self, name: str, **kwargs) -> KeyVaultSetting: """Gets the setting with the specified name. @@ -34,16 +38,18 @@ def get_setting(self, name: str, **kwargs) -> KeyVaultSetting: result = self._client.get_setting_value(vault_base_url=self._vault_url, setting_name=name, **kwargs) return KeyVaultSetting._from_generated(result) - def get_settings(self, **kwargs) -> GetSettingsResult: - """Gets all account settings. + @distributed_trace + def list_settings(self, **kwargs) -> ItemPaged[KeyVaultSetting]: + """Lists all account settings. - :returns: A :class:`~azure.keyvault.administration.GetSettingsResult` object containing the account's settings. - :rtype: ~azure.keyvault.administration.GetSettingsResult + :returns: A paged object containing the account's settings. + :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.administration.KeyVaultSetting] :raises: :class:`~azure.core.exceptions.HttpResponseError` """ result = self._client.get_settings(vault_base_url=self._vault_url, *kwargs) return GetSettingsResult._from_generated(result) + @distributed_trace def update_setting(self, name: str, value: str, **kwargs) -> KeyVaultSetting: """Updates a given account setting with the provided value. diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py index 64405cbd5471..7d6e889c8afb 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py @@ -2,9 +2,12 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. # ------------------------------------ +from azure.core.async_paging import AsyncItemPaged +from azure.core.tracing.decorator_async import distributed_trace_async + from .._generated_models import UpdateSettingsRequest from .._internal import AsyncKeyVaultClientBase -from .._models import GetSettingsResult, KeyVaultSetting +from .._models import KeyVaultSetting class KeyVaultSettingsClient(AsyncKeyVaultClientBase): """Provides methods to update, get, and list settings for an Azure Key Vault. @@ -22,6 +25,7 @@ class KeyVaultSettingsClient(AsyncKeyVaultClientBase): Vault or Managed HSM domain. Defaults to True. """ + @distributed_trace_async async def get_setting(self, name: str, **kwargs) -> KeyVaultSetting: """Gets the setting with the specified name. @@ -34,16 +38,18 @@ async def get_setting(self, name: str, **kwargs) -> KeyVaultSetting: result = await self._client.get_setting_value(vault_base_url=self._vault_url, setting_name=name, **kwargs) return KeyVaultSetting._from_generated(result) - async def get_settings(self, **kwargs) -> GetSettingsResult: - """Gets all account settings. + @distributed_trace_async + async def list_settings(self, **kwargs) -> AsyncItemPaged[KeyVaultSetting]: + """Lists all account settings. :returns: A :class:`~azure.keyvault.administration.GetSettingsResult` object containing the account's settings. - :rtype: ~azure.keyvault.administration.GetSettingsResult + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.administration.KeyVaultSetting] :raises: :class:`~azure.core.exceptions.HttpResponseError` """ result = await self._client.get_settings(vault_base_url=self._vault_url, *kwargs) return GetSettingsResult._from_generated(result) + @distributed_trace_async async def update_setting(self, name: str, value: str, **kwargs) -> KeyVaultSetting: """Updates a given account setting with the provided value. From 2aa1dab406b9d3287c42addecea4d44c7e492650 Mon Sep 17 00:00:00 2001 From: mccoyp Date: Tue, 15 Nov 2022 03:44:48 -0800 Subject: [PATCH 08/14] Return paged list objects --- .../azure-keyvault-administration/CHANGELOG.md | 2 +- .../azure/keyvault/administration/__init__.py | 2 -- .../administration/_internal/client_base.py | 4 ++-- .../azure/keyvault/administration/_models.py | 14 -------------- .../keyvault/administration/_settings_client.py | 10 +++++++++- .../administration/aio/_settings_client.py | 12 ++++++++++-- 6 files changed, 22 insertions(+), 22 deletions(-) diff --git a/sdk/keyvault/azure-keyvault-administration/CHANGELOG.md b/sdk/keyvault/azure-keyvault-administration/CHANGELOG.md index f448d96a4f93..9cb0ac07bf76 100644 --- a/sdk/keyvault/azure-keyvault-administration/CHANGELOG.md +++ b/sdk/keyvault/azure-keyvault-administration/CHANGELOG.md @@ -1,6 +1,6 @@ # Release History -## 4.3.0b1 (2022-11-08) +## 4.3.0b1 (2022-11-15) ### Features Added - Added sync and async `KeyVaultSettingsClient`s for getting and updating Managed HSM settings. diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/__init__.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/__init__.py index abe54673d276..172c30bee403 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/__init__.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/__init__.py @@ -7,7 +7,6 @@ from ._enums import KeyVaultRoleScope, KeyVaultDataAction, SettingType from ._internal.client_base import ApiVersion from ._models import ( - GetSettingsResult, KeyVaultBackupResult, KeyVaultPermission, KeyVaultRoleAssignment, @@ -20,7 +19,6 @@ __all__ = [ "ApiVersion", - "GetSettingsResult", "KeyVaultBackupResult", "KeyVaultAccessControlClient", "KeyVaultBackupClient", diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_internal/client_base.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_internal/client_base.py index f7bb660f6bc5..21aa8df00b22 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_internal/client_base.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_internal/client_base.py @@ -23,12 +23,12 @@ class ApiVersion(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Key Vault API versions supported by this package""" #: this is the default version - V7_4_preview_1 = "7.4-preview.1" + V7_4_PREVIEW_1 = "7.4-preview.1" V7_3 = "7.3" V7_2 = "7.2" -DEFAULT_VERSION = ApiVersion.V7_4_preview_1 +DEFAULT_VERSION = ApiVersion.V7_4_PREVIEW_1 class KeyVaultClientBase(object): diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_models.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_models.py index 250829c2f681..045962510ef0 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_models.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_models.py @@ -172,17 +172,3 @@ def __init__(self, **kwargs): @classmethod def _from_generated(cls, setting): return cls(name=setting.name, value=setting.value, type=SettingType(setting.type)) - - -class GetSettingsResult(object): - """All settings for an account. - - :ivar list[KeyVaultSetting] settings: A list of an account's setting names and values. - """ - - def __init__(self, **kwargs): - self.settings = kwargs.get("settings") - - @classmethod - def _from_generated(cls, settings): - return cls(settings=[KeyVaultSetting._from_generated(setting) for setting in settings]) diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py index aded67a2ad1b..992b30168149 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py @@ -47,7 +47,15 @@ def list_settings(self, **kwargs) -> ItemPaged[KeyVaultSetting]: :raises: :class:`~azure.core.exceptions.HttpResponseError` """ result = self._client.get_settings(vault_base_url=self._vault_url, *kwargs) - return GetSettingsResult._from_generated(result) + + # We don't actually get a paged response from the generated method, so we mock the typical iteration methods + def get_next(next_link=None): + return result.settings + + def extract_data(pipeline_response): + return None, result.settings + + return ItemPaged(get_next, extract_data) @distributed_trace def update_setting(self, name: str, value: str, **kwargs) -> KeyVaultSetting: diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py index 7d6e889c8afb..5022ae5fc902 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py @@ -2,7 +2,7 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. # ------------------------------------ -from azure.core.async_paging import AsyncItemPaged +from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.tracing.decorator_async import distributed_trace_async from .._generated_models import UpdateSettingsRequest @@ -47,7 +47,15 @@ async def list_settings(self, **kwargs) -> AsyncItemPaged[KeyVaultSetting]: :raises: :class:`~azure.core.exceptions.HttpResponseError` """ result = await self._client.get_settings(vault_base_url=self._vault_url, *kwargs) - return GetSettingsResult._from_generated(result) + + # We don't actually get a paged response from the generated method, so we mock the typical iteration methods + async def get_next(next_link=None): + return result.settings + + async def extract_data(pipeline_response): + return None, AsyncList(result.settings) + + return AsyncItemPaged(get_next, extract_data) @distributed_trace_async async def update_setting(self, name: str, value: str, **kwargs) -> KeyVaultSetting: From 84aa4e1385a40a8f7a69525d39fa2923ea40a229 Mon Sep 17 00:00:00 2001 From: mccoyp Date: Tue, 15 Nov 2022 04:48:56 -0800 Subject: [PATCH 09/14] Fix up return values; first tests --- .../administration/_settings_client.py | 5 ++-- .../administration/aio/_settings_client.py | 5 ++-- .../tests/_async_test_case.py | 22 ++++++++++++++-- .../tests/_test_case.py | 23 ++++++++++++++++- .../tests/test_settings_client.py | 23 +++++++++++++++++ .../tests/test_settings_client_async.py | 25 +++++++++++++++++++ 6 files changed, 96 insertions(+), 7 deletions(-) create mode 100644 sdk/keyvault/azure-keyvault-administration/tests/test_settings_client.py create mode 100644 sdk/keyvault/azure-keyvault-administration/tests/test_settings_client_async.py diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py index 992b30168149..a82c8a4c07c3 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py @@ -47,13 +47,14 @@ def list_settings(self, **kwargs) -> ItemPaged[KeyVaultSetting]: :raises: :class:`~azure.core.exceptions.HttpResponseError` """ result = self._client.get_settings(vault_base_url=self._vault_url, *kwargs) + converted_result = [KeyVaultSetting._from_generated(setting) for setting in result.settings] # We don't actually get a paged response from the generated method, so we mock the typical iteration methods def get_next(next_link=None): - return result.settings + return converted_result def extract_data(pipeline_response): - return None, result.settings + return None, converted_result return ItemPaged(get_next, extract_data) diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py index 5022ae5fc902..4f09e998c5d1 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py @@ -47,13 +47,14 @@ async def list_settings(self, **kwargs) -> AsyncItemPaged[KeyVaultSetting]: :raises: :class:`~azure.core.exceptions.HttpResponseError` """ result = await self._client.get_settings(vault_base_url=self._vault_url, *kwargs) + converted_result = [KeyVaultSetting._from_generated(setting) for setting in result.settings] # We don't actually get a paged response from the generated method, so we mock the typical iteration methods async def get_next(next_link=None): - return result.settings + return converted_result async def extract_data(pipeline_response): - return None, AsyncList(result.settings) + return None, AsyncList(converted_result) return AsyncItemPaged(get_next, extract_data) diff --git a/sdk/keyvault/azure-keyvault-administration/tests/_async_test_case.py b/sdk/keyvault/azure-keyvault-administration/tests/_async_test_case.py index d009b1518c03..74d53eb500de 100644 --- a/sdk/keyvault/azure-keyvault-administration/tests/_async_test_case.py +++ b/sdk/keyvault/azure-keyvault-administration/tests/_async_test_case.py @@ -45,7 +45,6 @@ def _set_mgmt_settings_real_values(self): os.environ["AZURE_CLIENT_SECRET"] = os.environ["KEYVAULT_CLIENT_SECRET"] - class KeyVaultBackupClientPreparer(BaseClientPreparer): def __call__(self, fn): async def _preparer(test_class, api_version, **kwargs): @@ -78,6 +77,26 @@ async def _preparer(test_class, api_version, **kwargs): await fn(test_class, client, **kwargs) return _preparer + def create_access_control_client(self, **kwargs): + from azure.keyvault.administration.aio import \ + KeyVaultSettingsClient + + credential = self.get_credential(KeyVaultSettingsClient, is_async=True) + return self.create_client_from_credential( + KeyVaultSettingsClient, credential=credential, vault_url=self.managed_hsm_url, **kwargs + ) + + +class KeyVaultSettingsClientPreparer(BaseClientPreparer): + def __call__(self, fn): + async def _preparer(test_class, api_version, **kwargs): + self._skip_if_not_configured(api_version) + client = self.create_access_control_client(api_version=api_version, **kwargs) + + async with client: + await fn(test_class, client, **kwargs) + return _preparer + def create_access_control_client(self, **kwargs): from azure.keyvault.administration.aio import \ KeyVaultAccessControlClient @@ -88,7 +107,6 @@ def create_access_control_client(self, **kwargs): ) - def get_decorator(**kwargs): """returns a test decorator for test parameterization""" versions = kwargs.pop("api_versions", None) or ApiVersion diff --git a/sdk/keyvault/azure-keyvault-administration/tests/_test_case.py b/sdk/keyvault/azure-keyvault-administration/tests/_test_case.py index daa95e3de0fb..2d9a03df29ef 100644 --- a/sdk/keyvault/azure-keyvault-administration/tests/_test_case.py +++ b/sdk/keyvault/azure-keyvault-administration/tests/_test_case.py @@ -5,6 +5,7 @@ import os import pytest + from azure.keyvault.administration import ApiVersion from azure.keyvault.administration._internal.client_base import DEFAULT_VERSION from devtools_testutils import AzureRecordedTestCase @@ -45,7 +46,6 @@ def _set_mgmt_settings_real_values(self): os.environ["AZURE_CLIENT_SECRET"] = os.environ["KEYVAULT_CLIENT_SECRET"] - class KeyVaultBackupClientPreparer(BaseClientPreparer): def __init__(self, **kwargs) -> None: super().__init__(**kwargs) @@ -93,6 +93,27 @@ def create_access_control_client(self, **kwargs): ) +class KeyVaultSettingsClientPreparer(BaseClientPreparer): + def __init__(self, **kwargs) -> None: + super().__init__(**kwargs) + + def __call__(self, fn): + def _preparer(test_class, api_version, **kwargs): + self._skip_if_not_configured(api_version) + client = self.create_settings_client(api_version=api_version, **kwargs) + + with client: + fn(test_class, client, **kwargs) + return _preparer + + def create_settings_client(self, **kwargs): + from azure.keyvault.administration import KeyVaultSettingsClient + + credential = self.get_credential(KeyVaultSettingsClient) + return self.create_client_from_credential( + KeyVaultSettingsClient, credential=credential, vault_url=self.managed_hsm_url, **kwargs + ) + def get_decorator(**kwargs): """returns a test decorator for test parameterization""" diff --git a/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client.py b/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client.py new file mode 100644 index 000000000000..0c0e66b1718b --- /dev/null +++ b/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client.py @@ -0,0 +1,23 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +import pytest +from azure.keyvault.administration import ApiVersion, KeyVaultDataAction, KeyVaultPermission, KeyVaultRoleScope +from devtools_testutils import recorded_by_proxy + +from _shared.test_case import KeyVaultTestCase +from _test_case import KeyVaultSettingsClientPreparer, get_decorator + +only_7_4 = get_decorator(api_versions=[ApiVersion.V7_4_PREVIEW_1]) + + +class TestAccessControl(KeyVaultTestCase): + @pytest.mark.parametrize("api_version", only_7_4) + @KeyVaultSettingsClientPreparer() + @recorded_by_proxy + def test_list_settings(self, client, **kwargs): + default_settings = [setting for setting in client.list_settings()] + assert len(default_settings) + for setting in default_settings: + assert setting.name and setting.type and setting.value diff --git a/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client_async.py b/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client_async.py new file mode 100644 index 000000000000..73b1ab912aa2 --- /dev/null +++ b/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client_async.py @@ -0,0 +1,25 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +import pytest +from azure.keyvault.administration import ApiVersion +from devtools_testutils.aio import recorded_by_proxy_async + +from _async_test_case import KeyVaultAccessControlClientPreparer, get_decorator +from _shared.test_case_async import KeyVaultTestCase +from test_access_control import assert_role_definitions_equal + +only_7_4 = get_decorator(api_versions=[ApiVersion.V7_4_PREVIEW_1]) + + +class TestAccessControl(KeyVaultTestCase): + @pytest.mark.asyncio + @pytest.mark.parametrize("api_version", only_7_4) + @KeyVaultAccessControlClientPreparer() + @recorded_by_proxy_async + async def test_role_definitions(self, client, **kwargs): + default_settings = [setting async for setting in await client.list_settings()] + assert len(default_settings) + for setting in default_settings: + assert setting.name and setting.type and setting.value From 2d759357e97a7581601ff46b5f00281c39295889 Mon Sep 17 00:00:00 2001 From: mccoyp Date: Tue, 15 Nov 2022 05:26:34 -0800 Subject: [PATCH 10/14] Add settings tests --- .../tests/_async_test_case.py | 12 +++++----- .../tests/test_settings_client.py | 16 ++++++++++++-- .../tests/test_settings_client_async.py | 22 ++++++++++++++----- 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/sdk/keyvault/azure-keyvault-administration/tests/_async_test_case.py b/sdk/keyvault/azure-keyvault-administration/tests/_async_test_case.py index 74d53eb500de..2ae54bb8a057 100644 --- a/sdk/keyvault/azure-keyvault-administration/tests/_async_test_case.py +++ b/sdk/keyvault/azure-keyvault-administration/tests/_async_test_case.py @@ -79,11 +79,11 @@ async def _preparer(test_class, api_version, **kwargs): def create_access_control_client(self, **kwargs): from azure.keyvault.administration.aio import \ - KeyVaultSettingsClient + KeyVaultAccessControlClient - credential = self.get_credential(KeyVaultSettingsClient, is_async=True) + credential = self.get_credential(KeyVaultAccessControlClient, is_async=True) return self.create_client_from_credential( - KeyVaultSettingsClient, credential=credential, vault_url=self.managed_hsm_url, **kwargs + KeyVaultAccessControlClient, credential=credential, vault_url=self.managed_hsm_url, **kwargs ) @@ -99,11 +99,11 @@ async def _preparer(test_class, api_version, **kwargs): def create_access_control_client(self, **kwargs): from azure.keyvault.administration.aio import \ - KeyVaultAccessControlClient + KeyVaultSettingsClient - credential = self.get_credential(KeyVaultAccessControlClient, is_async=True) + credential = self.get_credential(KeyVaultSettingsClient, is_async=True) return self.create_client_from_credential( - KeyVaultAccessControlClient, credential=credential, vault_url=self.managed_hsm_url, **kwargs + KeyVaultSettingsClient, credential=credential, vault_url=self.managed_hsm_url, **kwargs ) diff --git a/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client.py b/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client.py index 0c0e66b1718b..fe531a2f048e 100644 --- a/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client.py +++ b/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client.py @@ -3,7 +3,7 @@ # Licensed under the MIT License. # ------------------------------------ import pytest -from azure.keyvault.administration import ApiVersion, KeyVaultDataAction, KeyVaultPermission, KeyVaultRoleScope +from azure.keyvault.administration import ApiVersion from devtools_testutils import recorded_by_proxy from _shared.test_case import KeyVaultTestCase @@ -12,7 +12,7 @@ only_7_4 = get_decorator(api_versions=[ApiVersion.V7_4_PREVIEW_1]) -class TestAccessControl(KeyVaultTestCase): +class TestSettings(KeyVaultTestCase): @pytest.mark.parametrize("api_version", only_7_4) @KeyVaultSettingsClientPreparer() @recorded_by_proxy @@ -21,3 +21,15 @@ def test_list_settings(self, client, **kwargs): assert len(default_settings) for setting in default_settings: assert setting.name and setting.type and setting.value + + @pytest.mark.parametrize("api_version", only_7_4) + @KeyVaultSettingsClientPreparer() + @recorded_by_proxy + def test_update_settings(self, client, **kwargs): + setting = client.get_setting("AllowKeyManagementOperationsThroughARM") + assert setting.name and setting.type and setting.value + + opposite_value = "false" if setting.value.lower() == "true" else "true" + updated = client.update_setting("AllowKeyManagementOperationsThroughARM", opposite_value) + assert updated.name == setting.name + assert updated.value != setting.value diff --git a/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client_async.py b/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client_async.py index 73b1ab912aa2..a2959b5afab5 100644 --- a/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client_async.py +++ b/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client_async.py @@ -6,20 +6,32 @@ from azure.keyvault.administration import ApiVersion from devtools_testutils.aio import recorded_by_proxy_async -from _async_test_case import KeyVaultAccessControlClientPreparer, get_decorator +from _async_test_case import KeyVaultSettingsClientPreparer, get_decorator from _shared.test_case_async import KeyVaultTestCase -from test_access_control import assert_role_definitions_equal only_7_4 = get_decorator(api_versions=[ApiVersion.V7_4_PREVIEW_1]) -class TestAccessControl(KeyVaultTestCase): +class TestSettings(KeyVaultTestCase): @pytest.mark.asyncio @pytest.mark.parametrize("api_version", only_7_4) - @KeyVaultAccessControlClientPreparer() + @KeyVaultSettingsClientPreparer() @recorded_by_proxy_async - async def test_role_definitions(self, client, **kwargs): + async def test_list_settings(self, client, **kwargs): default_settings = [setting async for setting in await client.list_settings()] assert len(default_settings) for setting in default_settings: assert setting.name and setting.type and setting.value + + @pytest.mark.asyncio + @pytest.mark.parametrize("api_version", only_7_4) + @KeyVaultSettingsClientPreparer() + @recorded_by_proxy_async + async def test_update_settings(self, client, **kwargs): + setting = await client.get_setting("AllowKeyManagementOperationsThroughARM") + assert setting.name and setting.type and setting.value + + opposite_value = "false" if setting.value.lower() == "true" else "true" + updated = await client.update_setting("AllowKeyManagementOperationsThroughARM", opposite_value) + assert updated.name == setting.name + assert updated.value != setting.value From 85663644fa02e71b50ac977ba60653df7f1a1d96 Mon Sep 17 00:00:00 2001 From: mccoyp Date: Tue, 15 Nov 2022 20:09:40 -0800 Subject: [PATCH 11/14] Update test recordings --- sdk/keyvault/azure-keyvault-administration/assets.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/keyvault/azure-keyvault-administration/assets.json b/sdk/keyvault/azure-keyvault-administration/assets.json index d3c1bee492da..7fd4dee31d6b 100644 --- a/sdk/keyvault/azure-keyvault-administration/assets.json +++ b/sdk/keyvault/azure-keyvault-administration/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "python", "TagPrefix": "python/keyvault/azure-keyvault-administration", - "Tag": "python/keyvault/azure-keyvault-administration_d3a997562c" + "Tag": "python/keyvault/azure-keyvault-administration_645db07972" } From 0f13b9329c511270701e86202764df8fc156a301 Mon Sep 17 00:00:00 2001 From: mccoyp Date: Tue, 15 Nov 2022 20:15:03 -0800 Subject: [PATCH 12/14] Drop six --- sdk/keyvault/azure-keyvault-administration/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/keyvault/azure-keyvault-administration/CHANGELOG.md b/sdk/keyvault/azure-keyvault-administration/CHANGELOG.md index 9cb0ac07bf76..a6e077f7d63f 100644 --- a/sdk/keyvault/azure-keyvault-administration/CHANGELOG.md +++ b/sdk/keyvault/azure-keyvault-administration/CHANGELOG.md @@ -11,6 +11,7 @@ - Key Vault API version `7.4-preview.1` is now the default - Updated minimum `azure-core` version to 1.24.0 - Dropped `msrest` requirement +- Dropped `six` requirement - Added requirement for `isodate>=0.6.1` (`isodate` was required by `msrest`) - Added requirement for `typing-extensions>=4.0.1` From 054a2707ed62249f0818011a78f413ac48cb7c1a Mon Sep 17 00:00:00 2001 From: mccoyp Date: Tue, 15 Nov 2022 21:27:17 -0800 Subject: [PATCH 13/14] Pylint; flaky test --- sdk/keyvault/azure-keyvault-administration/assets.json | 2 +- .../azure/keyvault/administration/_settings_client.py | 5 +++-- .../azure/keyvault/administration/aio/_settings_client.py | 5 +++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/sdk/keyvault/azure-keyvault-administration/assets.json b/sdk/keyvault/azure-keyvault-administration/assets.json index 7fd4dee31d6b..78acaf1c7701 100644 --- a/sdk/keyvault/azure-keyvault-administration/assets.json +++ b/sdk/keyvault/azure-keyvault-administration/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "python", "TagPrefix": "python/keyvault/azure-keyvault-administration", - "Tag": "python/keyvault/azure-keyvault-administration_645db07972" + "Tag": "python/keyvault/azure-keyvault-administration_ed5ac87a41" } diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py index a82c8a4c07c3..9760ad05f445 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py @@ -24,6 +24,7 @@ class KeyVaultSettingsClient(KeyVaultClientBase): :keyword bool verify_challenge_resource: Whether to verify the authentication challenge resource matches the Key Vault or Managed HSM domain. Defaults to True. """ + # pylint:disable=protected-access @distributed_trace def get_setting(self, name: str, **kwargs) -> KeyVaultSetting: @@ -50,10 +51,10 @@ def list_settings(self, **kwargs) -> ItemPaged[KeyVaultSetting]: converted_result = [KeyVaultSetting._from_generated(setting) for setting in result.settings] # We don't actually get a paged response from the generated method, so we mock the typical iteration methods - def get_next(next_link=None): + def get_next(_=None): return converted_result - def extract_data(pipeline_response): + def extract_data(_): return None, converted_result return ItemPaged(get_next, extract_data) diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py index 4f09e998c5d1..dd1cd16e715e 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py @@ -24,6 +24,7 @@ class KeyVaultSettingsClient(AsyncKeyVaultClientBase): :keyword bool verify_challenge_resource: Whether to verify the authentication challenge resource matches the Key Vault or Managed HSM domain. Defaults to True. """ + # pylint:disable=protected-access @distributed_trace_async async def get_setting(self, name: str, **kwargs) -> KeyVaultSetting: @@ -50,10 +51,10 @@ async def list_settings(self, **kwargs) -> AsyncItemPaged[KeyVaultSetting]: converted_result = [KeyVaultSetting._from_generated(setting) for setting in result.settings] # We don't actually get a paged response from the generated method, so we mock the typical iteration methods - async def get_next(next_link=None): + async def get_next(_=None): return converted_result - async def extract_data(pipeline_response): + async def extract_data(_): return None, AsyncList(converted_result) return AsyncItemPaged(get_next, extract_data) From 4feedb52f01612b3957e6f4c92daa82052fd6614 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?McCoy=20Pati=C3=B1o?= <39780829+mccoyp@users.noreply.github.com> Date: Tue, 15 Nov 2022 22:23:27 -0800 Subject: [PATCH 14/14] Ignore generated code pylint warning --- .../azure/keyvault/administration/_generated_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated_models.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated_models.py index 98dcb98f970d..03d9c11758d6 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated_models.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated_models.py @@ -1,5 +1,5 @@ # coding=utf-8 -# pylint: disable=too-many-lines +# pylint: disable=too-many-lines,redefined-builtin # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information.