text: # coding=utf-8
  # --------------------------------------------------------------------------
  # 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 typing import TYPE_CHECKING
  import warnings
  
  from azure.core.exceptions import HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error
  from azure.core.paging import ItemPaged
  from azure.core.pipeline import PipelineResponse
  from azure.core.pipeline.transport import HttpRequest, HttpResponse
  
  from .. import models
  
  if TYPE_CHECKING:
      # pylint: disable=unused-import,ungrouped-imports
      from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar
  
      T = TypeVar('T')
      ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]]
  
  class KeyVaultClientOperationsMixin(object):
  
      def create_key(
          self,
          vault_base_url,  # type: str
          key_name,  # type: str
          parameters,  # type: "models.KeyCreateParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.KeyBundle"
          """Creates a new key, stores it, then returns key parameters and attributes to the client.
  
          The create key operation can be used to create any key type in Azure Key Vault. If the named
          key already exists, Azure Key Vault creates a new version of the key. It requires the
          keys/create permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param key_name: The name for the new key. The system will generate the version name for the
           new key.
          :type key_name: str
          :param parameters: The parameters to create a key.
          :type parameters: ~azure.keyvault.v7_0.models.KeyCreateParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: KeyBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.KeyBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.KeyBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.create_key.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'key-name': self._serialize.url("key_name", key_name, 'str', pattern=r'^[0-9a-zA-Z-]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'KeyCreateParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('KeyBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      create_key.metadata = {'url': '/keys/{key-name}/create'}  # type: ignore
  
      def import_key(
          self,
          vault_base_url,  # type: str
          key_name,  # type: str
          parameters,  # type: "models.KeyImportParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.KeyBundle"
          """Imports an externally created key, stores it, and returns key parameters and attributes to the client.
  
          The import key operation may be used to import any key type into an Azure Key Vault. If the
          named key already exists, Azure Key Vault creates a new version of the key. This operation
          requires the keys/import permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param key_name: Name for the imported key.
          :type key_name: str
          :param parameters: The parameters to import a key.
          :type parameters: ~azure.keyvault.v7_0.models.KeyImportParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: KeyBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.KeyBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.KeyBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.import_key.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'key-name': self._serialize.url("key_name", key_name, 'str', pattern=r'^[0-9a-zA-Z-]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'KeyImportParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('KeyBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      import_key.metadata = {'url': '/keys/{key-name}'}  # type: ignore
  
      def delete_key(
          self,
          vault_base_url,  # type: str
          key_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.DeletedKeyBundle"
          """Deletes a key of any type from storage in Azure Key Vault.
  
          The delete key operation cannot be used to remove individual versions of a key. This operation
          removes the cryptographic material associated with the key, which means the key is not usable
          for Sign/Verify, Wrap/Unwrap or Encrypt/Decrypt operations. This operation requires the
          keys/delete permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param key_name: The name of the key to delete.
          :type key_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: DeletedKeyBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.DeletedKeyBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.DeletedKeyBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.delete_key.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'key-name': self._serialize.url("key_name", key_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.delete(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('DeletedKeyBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      delete_key.metadata = {'url': '/keys/{key-name}'}  # type: ignore
  
      def update_key(
          self,
          vault_base_url,  # type: str
          key_name,  # type: str
          key_version,  # type: str
          parameters,  # type: "models.KeyUpdateParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.KeyBundle"
          """The update key operation changes specified attributes of a stored key and can be applied to any key type and key version stored in Azure Key Vault.
  
          In order to perform this operation, the key must already exist in the Key Vault. Note: The
          cryptographic material of a key itself cannot be changed. This operation requires the
          keys/update permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param key_name: The name of key to update.
          :type key_name: str
          :param key_version: The version of the key to update.
          :type key_version: str
          :param parameters: The parameters of the key to update.
          :type parameters: ~azure.keyvault.v7_0.models.KeyUpdateParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: KeyBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.KeyBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.KeyBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.update_key.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'key-name': self._serialize.url("key_name", key_name, 'str'),
              'key-version': self._serialize.url("key_version", key_version, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'KeyUpdateParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('KeyBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      update_key.metadata = {'url': '/keys/{key-name}/{key-version}'}  # type: ignore
  
      def get_key(
          self,
          vault_base_url,  # type: str
          key_name,  # type: str
          key_version,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.KeyBundle"
          """Gets the public part of a stored key.
  
          The get key operation is applicable to all key types. If the requested key is symmetric, then
          no key material is released in the response. This operation requires the keys/get permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param key_name: The name of the key to get.
          :type key_name: str
          :param key_version: Adding the version parameter retrieves a specific version of a key. This
           URI fragment is optional. If not specified, the latest version of the key is returned.
          :type key_version: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: KeyBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.KeyBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.KeyBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.get_key.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'key-name': self._serialize.url("key_name", key_name, 'str'),
              'key-version': self._serialize.url("key_version", key_version, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.get(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('KeyBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      get_key.metadata = {'url': '/keys/{key-name}/{key-version}'}  # type: ignore
  
      def get_key_versions(
          self,
          vault_base_url,  # type: str
          key_name,  # type: str
          maxresults=None,  # type: Optional[int]
          **kwargs  # type: Any
      ):
          # type: (...) -> Iterable["models.KeyListResult"]
          """Retrieves a list of individual key versions with the same key name.
  
          The full key identifier, attributes, and tags are provided in the response. This operation
          requires the keys/list permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param key_name: The name of the key.
          :type key_name: str
          :param maxresults: Maximum number of results to return in a page. If not specified the service
           will return up to 25 results.
          :type maxresults: int
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: An iterator like instance of either KeyListResult or the result of cls(response)
          :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.v7_0.models.KeyListResult]
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.KeyListResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          def prepare_request(next_link=None):
              # Construct headers
              header_parameters = {}  # type: Dict[str, Any]
              header_parameters['Accept'] = 'application/json'
  
              if not next_link:
                  # Construct URL
                  url = self.get_key_versions.metadata['url']  # type: ignore
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                      'key-name': self._serialize.url("key_name", key_name, 'str'),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  # Construct parameters
                  query_parameters = {}  # type: Dict[str, Any]
                  if maxresults is not None:
                      query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
                  query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
                  request = self._client.get(url, query_parameters, header_parameters)
              else:
                  url = next_link
                  query_parameters = {}  # type: Dict[str, Any]
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                      'key-name': self._serialize.url("key_name", key_name, 'str'),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def extract_data(pipeline_response):
              deserialized = self._deserialize('KeyListResult', pipeline_response)
              list_of_elem = deserialized.value
              if cls:
                  list_of_elem = cls(list_of_elem)
              return deserialized.next_link or None, iter(list_of_elem)
  
          def get_next(next_link=None):
              request = prepare_request(next_link)
  
              pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
              response = pipeline_response.http_response
  
              if response.status_code not in [200]:
                  error = self._deserialize(models.KeyVaultError, response)
                  map_error(status_code=response.status_code, response=response, error_map=error_map)
                  raise HttpResponseError(response=response, model=error)
  
              return pipeline_response
  
          return ItemPaged(
              get_next, extract_data
          )
      get_key_versions.metadata = {'url': '/keys/{key-name}/versions'}  # type: ignore
  
      def get_keys(
          self,
          vault_base_url,  # type: str
          maxresults=None,  # type: Optional[int]
          **kwargs  # type: Any
      ):
          # type: (...) -> Iterable["models.KeyListResult"]
          """List keys in the specified vault.
  
          Retrieves a list of the keys in the Key Vault as JSON Web Key structures that contain the
          public part of a stored key. The LIST operation is applicable to all key types, however only
          the base key identifier, attributes, and tags are provided in the response. Individual versions
          of a key are not listed in the response. This operation requires the keys/list permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param maxresults: Maximum number of results to return in a page. If not specified the service
           will return up to 25 results.
          :type maxresults: int
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: An iterator like instance of either KeyListResult or the result of cls(response)
          :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.v7_0.models.KeyListResult]
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.KeyListResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          def prepare_request(next_link=None):
              # Construct headers
              header_parameters = {}  # type: Dict[str, Any]
              header_parameters['Accept'] = 'application/json'
  
              if not next_link:
                  # Construct URL
                  url = self.get_keys.metadata['url']  # type: ignore
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  # Construct parameters
                  query_parameters = {}  # type: Dict[str, Any]
                  if maxresults is not None:
                      query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
                  query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
                  request = self._client.get(url, query_parameters, header_parameters)
              else:
                  url = next_link
                  query_parameters = {}  # type: Dict[str, Any]
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def extract_data(pipeline_response):
              deserialized = self._deserialize('KeyListResult', pipeline_response)
              list_of_elem = deserialized.value
              if cls:
                  list_of_elem = cls(list_of_elem)
              return deserialized.next_link or None, iter(list_of_elem)
  
          def get_next(next_link=None):
              request = prepare_request(next_link)
  
              pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
              response = pipeline_response.http_response
  
              if response.status_code not in [200]:
                  error = self._deserialize(models.KeyVaultError, response)
                  map_error(status_code=response.status_code, response=response, error_map=error_map)
                  raise HttpResponseError(response=response, model=error)
  
              return pipeline_response
  
          return ItemPaged(
              get_next, extract_data
          )
      get_keys.metadata = {'url': '/keys'}  # type: ignore
  
      def backup_key(
          self,
          vault_base_url,  # type: str
          key_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.BackupKeyResult"
          """Requests that a backup of the specified key be downloaded to the client.
  
          The Key Backup operation exports a key from Azure Key Vault in a protected form. Note that this
          operation does NOT return key material in a form that can be used outside the Azure Key Vault
          system, the returned key material is either protected to a Azure Key Vault HSM or to Azure Key
          Vault itself. The intent of this operation is to allow a client to GENERATE a key in one Azure
          Key Vault instance, BACKUP the key, and then RESTORE it into another Azure Key Vault instance.
          The BACKUP operation may be used to export, in protected form, any key type from Azure Key
          Vault. Individual versions of a key cannot be backed up. BACKUP / RESTORE can be performed
          within geographical boundaries only; meaning that a BACKUP from one geographical area cannot be
          restored to another geographical area. For example, a backup from the US geographical area
          cannot be restored in an EU geographical area. This operation requires the key/backup
          permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param key_name: The name of the key.
          :type key_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: BackupKeyResult, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.BackupKeyResult
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.BackupKeyResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.backup_key.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'key-name': self._serialize.url("key_name", key_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.post(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('BackupKeyResult', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      backup_key.metadata = {'url': '/keys/{key-name}/backup'}  # type: ignore
  
      def restore_key(
          self,
          vault_base_url,  # type: str
          parameters,  # type: "models.KeyRestoreParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.KeyBundle"
          """Restores a backed up key to a vault.
  
          Imports a previously backed up key into Azure Key Vault, restoring the key, its key identifier,
          attributes and access control policies. The RESTORE operation may be used to import a
          previously backed up key. Individual versions of a key cannot be restored. The key is restored
          in its entirety with the same key name as it had when it was backed up. If the key name is not
          available in the target Key Vault, the RESTORE operation will be rejected. While the key name
          is retained during restore, the final key identifier will change if the key is restored to a
          different vault. Restore will restore all versions and preserve version identifiers. The
          RESTORE operation is subject to security constraints: The target Key Vault must be owned by the
          same Microsoft Azure Subscription as the source Key Vault The user must have RESTORE permission
          in the target Key Vault. This operation requires the keys/restore permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param parameters: The parameters to restore the key.
          :type parameters: ~azure.keyvault.v7_0.models.KeyRestoreParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: KeyBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.KeyBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.KeyBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.restore_key.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'KeyRestoreParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('KeyBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      restore_key.metadata = {'url': '/keys/restore'}  # type: ignore
  
      def encrypt(
          self,
          vault_base_url,  # type: str
          key_name,  # type: str
          key_version,  # type: str
          parameters,  # type: "models.KeyOperationsParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.KeyOperationResult"
          """Encrypts an arbitrary sequence of bytes using an encryption key that is stored in a key vault.
  
          The ENCRYPT operation encrypts an arbitrary sequence of bytes using an encryption key that is
          stored in Azure Key Vault. Note that the ENCRYPT operation only supports a single block of
          data, the size of which is dependent on the target key and the encryption algorithm to be used.
          The ENCRYPT operation is only strictly necessary for symmetric keys stored in Azure Key Vault
          since protection with an asymmetric key can be performed using public portion of the key. This
          operation is supported for asymmetric keys as a convenience for callers that have a key-
          reference but do not have access to the public key material. This operation requires the
          keys/encrypt permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param key_name: The name of the key.
          :type key_name: str
          :param key_version: The version of the key.
          :type key_version: str
          :param parameters: The parameters for the encryption operation.
          :type parameters: ~azure.keyvault.v7_0.models.KeyOperationsParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: KeyOperationResult, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.KeyOperationResult
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.KeyOperationResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.encrypt.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'key-name': self._serialize.url("key_name", key_name, 'str'),
              'key-version': self._serialize.url("key_version", key_version, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('KeyOperationResult', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      encrypt.metadata = {'url': '/keys/{key-name}/{key-version}/encrypt'}  # type: ignore
  
      def decrypt(
          self,
          vault_base_url,  # type: str
          key_name,  # type: str
          key_version,  # type: str
          parameters,  # type: "models.KeyOperationsParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.KeyOperationResult"
          """Decrypts a single block of encrypted data.
  
          The DECRYPT operation decrypts a well-formed block of ciphertext using the target encryption
          key and specified algorithm. This operation is the reverse of the ENCRYPT operation; only a
          single block of data may be decrypted, the size of this block is dependent on the target key
          and the algorithm to be used. The DECRYPT operation applies to asymmetric and symmetric keys
          stored in Azure Key Vault since it uses the private portion of the key. This operation requires
          the keys/decrypt permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param key_name: The name of the key.
          :type key_name: str
          :param key_version: The version of the key.
          :type key_version: str
          :param parameters: The parameters for the decryption operation.
          :type parameters: ~azure.keyvault.v7_0.models.KeyOperationsParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: KeyOperationResult, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.KeyOperationResult
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.KeyOperationResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.decrypt.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'key-name': self._serialize.url("key_name", key_name, 'str'),
              'key-version': self._serialize.url("key_version", key_version, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('KeyOperationResult', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      decrypt.metadata = {'url': '/keys/{key-name}/{key-version}/decrypt'}  # type: ignore
  
      def sign(
          self,
          vault_base_url,  # type: str
          key_name,  # type: str
          key_version,  # type: str
          parameters,  # type: "models.KeySignParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.KeyOperationResult"
          """Creates a signature from a digest using the specified key.
  
          The SIGN operation is applicable to asymmetric and symmetric keys stored in Azure Key Vault
          since this operation uses the private portion of the key. This operation requires the keys/sign
          permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param key_name: The name of the key.
          :type key_name: str
          :param key_version: The version of the key.
          :type key_version: str
          :param parameters: The parameters for the signing operation.
          :type parameters: ~azure.keyvault.v7_0.models.KeySignParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: KeyOperationResult, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.KeyOperationResult
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.KeyOperationResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.sign.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'key-name': self._serialize.url("key_name", key_name, 'str'),
              'key-version': self._serialize.url("key_version", key_version, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'KeySignParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('KeyOperationResult', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      sign.metadata = {'url': '/keys/{key-name}/{key-version}/sign'}  # type: ignore
  
      def verify(
          self,
          vault_base_url,  # type: str
          key_name,  # type: str
          key_version,  # type: str
          parameters,  # type: "models.KeyVerifyParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.KeyVerifyResult"
          """Verifies a signature using a specified key.
  
          The VERIFY operation is applicable to symmetric keys stored in Azure Key Vault. VERIFY is not
          strictly necessary for asymmetric keys stored in Azure Key Vault since signature verification
          can be performed using the public portion of the key but this operation is supported as a
          convenience for callers that only have a key-reference and not the public portion of the key.
          This operation requires the keys/verify permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param key_name: The name of the key.
          :type key_name: str
          :param key_version: The version of the key.
          :type key_version: str
          :param parameters: The parameters for verify operations.
          :type parameters: ~azure.keyvault.v7_0.models.KeyVerifyParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: KeyVerifyResult, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.KeyVerifyResult
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.KeyVerifyResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.verify.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'key-name': self._serialize.url("key_name", key_name, 'str'),
              'key-version': self._serialize.url("key_version", key_version, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'KeyVerifyParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('KeyVerifyResult', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      verify.metadata = {'url': '/keys/{key-name}/{key-version}/verify'}  # type: ignore
  
      def wrap_key(
          self,
          vault_base_url,  # type: str
          key_name,  # type: str
          key_version,  # type: str
          parameters,  # type: "models.KeyOperationsParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.KeyOperationResult"
          """Wraps a symmetric key using a specified key.
  
          The WRAP operation supports encryption of a symmetric key using a key encryption key that has
          previously been stored in an Azure Key Vault. The WRAP operation is only strictly necessary for
          symmetric keys stored in Azure Key Vault since protection with an asymmetric key can be
          performed using the public portion of the key. This operation is supported for asymmetric keys
          as a convenience for callers that have a key-reference but do not have access to the public key
          material. This operation requires the keys/wrapKey permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param key_name: The name of the key.
          :type key_name: str
          :param key_version: The version of the key.
          :type key_version: str
          :param parameters: The parameters for wrap operation.
          :type parameters: ~azure.keyvault.v7_0.models.KeyOperationsParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: KeyOperationResult, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.KeyOperationResult
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.KeyOperationResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.wrap_key.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'key-name': self._serialize.url("key_name", key_name, 'str'),
              'key-version': self._serialize.url("key_version", key_version, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('KeyOperationResult', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      wrap_key.metadata = {'url': '/keys/{key-name}/{key-version}/wrapkey'}  # type: ignore
  
      def unwrap_key(
          self,
          vault_base_url,  # type: str
          key_name,  # type: str
          key_version,  # type: str
          parameters,  # type: "models.KeyOperationsParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.KeyOperationResult"
          """Unwraps a symmetric key using the specified key that was initially used for wrapping that key.
  
          The UNWRAP operation supports decryption of a symmetric key using the target key encryption
          key. This operation is the reverse of the WRAP operation. The UNWRAP operation applies to
          asymmetric and symmetric keys stored in Azure Key Vault since it uses the private portion of
          the key. This operation requires the keys/unwrapKey permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param key_name: The name of the key.
          :type key_name: str
          :param key_version: The version of the key.
          :type key_version: str
          :param parameters: The parameters for the key operation.
          :type parameters: ~azure.keyvault.v7_0.models.KeyOperationsParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: KeyOperationResult, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.KeyOperationResult
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.KeyOperationResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.unwrap_key.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'key-name': self._serialize.url("key_name", key_name, 'str'),
              'key-version': self._serialize.url("key_version", key_version, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'KeyOperationsParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('KeyOperationResult', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      unwrap_key.metadata = {'url': '/keys/{key-name}/{key-version}/unwrapkey'}  # type: ignore
  
      def get_deleted_keys(
          self,
          vault_base_url,  # type: str
          maxresults=None,  # type: Optional[int]
          **kwargs  # type: Any
      ):
          # type: (...) -> Iterable["models.DeletedKeyListResult"]
          """Lists the deleted keys in the specified vault.
  
          Retrieves a list of the keys in the Key Vault as JSON Web Key structures that contain the
          public part of a deleted key. This operation includes deletion-specific information. The Get
          Deleted Keys operation is applicable for vaults enabled for soft-delete. While the operation
          can be invoked on any vault, it will return an error if invoked on a non soft-delete enabled
          vault. This operation requires the keys/list permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param maxresults: Maximum number of results to return in a page. If not specified the service
           will return up to 25 results.
          :type maxresults: int
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: An iterator like instance of either DeletedKeyListResult or the result of cls(response)
          :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.v7_0.models.DeletedKeyListResult]
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.DeletedKeyListResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          def prepare_request(next_link=None):
              # Construct headers
              header_parameters = {}  # type: Dict[str, Any]
              header_parameters['Accept'] = 'application/json'
  
              if not next_link:
                  # Construct URL
                  url = self.get_deleted_keys.metadata['url']  # type: ignore
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  # Construct parameters
                  query_parameters = {}  # type: Dict[str, Any]
                  if maxresults is not None:
                      query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
                  query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
                  request = self._client.get(url, query_parameters, header_parameters)
              else:
                  url = next_link
                  query_parameters = {}  # type: Dict[str, Any]
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def extract_data(pipeline_response):
              deserialized = self._deserialize('DeletedKeyListResult', pipeline_response)
              list_of_elem = deserialized.value
              if cls:
                  list_of_elem = cls(list_of_elem)
              return deserialized.next_link or None, iter(list_of_elem)
  
          def get_next(next_link=None):
              request = prepare_request(next_link)
  
              pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
              response = pipeline_response.http_response
  
              if response.status_code not in [200]:
                  error = self._deserialize(models.KeyVaultError, response)
                  map_error(status_code=response.status_code, response=response, error_map=error_map)
                  raise HttpResponseError(response=response, model=error)
  
              return pipeline_response
  
          return ItemPaged(
              get_next, extract_data
          )
      get_deleted_keys.metadata = {'url': '/deletedkeys'}  # type: ignore
  
      def get_deleted_key(
          self,
          vault_base_url,  # type: str
          key_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.DeletedKeyBundle"
          """Gets the public part of a deleted key.
  
          The Get Deleted Key operation is applicable for soft-delete enabled vaults. While the operation
          can be invoked on any vault, it will return an error if invoked on a non soft-delete enabled
          vault. This operation requires the keys/get permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param key_name: The name of the key.
          :type key_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: DeletedKeyBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.DeletedKeyBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.DeletedKeyBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.get_deleted_key.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'key-name': self._serialize.url("key_name", key_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.get(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('DeletedKeyBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      get_deleted_key.metadata = {'url': '/deletedkeys/{key-name}'}  # type: ignore
  
      def purge_deleted_key(
          self,
          vault_base_url,  # type: str
          key_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> None
          """Permanently deletes the specified key.
  
          The Purge Deleted Key operation is applicable for soft-delete enabled vaults. While the
          operation can be invoked on any vault, it will return an error if invoked on a non soft-delete
          enabled vault. This operation requires the keys/purge permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param key_name: The name of the key.
          :type key_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: None, or the result of cls(response)
          :rtype: None
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType[None]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.purge_deleted_key.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'key-name': self._serialize.url("key_name", key_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
  
          request = self._client.delete(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [204]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          if cls:
              return cls(pipeline_response, None, {})
  
      purge_deleted_key.metadata = {'url': '/deletedkeys/{key-name}'}  # type: ignore
  
      def recover_deleted_key(
          self,
          vault_base_url,  # type: str
          key_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.KeyBundle"
          """Recovers the deleted key to its latest version.
  
          The Recover Deleted Key operation is applicable for deleted keys in soft-delete enabled vaults.
          It recovers the deleted key back to its latest version under /keys. An attempt to recover an
          non-deleted key will return an error. Consider this the inverse of the delete operation on
          soft-delete enabled vaults. This operation requires the keys/recover permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param key_name: The name of the deleted key.
          :type key_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: KeyBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.KeyBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.KeyBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.recover_deleted_key.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'key-name': self._serialize.url("key_name", key_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.post(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('KeyBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      recover_deleted_key.metadata = {'url': '/deletedkeys/{key-name}/recover'}  # type: ignore
  
      def set_secret(
          self,
          vault_base_url,  # type: str
          secret_name,  # type: str
          parameters,  # type: "models.SecretSetParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.SecretBundle"
          """Sets a secret in a specified key vault.
  
          The SET operation adds a secret to the Azure Key Vault. If the named secret already exists,
          Azure Key Vault creates a new version of that secret. This operation requires the secrets/set
          permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param secret_name: The name of the secret.
          :type secret_name: str
          :param parameters: The parameters for setting the secret.
          :type parameters: ~azure.keyvault.v7_0.models.SecretSetParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: SecretBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.SecretBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.SecretBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.set_secret.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'secret-name': self._serialize.url("secret_name", secret_name, 'str', pattern=r'^[0-9a-zA-Z-]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'SecretSetParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('SecretBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      set_secret.metadata = {'url': '/secrets/{secret-name}'}  # type: ignore
  
      def delete_secret(
          self,
          vault_base_url,  # type: str
          secret_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.DeletedSecretBundle"
          """Deletes a secret from a specified key vault.
  
          The DELETE operation applies to any secret stored in Azure Key Vault. DELETE cannot be applied
          to an individual version of a secret. This operation requires the secrets/delete permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param secret_name: The name of the secret.
          :type secret_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: DeletedSecretBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.DeletedSecretBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.DeletedSecretBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.delete_secret.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.delete(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('DeletedSecretBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      delete_secret.metadata = {'url': '/secrets/{secret-name}'}  # type: ignore
  
      def update_secret(
          self,
          vault_base_url,  # type: str
          secret_name,  # type: str
          secret_version,  # type: str
          parameters,  # type: "models.SecretUpdateParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.SecretBundle"
          """Updates the attributes associated with a specified secret in a given key vault.
  
          The UPDATE operation changes specified attributes of an existing stored secret. Attributes that
          are not specified in the request are left unchanged. The value of a secret itself cannot be
          changed. This operation requires the secrets/set permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param secret_name: The name of the secret.
          :type secret_name: str
          :param secret_version: The version of the secret.
          :type secret_version: str
          :param parameters: The parameters for update secret operation.
          :type parameters: ~azure.keyvault.v7_0.models.SecretUpdateParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: SecretBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.SecretBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.SecretBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.update_secret.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
              'secret-version': self._serialize.url("secret_version", secret_version, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'SecretUpdateParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('SecretBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      update_secret.metadata = {'url': '/secrets/{secret-name}/{secret-version}'}  # type: ignore
  
      def get_secret(
          self,
          vault_base_url,  # type: str
          secret_name,  # type: str
          secret_version,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.SecretBundle"
          """Get a specified secret from a given key vault.
  
          The GET operation is applicable to any secret stored in Azure Key Vault. This operation
          requires the secrets/get permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param secret_name: The name of the secret.
          :type secret_name: str
          :param secret_version: The version of the secret. This URI fragment is optional. If not
           specified, the latest version of the secret is returned.
          :type secret_version: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: SecretBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.SecretBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.SecretBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.get_secret.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
              'secret-version': self._serialize.url("secret_version", secret_version, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.get(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('SecretBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      get_secret.metadata = {'url': '/secrets/{secret-name}/{secret-version}'}  # type: ignore
  
      def get_secrets(
          self,
          vault_base_url,  # type: str
          maxresults=None,  # type: Optional[int]
          **kwargs  # type: Any
      ):
          # type: (...) -> Iterable["models.SecretListResult"]
          """List secrets in a specified key vault.
  
          The Get Secrets operation is applicable to the entire vault. However, only the base secret
          identifier and its attributes are provided in the response. Individual secret versions are not
          listed in the response. This operation requires the secrets/list permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param maxresults: Maximum number of results to return in a page. If not specified, the service
           will return up to 25 results.
          :type maxresults: int
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: An iterator like instance of either SecretListResult or the result of cls(response)
          :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.v7_0.models.SecretListResult]
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.SecretListResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          def prepare_request(next_link=None):
              # Construct headers
              header_parameters = {}  # type: Dict[str, Any]
              header_parameters['Accept'] = 'application/json'
  
              if not next_link:
                  # Construct URL
                  url = self.get_secrets.metadata['url']  # type: ignore
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  # Construct parameters
                  query_parameters = {}  # type: Dict[str, Any]
                  if maxresults is not None:
                      query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
                  query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
                  request = self._client.get(url, query_parameters, header_parameters)
              else:
                  url = next_link
                  query_parameters = {}  # type: Dict[str, Any]
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def extract_data(pipeline_response):
              deserialized = self._deserialize('SecretListResult', pipeline_response)
              list_of_elem = deserialized.value
              if cls:
                  list_of_elem = cls(list_of_elem)
              return deserialized.next_link or None, iter(list_of_elem)
  
          def get_next(next_link=None):
              request = prepare_request(next_link)
  
              pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
              response = pipeline_response.http_response
  
              if response.status_code not in [200]:
                  error = self._deserialize(models.KeyVaultError, response)
                  map_error(status_code=response.status_code, response=response, error_map=error_map)
                  raise HttpResponseError(response=response, model=error)
  
              return pipeline_response
  
          return ItemPaged(
              get_next, extract_data
          )
      get_secrets.metadata = {'url': '/secrets'}  # type: ignore
  
      def get_secret_versions(
          self,
          vault_base_url,  # type: str
          secret_name,  # type: str
          maxresults=None,  # type: Optional[int]
          **kwargs  # type: Any
      ):
          # type: (...) -> Iterable["models.SecretListResult"]
          """List all versions of the specified secret.
  
          The full secret identifier and attributes are provided in the response. No values are returned
          for the secrets. This operations requires the secrets/list permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param secret_name: The name of the secret.
          :type secret_name: str
          :param maxresults: Maximum number of results to return in a page. If not specified, the service
           will return up to 25 results.
          :type maxresults: int
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: An iterator like instance of either SecretListResult or the result of cls(response)
          :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.v7_0.models.SecretListResult]
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.SecretListResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          def prepare_request(next_link=None):
              # Construct headers
              header_parameters = {}  # type: Dict[str, Any]
              header_parameters['Accept'] = 'application/json'
  
              if not next_link:
                  # Construct URL
                  url = self.get_secret_versions.metadata['url']  # type: ignore
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                      'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  # Construct parameters
                  query_parameters = {}  # type: Dict[str, Any]
                  if maxresults is not None:
                      query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
                  query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
                  request = self._client.get(url, query_parameters, header_parameters)
              else:
                  url = next_link
                  query_parameters = {}  # type: Dict[str, Any]
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                      'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def extract_data(pipeline_response):
              deserialized = self._deserialize('SecretListResult', pipeline_response)
              list_of_elem = deserialized.value
              if cls:
                  list_of_elem = cls(list_of_elem)
              return deserialized.next_link or None, iter(list_of_elem)
  
          def get_next(next_link=None):
              request = prepare_request(next_link)
  
              pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
              response = pipeline_response.http_response
  
              if response.status_code not in [200]:
                  error = self._deserialize(models.KeyVaultError, response)
                  map_error(status_code=response.status_code, response=response, error_map=error_map)
                  raise HttpResponseError(response=response, model=error)
  
              return pipeline_response
  
          return ItemPaged(
              get_next, extract_data
          )
      get_secret_versions.metadata = {'url': '/secrets/{secret-name}/versions'}  # type: ignore
  
      def get_deleted_secrets(
          self,
          vault_base_url,  # type: str
          maxresults=None,  # type: Optional[int]
          **kwargs  # type: Any
      ):
          # type: (...) -> Iterable["models.DeletedSecretListResult"]
          """Lists deleted secrets for the specified vault.
  
          The Get Deleted Secrets operation returns the secrets that have been deleted for a vault
          enabled for soft-delete. This operation requires the secrets/list permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param maxresults: Maximum number of results to return in a page. If not specified the service
           will return up to 25 results.
          :type maxresults: int
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: An iterator like instance of either DeletedSecretListResult or the result of cls(response)
          :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.v7_0.models.DeletedSecretListResult]
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.DeletedSecretListResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          def prepare_request(next_link=None):
              # Construct headers
              header_parameters = {}  # type: Dict[str, Any]
              header_parameters['Accept'] = 'application/json'
  
              if not next_link:
                  # Construct URL
                  url = self.get_deleted_secrets.metadata['url']  # type: ignore
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  # Construct parameters
                  query_parameters = {}  # type: Dict[str, Any]
                  if maxresults is not None:
                      query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
                  query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
                  request = self._client.get(url, query_parameters, header_parameters)
              else:
                  url = next_link
                  query_parameters = {}  # type: Dict[str, Any]
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def extract_data(pipeline_response):
              deserialized = self._deserialize('DeletedSecretListResult', pipeline_response)
              list_of_elem = deserialized.value
              if cls:
                  list_of_elem = cls(list_of_elem)
              return deserialized.next_link or None, iter(list_of_elem)
  
          def get_next(next_link=None):
              request = prepare_request(next_link)
  
              pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
              response = pipeline_response.http_response
  
              if response.status_code not in [200]:
                  error = self._deserialize(models.KeyVaultError, response)
                  map_error(status_code=response.status_code, response=response, error_map=error_map)
                  raise HttpResponseError(response=response, model=error)
  
              return pipeline_response
  
          return ItemPaged(
              get_next, extract_data
          )
      get_deleted_secrets.metadata = {'url': '/deletedsecrets'}  # type: ignore
  
      def get_deleted_secret(
          self,
          vault_base_url,  # type: str
          secret_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.DeletedSecretBundle"
          """Gets the specified deleted secret.
  
          The Get Deleted Secret operation returns the specified deleted secret along with its
          attributes. This operation requires the secrets/get permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param secret_name: The name of the secret.
          :type secret_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: DeletedSecretBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.DeletedSecretBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.DeletedSecretBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.get_deleted_secret.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.get(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('DeletedSecretBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      get_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}'}  # type: ignore
  
      def purge_deleted_secret(
          self,
          vault_base_url,  # type: str
          secret_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> None
          """Permanently deletes the specified secret.
  
          The purge deleted secret operation removes the secret permanently, without the possibility of
          recovery. This operation can only be enabled on a soft-delete enabled vault. This operation
          requires the secrets/purge permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param secret_name: The name of the secret.
          :type secret_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: None, or the result of cls(response)
          :rtype: None
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType[None]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.purge_deleted_secret.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
  
          request = self._client.delete(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [204]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          if cls:
              return cls(pipeline_response, None, {})
  
      purge_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}'}  # type: ignore
  
      def recover_deleted_secret(
          self,
          vault_base_url,  # type: str
          secret_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.SecretBundle"
          """Recovers the deleted secret to the latest version.
  
          Recovers the deleted secret in the specified vault. This operation can only be performed on a
          soft-delete enabled vault. This operation requires the secrets/recover permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param secret_name: The name of the deleted secret.
          :type secret_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: SecretBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.SecretBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.SecretBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.recover_deleted_secret.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.post(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('SecretBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      recover_deleted_secret.metadata = {'url': '/deletedsecrets/{secret-name}/recover'}  # type: ignore
  
      def backup_secret(
          self,
          vault_base_url,  # type: str
          secret_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.BackupSecretResult"
          """Backs up the specified secret.
  
          Requests that a backup of the specified secret be downloaded to the client. All versions of the
          secret will be downloaded. This operation requires the secrets/backup permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param secret_name: The name of the secret.
          :type secret_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: BackupSecretResult, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.BackupSecretResult
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.BackupSecretResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.backup_secret.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'secret-name': self._serialize.url("secret_name", secret_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.post(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('BackupSecretResult', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      backup_secret.metadata = {'url': '/secrets/{secret-name}/backup'}  # type: ignore
  
      def restore_secret(
          self,
          vault_base_url,  # type: str
          parameters,  # type: "models.SecretRestoreParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.SecretBundle"
          """Restores a backed up secret to a vault.
  
          Restores a backed up secret, and all its versions, to a vault. This operation requires the
          secrets/restore permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param parameters: The parameters to restore the secret.
          :type parameters: ~azure.keyvault.v7_0.models.SecretRestoreParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: SecretBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.SecretBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.SecretBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.restore_secret.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'SecretRestoreParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('SecretBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      restore_secret.metadata = {'url': '/secrets/restore'}  # type: ignore
  
      def get_certificates(
          self,
          vault_base_url,  # type: str
          maxresults=None,  # type: Optional[int]
          include_pending=None,  # type: Optional[bool]
          **kwargs  # type: Any
      ):
          # type: (...) -> Iterable["models.CertificateListResult"]
          """List certificates in a specified key vault.
  
          The GetCertificates operation returns the set of certificates resources in the specified key
          vault. This operation requires the certificates/list permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param maxresults: Maximum number of results to return in a page. If not specified the service
           will return up to 25 results.
          :type maxresults: int
          :param include_pending: Specifies whether to include certificates which are not completely
           provisioned.
          :type include_pending: bool
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: An iterator like instance of either CertificateListResult or the result of cls(response)
          :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.v7_0.models.CertificateListResult]
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.CertificateListResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          def prepare_request(next_link=None):
              # Construct headers
              header_parameters = {}  # type: Dict[str, Any]
              header_parameters['Accept'] = 'application/json'
  
              if not next_link:
                  # Construct URL
                  url = self.get_certificates.metadata['url']  # type: ignore
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  # Construct parameters
                  query_parameters = {}  # type: Dict[str, Any]
                  if maxresults is not None:
                      query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
                  if include_pending is not None:
                      query_parameters['includePending'] = self._serialize.query("include_pending", include_pending, 'bool')
                  query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
                  request = self._client.get(url, query_parameters, header_parameters)
              else:
                  url = next_link
                  query_parameters = {}  # type: Dict[str, Any]
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def extract_data(pipeline_response):
              deserialized = self._deserialize('CertificateListResult', pipeline_response)
              list_of_elem = deserialized.value
              if cls:
                  list_of_elem = cls(list_of_elem)
              return deserialized.next_link or None, iter(list_of_elem)
  
          def get_next(next_link=None):
              request = prepare_request(next_link)
  
              pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
              response = pipeline_response.http_response
  
              if response.status_code not in [200]:
                  error = self._deserialize(models.KeyVaultError, response)
                  map_error(status_code=response.status_code, response=response, error_map=error_map)
                  raise HttpResponseError(response=response, model=error)
  
              return pipeline_response
  
          return ItemPaged(
              get_next, extract_data
          )
      get_certificates.metadata = {'url': '/certificates'}  # type: ignore
  
      def delete_certificate(
          self,
          vault_base_url,  # type: str
          certificate_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.DeletedCertificateBundle"
          """Deletes a certificate from a specified key vault.
  
          Deletes all versions of a certificate object along with its associated policy. Delete
          certificate cannot be used to remove individual versions of a certificate object. This
          operation requires the certificates/delete permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param certificate_name: The name of the certificate.
          :type certificate_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: DeletedCertificateBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.DeletedCertificateBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.DeletedCertificateBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.delete_certificate.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.delete(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('DeletedCertificateBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      delete_certificate.metadata = {'url': '/certificates/{certificate-name}'}  # type: ignore
  
      def set_certificate_contacts(
          self,
          vault_base_url,  # type: str
          contacts,  # type: "models.Contacts"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.Contacts"
          """Sets the certificate contacts for the specified key vault.
  
          Sets the certificate contacts for the specified key vault. This operation requires the
          certificates/managecontacts permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param contacts: The contacts for the key vault certificate.
          :type contacts: ~azure.keyvault.v7_0.models.Contacts
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: Contacts, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.Contacts
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.Contacts"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.set_certificate_contacts.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(contacts, 'Contacts')
          body_content_kwargs['content'] = body_content
          request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('Contacts', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      set_certificate_contacts.metadata = {'url': '/certificates/contacts'}  # type: ignore
  
      def get_certificate_contacts(
          self,
          vault_base_url,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.Contacts"
          """Lists the certificate contacts for a specified key vault.
  
          The GetCertificateContacts operation returns the set of certificate contact resources in the
          specified key vault. This operation requires the certificates/managecontacts permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: Contacts, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.Contacts
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.Contacts"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.get_certificate_contacts.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.get(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('Contacts', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      get_certificate_contacts.metadata = {'url': '/certificates/contacts'}  # type: ignore
  
      def delete_certificate_contacts(
          self,
          vault_base_url,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.Contacts"
          """Deletes the certificate contacts for a specified key vault.
  
          Deletes the certificate contacts for a specified key vault certificate. This operation requires
          the certificates/managecontacts permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: Contacts, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.Contacts
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.Contacts"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.delete_certificate_contacts.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.delete(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('Contacts', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      delete_certificate_contacts.metadata = {'url': '/certificates/contacts'}  # type: ignore
  
      def get_certificate_issuers(
          self,
          vault_base_url,  # type: str
          maxresults=None,  # type: Optional[int]
          **kwargs  # type: Any
      ):
          # type: (...) -> Iterable["models.CertificateIssuerListResult"]
          """List certificate issuers for a specified key vault.
  
          The GetCertificateIssuers operation returns the set of certificate issuer resources in the
          specified key vault. This operation requires the certificates/manageissuers/getissuers
          permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param maxresults: Maximum number of results to return in a page. If not specified the service
           will return up to 25 results.
          :type maxresults: int
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: An iterator like instance of either CertificateIssuerListResult or the result of cls(response)
          :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.v7_0.models.CertificateIssuerListResult]
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.CertificateIssuerListResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          def prepare_request(next_link=None):
              # Construct headers
              header_parameters = {}  # type: Dict[str, Any]
              header_parameters['Accept'] = 'application/json'
  
              if not next_link:
                  # Construct URL
                  url = self.get_certificate_issuers.metadata['url']  # type: ignore
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  # Construct parameters
                  query_parameters = {}  # type: Dict[str, Any]
                  if maxresults is not None:
                      query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
                  query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
                  request = self._client.get(url, query_parameters, header_parameters)
              else:
                  url = next_link
                  query_parameters = {}  # type: Dict[str, Any]
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def extract_data(pipeline_response):
              deserialized = self._deserialize('CertificateIssuerListResult', pipeline_response)
              list_of_elem = deserialized.value
              if cls:
                  list_of_elem = cls(list_of_elem)
              return deserialized.next_link or None, iter(list_of_elem)
  
          def get_next(next_link=None):
              request = prepare_request(next_link)
  
              pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
              response = pipeline_response.http_response
  
              if response.status_code not in [200]:
                  error = self._deserialize(models.KeyVaultError, response)
                  map_error(status_code=response.status_code, response=response, error_map=error_map)
                  raise HttpResponseError(response=response, model=error)
  
              return pipeline_response
  
          return ItemPaged(
              get_next, extract_data
          )
      get_certificate_issuers.metadata = {'url': '/certificates/issuers'}  # type: ignore
  
      def set_certificate_issuer(
          self,
          vault_base_url,  # type: str
          issuer_name,  # type: str
          parameter,  # type: "models.CertificateIssuerSetParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.IssuerBundle"
          """Sets the specified certificate issuer.
  
          The SetCertificateIssuer operation adds or updates the specified certificate issuer. This
          operation requires the certificates/setissuers permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param issuer_name: The name of the issuer.
          :type issuer_name: str
          :param parameter: Certificate issuer set parameter.
          :type parameter: ~azure.keyvault.v7_0.models.CertificateIssuerSetParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: IssuerBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.IssuerBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.IssuerBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.set_certificate_issuer.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameter, 'CertificateIssuerSetParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('IssuerBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      set_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}  # type: ignore
  
      def update_certificate_issuer(
          self,
          vault_base_url,  # type: str
          issuer_name,  # type: str
          parameter,  # type: "models.CertificateIssuerUpdateParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.IssuerBundle"
          """Updates the specified certificate issuer.
  
          The UpdateCertificateIssuer operation performs an update on the specified certificate issuer
          entity. This operation requires the certificates/setissuers permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param issuer_name: The name of the issuer.
          :type issuer_name: str
          :param parameter: Certificate issuer update parameter.
          :type parameter: ~azure.keyvault.v7_0.models.CertificateIssuerUpdateParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: IssuerBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.IssuerBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.IssuerBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.update_certificate_issuer.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameter, 'CertificateIssuerUpdateParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('IssuerBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      update_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}  # type: ignore
  
      def get_certificate_issuer(
          self,
          vault_base_url,  # type: str
          issuer_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.IssuerBundle"
          """Lists the specified certificate issuer.
  
          The GetCertificateIssuer operation returns the specified certificate issuer resources in the
          specified key vault. This operation requires the certificates/manageissuers/getissuers
          permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param issuer_name: The name of the issuer.
          :type issuer_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: IssuerBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.IssuerBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.IssuerBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.get_certificate_issuer.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.get(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('IssuerBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      get_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}  # type: ignore
  
      def delete_certificate_issuer(
          self,
          vault_base_url,  # type: str
          issuer_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.IssuerBundle"
          """Deletes the specified certificate issuer.
  
          The DeleteCertificateIssuer operation permanently removes the specified certificate issuer from
          the vault. This operation requires the certificates/manageissuers/deleteissuers permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param issuer_name: The name of the issuer.
          :type issuer_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: IssuerBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.IssuerBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.IssuerBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.delete_certificate_issuer.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.delete(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('IssuerBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      delete_certificate_issuer.metadata = {'url': '/certificates/issuers/{issuer-name}'}  # type: ignore
  
      def create_certificate(
          self,
          vault_base_url,  # type: str
          certificate_name,  # type: str
          parameters,  # type: "models.CertificateCreateParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.CertificateOperation"
          """Creates a new certificate.
  
          If this is the first version, the certificate resource is created. This operation requires the
          certificates/create permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param certificate_name: The name of the certificate.
          :type certificate_name: str
          :param parameters: The parameters to create a certificate.
          :type parameters: ~azure.keyvault.v7_0.models.CertificateCreateParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: CertificateOperation, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.CertificateOperation
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.CertificateOperation"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.create_certificate.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[0-9a-zA-Z-]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'CertificateCreateParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [202]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('CertificateOperation', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      create_certificate.metadata = {'url': '/certificates/{certificate-name}/create'}  # type: ignore
  
      def import_certificate(
          self,
          vault_base_url,  # type: str
          certificate_name,  # type: str
          parameters,  # type: "models.CertificateImportParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.CertificateBundle"
          """Imports a certificate into a specified key vault.
  
          Imports an existing valid certificate, containing a private key, into Azure Key Vault. The
          certificate to be imported can be in either PFX or PEM format. If the certificate is in PEM
          format the PEM file must contain the key as well as x509 certificates. This operation requires
          the certificates/import permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param certificate_name: The name of the certificate.
          :type certificate_name: str
          :param parameters: The parameters to import the certificate.
          :type parameters: ~azure.keyvault.v7_0.models.CertificateImportParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: CertificateBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.CertificateBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.CertificateBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.import_certificate.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str', pattern=r'^[0-9a-zA-Z-]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'CertificateImportParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('CertificateBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      import_certificate.metadata = {'url': '/certificates/{certificate-name}/import'}  # type: ignore
  
      def get_certificate_versions(
          self,
          vault_base_url,  # type: str
          certificate_name,  # type: str
          maxresults=None,  # type: Optional[int]
          **kwargs  # type: Any
      ):
          # type: (...) -> Iterable["models.CertificateListResult"]
          """List the versions of a certificate.
  
          The GetCertificateVersions operation returns the versions of a certificate in the specified key
          vault. This operation requires the certificates/list permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param certificate_name: The name of the certificate.
          :type certificate_name: str
          :param maxresults: Maximum number of results to return in a page. If not specified the service
           will return up to 25 results.
          :type maxresults: int
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: An iterator like instance of either CertificateListResult or the result of cls(response)
          :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.v7_0.models.CertificateListResult]
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.CertificateListResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          def prepare_request(next_link=None):
              # Construct headers
              header_parameters = {}  # type: Dict[str, Any]
              header_parameters['Accept'] = 'application/json'
  
              if not next_link:
                  # Construct URL
                  url = self.get_certificate_versions.metadata['url']  # type: ignore
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                      'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  # Construct parameters
                  query_parameters = {}  # type: Dict[str, Any]
                  if maxresults is not None:
                      query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
                  query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
                  request = self._client.get(url, query_parameters, header_parameters)
              else:
                  url = next_link
                  query_parameters = {}  # type: Dict[str, Any]
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                      'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def extract_data(pipeline_response):
              deserialized = self._deserialize('CertificateListResult', pipeline_response)
              list_of_elem = deserialized.value
              if cls:
                  list_of_elem = cls(list_of_elem)
              return deserialized.next_link or None, iter(list_of_elem)
  
          def get_next(next_link=None):
              request = prepare_request(next_link)
  
              pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
              response = pipeline_response.http_response
  
              if response.status_code not in [200]:
                  error = self._deserialize(models.KeyVaultError, response)
                  map_error(status_code=response.status_code, response=response, error_map=error_map)
                  raise HttpResponseError(response=response, model=error)
  
              return pipeline_response
  
          return ItemPaged(
              get_next, extract_data
          )
      get_certificate_versions.metadata = {'url': '/certificates/{certificate-name}/versions'}  # type: ignore
  
      def get_certificate_policy(
          self,
          vault_base_url,  # type: str
          certificate_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.CertificatePolicy"
          """Lists the policy for a certificate.
  
          The GetCertificatePolicy operation returns the specified certificate policy resources in the
          specified key vault. This operation requires the certificates/get permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param certificate_name: The name of the certificate in a given key vault.
          :type certificate_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: CertificatePolicy, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.CertificatePolicy
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.CertificatePolicy"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.get_certificate_policy.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.get(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('CertificatePolicy', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      get_certificate_policy.metadata = {'url': '/certificates/{certificate-name}/policy'}  # type: ignore
  
      def update_certificate_policy(
          self,
          vault_base_url,  # type: str
          certificate_name,  # type: str
          certificate_policy,  # type: "models.CertificatePolicy"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.CertificatePolicy"
          """Updates the policy for a certificate.
  
          Set specified members in the certificate policy. Leave others as null. This operation requires
          the certificates/update permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param certificate_name: The name of the certificate in the given vault.
          :type certificate_name: str
          :param certificate_policy: The policy for the certificate.
          :type certificate_policy: ~azure.keyvault.v7_0.models.CertificatePolicy
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: CertificatePolicy, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.CertificatePolicy
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.CertificatePolicy"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.update_certificate_policy.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(certificate_policy, 'CertificatePolicy')
          body_content_kwargs['content'] = body_content
          request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('CertificatePolicy', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      update_certificate_policy.metadata = {'url': '/certificates/{certificate-name}/policy'}  # type: ignore
  
      def update_certificate(
          self,
          vault_base_url,  # type: str
          certificate_name,  # type: str
          certificate_version,  # type: str
          parameters,  # type: "models.CertificateUpdateParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.CertificateBundle"
          """Updates the specified attributes associated with the given certificate.
  
          The UpdateCertificate operation applies the specified update on the given certificate; the only
          elements updated are the certificate's attributes. This operation requires the
          certificates/update permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param certificate_name: The name of the certificate in the given key vault.
          :type certificate_name: str
          :param certificate_version: The version of the certificate.
          :type certificate_version: str
          :param parameters: The parameters for certificate update.
          :type parameters: ~azure.keyvault.v7_0.models.CertificateUpdateParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: CertificateBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.CertificateBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.CertificateBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.update_certificate.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
              'certificate-version': self._serialize.url("certificate_version", certificate_version, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'CertificateUpdateParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('CertificateBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      update_certificate.metadata = {'url': '/certificates/{certificate-name}/{certificate-version}'}  # type: ignore
  
      def get_certificate(
          self,
          vault_base_url,  # type: str
          certificate_name,  # type: str
          certificate_version,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.CertificateBundle"
          """Gets information about a certificate.
  
          Gets information about a specific certificate. This operation requires the certificates/get
          permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param certificate_name: The name of the certificate in the given vault.
          :type certificate_name: str
          :param certificate_version: The version of the certificate. This URI fragment is optional. If
           not specified, the latest version of the certificate is returned.
          :type certificate_version: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: CertificateBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.CertificateBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.CertificateBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.get_certificate.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
              'certificate-version': self._serialize.url("certificate_version", certificate_version, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.get(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('CertificateBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      get_certificate.metadata = {'url': '/certificates/{certificate-name}/{certificate-version}'}  # type: ignore
  
      def update_certificate_operation(
          self,
          vault_base_url,  # type: str
          certificate_name,  # type: str
          certificate_operation,  # type: "models.CertificateOperationUpdateParameter"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.CertificateOperation"
          """Updates a certificate operation.
  
          Updates a certificate creation operation that is already in progress. This operation requires
          the certificates/update permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param certificate_name: The name of the certificate.
          :type certificate_name: str
          :param certificate_operation: The certificate operation response.
          :type certificate_operation: ~azure.keyvault.v7_0.models.CertificateOperationUpdateParameter
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: CertificateOperation, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.CertificateOperation
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.CertificateOperation"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.update_certificate_operation.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(certificate_operation, 'CertificateOperationUpdateParameter')
          body_content_kwargs['content'] = body_content
          request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('CertificateOperation', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      update_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}  # type: ignore
  
      def get_certificate_operation(
          self,
          vault_base_url,  # type: str
          certificate_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.CertificateOperation"
          """Gets the creation operation of a certificate.
  
          Gets the creation operation associated with a specified certificate. This operation requires
          the certificates/get permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param certificate_name: The name of the certificate.
          :type certificate_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: CertificateOperation, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.CertificateOperation
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.CertificateOperation"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.get_certificate_operation.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.get(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('CertificateOperation', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      get_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}  # type: ignore
  
      def delete_certificate_operation(
          self,
          vault_base_url,  # type: str
          certificate_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.CertificateOperation"
          """Deletes the creation operation for a specific certificate.
  
          Deletes the creation operation for a specified certificate that is in the process of being
          created. The certificate is no longer created. This operation requires the certificates/update
          permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param certificate_name: The name of the certificate.
          :type certificate_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: CertificateOperation, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.CertificateOperation
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.CertificateOperation"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.delete_certificate_operation.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.delete(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('CertificateOperation', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      delete_certificate_operation.metadata = {'url': '/certificates/{certificate-name}/pending'}  # type: ignore
  
      def merge_certificate(
          self,
          vault_base_url,  # type: str
          certificate_name,  # type: str
          parameters,  # type: "models.CertificateMergeParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.CertificateBundle"
          """Merges a certificate or a certificate chain with a key pair existing on the server.
  
          The MergeCertificate operation performs the merging of a certificate or certificate chain with
          a key pair currently available in the service. This operation requires the certificates/create
          permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param certificate_name: The name of the certificate.
          :type certificate_name: str
          :param parameters: The parameters to merge certificate.
          :type parameters: ~azure.keyvault.v7_0.models.CertificateMergeParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: CertificateBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.CertificateBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.CertificateBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.merge_certificate.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'CertificateMergeParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [201]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('CertificateBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      merge_certificate.metadata = {'url': '/certificates/{certificate-name}/pending/merge'}  # type: ignore
  
      def backup_certificate(
          self,
          vault_base_url,  # type: str
          certificate_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.BackupCertificateResult"
          """Backs up the specified certificate.
  
          Requests that a backup of the specified certificate be downloaded to the client. All versions
          of the certificate will be downloaded. This operation requires the certificates/backup
          permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param certificate_name: The name of the certificate.
          :type certificate_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: BackupCertificateResult, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.BackupCertificateResult
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.BackupCertificateResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.backup_certificate.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.post(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('BackupCertificateResult', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      backup_certificate.metadata = {'url': '/certificates/{certificate-name}/backup'}  # type: ignore
  
      def restore_certificate(
          self,
          vault_base_url,  # type: str
          parameters,  # type: "models.CertificateRestoreParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.CertificateBundle"
          """Restores a backed up certificate to a vault.
  
          Restores a backed up certificate, and all its versions, to a vault. This operation requires the
          certificates/restore permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param parameters: The parameters to restore the certificate.
          :type parameters: ~azure.keyvault.v7_0.models.CertificateRestoreParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: CertificateBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.CertificateBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.CertificateBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.restore_certificate.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'CertificateRestoreParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('CertificateBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      restore_certificate.metadata = {'url': '/certificates/restore'}  # type: ignore
  
      def get_deleted_certificates(
          self,
          vault_base_url,  # type: str
          maxresults=None,  # type: Optional[int]
          include_pending=None,  # type: Optional[bool]
          **kwargs  # type: Any
      ):
          # type: (...) -> Iterable["models.DeletedCertificateListResult"]
          """Lists the deleted certificates in the specified vault currently available for recovery.
  
          The GetDeletedCertificates operation retrieves the certificates in the current vault which are
          in a deleted state and ready for recovery or purging. This operation includes deletion-specific
          information. This operation requires the certificates/get/list permission. This operation can
          only be enabled on soft-delete enabled vaults.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param maxresults: Maximum number of results to return in a page. If not specified the service
           will return up to 25 results.
          :type maxresults: int
          :param include_pending: Specifies whether to include certificates which are not completely
           provisioned.
          :type include_pending: bool
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: An iterator like instance of either DeletedCertificateListResult or the result of cls(response)
          :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.v7_0.models.DeletedCertificateListResult]
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.DeletedCertificateListResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          def prepare_request(next_link=None):
              # Construct headers
              header_parameters = {}  # type: Dict[str, Any]
              header_parameters['Accept'] = 'application/json'
  
              if not next_link:
                  # Construct URL
                  url = self.get_deleted_certificates.metadata['url']  # type: ignore
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  # Construct parameters
                  query_parameters = {}  # type: Dict[str, Any]
                  if maxresults is not None:
                      query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
                  if include_pending is not None:
                      query_parameters['includePending'] = self._serialize.query("include_pending", include_pending, 'bool')
                  query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
                  request = self._client.get(url, query_parameters, header_parameters)
              else:
                  url = next_link
                  query_parameters = {}  # type: Dict[str, Any]
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def extract_data(pipeline_response):
              deserialized = self._deserialize('DeletedCertificateListResult', pipeline_response)
              list_of_elem = deserialized.value
              if cls:
                  list_of_elem = cls(list_of_elem)
              return deserialized.next_link or None, iter(list_of_elem)
  
          def get_next(next_link=None):
              request = prepare_request(next_link)
  
              pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
              response = pipeline_response.http_response
  
              if response.status_code not in [200]:
                  error = self._deserialize(models.KeyVaultError, response)
                  map_error(status_code=response.status_code, response=response, error_map=error_map)
                  raise HttpResponseError(response=response, model=error)
  
              return pipeline_response
  
          return ItemPaged(
              get_next, extract_data
          )
      get_deleted_certificates.metadata = {'url': '/deletedcertificates'}  # type: ignore
  
      def get_deleted_certificate(
          self,
          vault_base_url,  # type: str
          certificate_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.DeletedCertificateBundle"
          """Retrieves information about the specified deleted certificate.
  
          The GetDeletedCertificate operation retrieves the deleted certificate information plus its
          attributes, such as retention interval, scheduled permanent deletion and the current deletion
          recovery level. This operation requires the certificates/get permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param certificate_name: The name of the certificate.
          :type certificate_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: DeletedCertificateBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.DeletedCertificateBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.DeletedCertificateBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.get_deleted_certificate.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.get(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('DeletedCertificateBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      get_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}'}  # type: ignore
  
      def purge_deleted_certificate(
          self,
          vault_base_url,  # type: str
          certificate_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> None
          """Permanently deletes the specified deleted certificate.
  
          The PurgeDeletedCertificate operation performs an irreversible deletion of the specified
          certificate, without possibility for recovery. The operation is not available if the recovery
          level does not specify 'Purgeable'. This operation requires the certificate/purge permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param certificate_name: The name of the certificate.
          :type certificate_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: None, or the result of cls(response)
          :rtype: None
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType[None]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.purge_deleted_certificate.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
  
          request = self._client.delete(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [204]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          if cls:
              return cls(pipeline_response, None, {})
  
      purge_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}'}  # type: ignore
  
      def recover_deleted_certificate(
          self,
          vault_base_url,  # type: str
          certificate_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.CertificateBundle"
          """Recovers the deleted certificate back to its current version under /certificates.
  
          The RecoverDeletedCertificate operation performs the reversal of the Delete operation. The
          operation is applicable in vaults enabled for soft-delete, and must be issued during the
          retention interval (available in the deleted certificate's attributes). This operation requires
          the certificates/recover permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param certificate_name: The name of the deleted certificate.
          :type certificate_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: CertificateBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.CertificateBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.CertificateBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.recover_deleted_certificate.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.post(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('CertificateBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      recover_deleted_certificate.metadata = {'url': '/deletedcertificates/{certificate-name}/recover'}  # type: ignore
  
      def get_storage_accounts(
          self,
          vault_base_url,  # type: str
          maxresults=None,  # type: Optional[int]
          **kwargs  # type: Any
      ):
          # type: (...) -> Iterable["models.StorageListResult"]
          """List storage accounts managed by the specified key vault. This operation requires the
          storage/list permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param maxresults: Maximum number of results to return in a page. If not specified the service
           will return up to 25 results.
          :type maxresults: int
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: An iterator like instance of either StorageListResult or the result of cls(response)
          :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.v7_0.models.StorageListResult]
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.StorageListResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          def prepare_request(next_link=None):
              # Construct headers
              header_parameters = {}  # type: Dict[str, Any]
              header_parameters['Accept'] = 'application/json'
  
              if not next_link:
                  # Construct URL
                  url = self.get_storage_accounts.metadata['url']  # type: ignore
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  # Construct parameters
                  query_parameters = {}  # type: Dict[str, Any]
                  if maxresults is not None:
                      query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
                  query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
                  request = self._client.get(url, query_parameters, header_parameters)
              else:
                  url = next_link
                  query_parameters = {}  # type: Dict[str, Any]
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def extract_data(pipeline_response):
              deserialized = self._deserialize('StorageListResult', pipeline_response)
              list_of_elem = deserialized.value
              if cls:
                  list_of_elem = cls(list_of_elem)
              return deserialized.next_link or None, iter(list_of_elem)
  
          def get_next(next_link=None):
              request = prepare_request(next_link)
  
              pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
              response = pipeline_response.http_response
  
              if response.status_code not in [200]:
                  error = self._deserialize(models.KeyVaultError, response)
                  map_error(status_code=response.status_code, response=response, error_map=error_map)
                  raise HttpResponseError(response=response, model=error)
  
              return pipeline_response
  
          return ItemPaged(
              get_next, extract_data
          )
      get_storage_accounts.metadata = {'url': '/storage'}  # type: ignore
  
      def get_deleted_storage_accounts(
          self,
          vault_base_url,  # type: str
          maxresults=None,  # type: Optional[int]
          **kwargs  # type: Any
      ):
          # type: (...) -> Iterable["models.DeletedStorageListResult"]
          """Lists deleted storage accounts for the specified vault.
  
          The Get Deleted Storage Accounts operation returns the storage accounts that have been deleted
          for a vault enabled for soft-delete. This operation requires the storage/list permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param maxresults: Maximum number of results to return in a page. If not specified the service
           will return up to 25 results.
          :type maxresults: int
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: An iterator like instance of either DeletedStorageListResult or the result of cls(response)
          :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.v7_0.models.DeletedStorageListResult]
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.DeletedStorageListResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          def prepare_request(next_link=None):
              # Construct headers
              header_parameters = {}  # type: Dict[str, Any]
              header_parameters['Accept'] = 'application/json'
  
              if not next_link:
                  # Construct URL
                  url = self.get_deleted_storage_accounts.metadata['url']  # type: ignore
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  # Construct parameters
                  query_parameters = {}  # type: Dict[str, Any]
                  if maxresults is not None:
                      query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
                  query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
                  request = self._client.get(url, query_parameters, header_parameters)
              else:
                  url = next_link
                  query_parameters = {}  # type: Dict[str, Any]
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def extract_data(pipeline_response):
              deserialized = self._deserialize('DeletedStorageListResult', pipeline_response)
              list_of_elem = deserialized.value
              if cls:
                  list_of_elem = cls(list_of_elem)
              return deserialized.next_link or None, iter(list_of_elem)
  
          def get_next(next_link=None):
              request = prepare_request(next_link)
  
              pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
              response = pipeline_response.http_response
  
              if response.status_code not in [200]:
                  error = self._deserialize(models.KeyVaultError, response)
                  map_error(status_code=response.status_code, response=response, error_map=error_map)
                  raise HttpResponseError(response=response, model=error)
  
              return pipeline_response
  
          return ItemPaged(
              get_next, extract_data
          )
      get_deleted_storage_accounts.metadata = {'url': '/deletedstorage'}  # type: ignore
  
      def get_deleted_storage_account(
          self,
          vault_base_url,  # type: str
          storage_account_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.DeletedStorageBundle"
          """Gets the specified deleted storage account.
  
          The Get Deleted Storage Account operation returns the specified deleted storage account along
          with its attributes. This operation requires the storage/get permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param storage_account_name: The name of the storage account.
          :type storage_account_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: DeletedStorageBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.DeletedStorageBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.DeletedStorageBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.get_deleted_storage_account.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.get(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('DeletedStorageBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      get_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}'}  # type: ignore
  
      def purge_deleted_storage_account(
          self,
          vault_base_url,  # type: str
          storage_account_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> None
          """Permanently deletes the specified storage account.
  
          The purge deleted storage account operation removes the secret permanently, without the
          possibility of recovery. This operation can only be performed on a soft-delete enabled vault.
          This operation requires the storage/purge permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param storage_account_name: The name of the storage account.
          :type storage_account_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: None, or the result of cls(response)
          :rtype: None
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType[None]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.purge_deleted_storage_account.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
  
          request = self._client.delete(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [204]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          if cls:
              return cls(pipeline_response, None, {})
  
      purge_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}'}  # type: ignore
  
      def recover_deleted_storage_account(
          self,
          vault_base_url,  # type: str
          storage_account_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.StorageBundle"
          """Recovers the deleted storage account.
  
          Recovers the deleted storage account in the specified vault. This operation can only be
          performed on a soft-delete enabled vault. This operation requires the storage/recover
          permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param storage_account_name: The name of the storage account.
          :type storage_account_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: StorageBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.StorageBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.StorageBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.recover_deleted_storage_account.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.post(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('StorageBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      recover_deleted_storage_account.metadata = {'url': '/deletedstorage/{storage-account-name}/recover'}  # type: ignore
  
      def backup_storage_account(
          self,
          vault_base_url,  # type: str
          storage_account_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.BackupStorageResult"
          """Backs up the specified storage account.
  
          Requests that a backup of the specified storage account be downloaded to the client. This
          operation requires the storage/backup permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param storage_account_name: The name of the storage account.
          :type storage_account_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: BackupStorageResult, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.BackupStorageResult
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.BackupStorageResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.backup_storage_account.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.post(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('BackupStorageResult', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      backup_storage_account.metadata = {'url': '/storage/{storage-account-name}/backup'}  # type: ignore
  
      def restore_storage_account(
          self,
          vault_base_url,  # type: str
          parameters,  # type: "models.StorageRestoreParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.StorageBundle"
          """Restores a backed up storage account to a vault.
  
          Restores a backed up storage account to a vault. This operation requires the storage/restore
          permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param parameters: The parameters to restore the storage account.
          :type parameters: ~azure.keyvault.v7_0.models.StorageRestoreParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: StorageBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.StorageBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.StorageBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.restore_storage_account.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'StorageRestoreParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('StorageBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      restore_storage_account.metadata = {'url': '/storage/restore'}  # type: ignore
  
      def delete_storage_account(
          self,
          vault_base_url,  # type: str
          storage_account_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.DeletedStorageBundle"
          """Deletes a storage account. This operation requires the storage/delete permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param storage_account_name: The name of the storage account.
          :type storage_account_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: DeletedStorageBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.DeletedStorageBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.DeletedStorageBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.delete_storage_account.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.delete(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('DeletedStorageBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      delete_storage_account.metadata = {'url': '/storage/{storage-account-name}'}  # type: ignore
  
      def get_storage_account(
          self,
          vault_base_url,  # type: str
          storage_account_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.StorageBundle"
          """Gets information about a specified storage account. This operation requires the storage/get
          permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param storage_account_name: The name of the storage account.
          :type storage_account_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: StorageBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.StorageBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.StorageBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.get_storage_account.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.get(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('StorageBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      get_storage_account.metadata = {'url': '/storage/{storage-account-name}'}  # type: ignore
  
      def set_storage_account(
          self,
          vault_base_url,  # type: str
          storage_account_name,  # type: str
          parameters,  # type: "models.StorageAccountCreateParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.StorageBundle"
          """Creates or updates a new storage account. This operation requires the storage/set permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param storage_account_name: The name of the storage account.
          :type storage_account_name: str
          :param parameters: The parameters to create a storage account.
          :type parameters: ~azure.keyvault.v7_0.models.StorageAccountCreateParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: StorageBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.StorageBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.StorageBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.set_storage_account.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'StorageAccountCreateParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('StorageBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      set_storage_account.metadata = {'url': '/storage/{storage-account-name}'}  # type: ignore
  
      def update_storage_account(
          self,
          vault_base_url,  # type: str
          storage_account_name,  # type: str
          parameters,  # type: "models.StorageAccountUpdateParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.StorageBundle"
          """Updates the specified attributes associated with the given storage account. This operation
          requires the storage/set/update permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param storage_account_name: The name of the storage account.
          :type storage_account_name: str
          :param parameters: The parameters to update a storage account.
          :type parameters: ~azure.keyvault.v7_0.models.StorageAccountUpdateParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: StorageBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.StorageBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.StorageBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.update_storage_account.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'StorageAccountUpdateParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('StorageBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      update_storage_account.metadata = {'url': '/storage/{storage-account-name}'}  # type: ignore
  
      def regenerate_storage_account_key(
          self,
          vault_base_url,  # type: str
          storage_account_name,  # type: str
          parameters,  # type: "models.StorageAccountRegenerteKeyParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.StorageBundle"
          """Regenerates the specified key value for the given storage account. This operation requires the
          storage/regeneratekey permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param storage_account_name: The name of the storage account.
          :type storage_account_name: str
          :param parameters: The parameters to regenerate storage account key.
          :type parameters: ~azure.keyvault.v7_0.models.StorageAccountRegenerteKeyParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: StorageBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.StorageBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.StorageBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.regenerate_storage_account_key.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'StorageAccountRegenerteKeyParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('StorageBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      regenerate_storage_account_key.metadata = {'url': '/storage/{storage-account-name}/regeneratekey'}  # type: ignore
  
      def get_sas_definitions(
          self,
          vault_base_url,  # type: str
          storage_account_name,  # type: str
          maxresults=None,  # type: Optional[int]
          **kwargs  # type: Any
      ):
          # type: (...) -> Iterable["models.SasDefinitionListResult"]
          """List storage SAS definitions for the given storage account. This operation requires the
          storage/listsas permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param storage_account_name: The name of the storage account.
          :type storage_account_name: str
          :param maxresults: Maximum number of results to return in a page. If not specified the service
           will return up to 25 results.
          :type maxresults: int
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: An iterator like instance of either SasDefinitionListResult or the result of cls(response)
          :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.v7_0.models.SasDefinitionListResult]
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.SasDefinitionListResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          def prepare_request(next_link=None):
              # Construct headers
              header_parameters = {}  # type: Dict[str, Any]
              header_parameters['Accept'] = 'application/json'
  
              if not next_link:
                  # Construct URL
                  url = self.get_sas_definitions.metadata['url']  # type: ignore
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                      'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  # Construct parameters
                  query_parameters = {}  # type: Dict[str, Any]
                  if maxresults is not None:
                      query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
                  query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
                  request = self._client.get(url, query_parameters, header_parameters)
              else:
                  url = next_link
                  query_parameters = {}  # type: Dict[str, Any]
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                      'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def extract_data(pipeline_response):
              deserialized = self._deserialize('SasDefinitionListResult', pipeline_response)
              list_of_elem = deserialized.value
              if cls:
                  list_of_elem = cls(list_of_elem)
              return deserialized.next_link or None, iter(list_of_elem)
  
          def get_next(next_link=None):
              request = prepare_request(next_link)
  
              pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
              response = pipeline_response.http_response
  
              if response.status_code not in [200]:
                  error = self._deserialize(models.KeyVaultError, response)
                  map_error(status_code=response.status_code, response=response, error_map=error_map)
                  raise HttpResponseError(response=response, model=error)
  
              return pipeline_response
  
          return ItemPaged(
              get_next, extract_data
          )
      get_sas_definitions.metadata = {'url': '/storage/{storage-account-name}/sas'}  # type: ignore
  
      def get_deleted_sas_definitions(
          self,
          vault_base_url,  # type: str
          storage_account_name,  # type: str
          maxresults=None,  # type: Optional[int]
          **kwargs  # type: Any
      ):
          # type: (...) -> Iterable["models.DeletedSasDefinitionListResult"]
          """Lists deleted SAS definitions for the specified vault and storage account.
  
          The Get Deleted Sas Definitions operation returns the SAS definitions that have been deleted
          for a vault enabled for soft-delete. This operation requires the storage/listsas permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param storage_account_name: The name of the storage account.
          :type storage_account_name: str
          :param maxresults: Maximum number of results to return in a page. If not specified the service
           will return up to 25 results.
          :type maxresults: int
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: An iterator like instance of either DeletedSasDefinitionListResult or the result of cls(response)
          :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.v7_0.models.DeletedSasDefinitionListResult]
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.DeletedSasDefinitionListResult"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          def prepare_request(next_link=None):
              # Construct headers
              header_parameters = {}  # type: Dict[str, Any]
              header_parameters['Accept'] = 'application/json'
  
              if not next_link:
                  # Construct URL
                  url = self.get_deleted_sas_definitions.metadata['url']  # type: ignore
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                      'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  # Construct parameters
                  query_parameters = {}  # type: Dict[str, Any]
                  if maxresults is not None:
                      query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1)
                  query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
                  request = self._client.get(url, query_parameters, header_parameters)
              else:
                  url = next_link
                  query_parameters = {}  # type: Dict[str, Any]
                  path_format_arguments = {
                      'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
                      'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
                  }
                  url = self._client.format_url(url, **path_format_arguments)
                  request = self._client.get(url, query_parameters, header_parameters)
              return request
  
          def extract_data(pipeline_response):
              deserialized = self._deserialize('DeletedSasDefinitionListResult', pipeline_response)
              list_of_elem = deserialized.value
              if cls:
                  list_of_elem = cls(list_of_elem)
              return deserialized.next_link or None, iter(list_of_elem)
  
          def get_next(next_link=None):
              request = prepare_request(next_link)
  
              pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
              response = pipeline_response.http_response
  
              if response.status_code not in [200]:
                  error = self._deserialize(models.KeyVaultError, response)
                  map_error(status_code=response.status_code, response=response, error_map=error_map)
                  raise HttpResponseError(response=response, model=error)
  
              return pipeline_response
  
          return ItemPaged(
              get_next, extract_data
          )
      get_deleted_sas_definitions.metadata = {'url': '/deletedstorage/{storage-account-name}/sas'}  # type: ignore
  
      def get_deleted_sas_definition(
          self,
          vault_base_url,  # type: str
          storage_account_name,  # type: str
          sas_definition_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.DeletedSasDefinitionBundle"
          """Gets the specified deleted sas definition.
  
          The Get Deleted SAS Definition operation returns the specified deleted SAS definition along
          with its attributes. This operation requires the storage/getsas permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param storage_account_name: The name of the storage account.
          :type storage_account_name: str
          :param sas_definition_name: The name of the SAS definition.
          :type sas_definition_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: DeletedSasDefinitionBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.DeletedSasDefinitionBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.DeletedSasDefinitionBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.get_deleted_sas_definition.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
              'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.get(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('DeletedSasDefinitionBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      get_deleted_sas_definition.metadata = {'url': '/deletedstorage/{storage-account-name}/sas/{sas-definition-name}'}  # type: ignore
  
      def recover_deleted_sas_definition(
          self,
          vault_base_url,  # type: str
          storage_account_name,  # type: str
          sas_definition_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.SasDefinitionBundle"
          """Recovers the deleted SAS definition.
  
          Recovers the deleted SAS definition for the specified storage account. This operation can only
          be performed on a soft-delete enabled vault. This operation requires the storage/recover
          permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param storage_account_name: The name of the storage account.
          :type storage_account_name: str
          :param sas_definition_name: The name of the SAS definition.
          :type sas_definition_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: SasDefinitionBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.SasDefinitionBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.SasDefinitionBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.recover_deleted_sas_definition.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
              'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.post(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('SasDefinitionBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      recover_deleted_sas_definition.metadata = {'url': '/deletedstorage/{storage-account-name}/sas/{sas-definition-name}/recover'}  # type: ignore
  
      def delete_sas_definition(
          self,
          vault_base_url,  # type: str
          storage_account_name,  # type: str
          sas_definition_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.DeletedSasDefinitionBundle"
          """Deletes a SAS definition from a specified storage account. This operation requires the
          storage/deletesas permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param storage_account_name: The name of the storage account.
          :type storage_account_name: str
          :param sas_definition_name: The name of the SAS definition.
          :type sas_definition_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: DeletedSasDefinitionBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.DeletedSasDefinitionBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.DeletedSasDefinitionBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.delete_sas_definition.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
              'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.delete(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('DeletedSasDefinitionBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      delete_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}  # type: ignore
  
      def get_sas_definition(
          self,
          vault_base_url,  # type: str
          storage_account_name,  # type: str
          sas_definition_name,  # type: str
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.SasDefinitionBundle"
          """Gets information about a SAS definition for the specified storage account. This operation
          requires the storage/getsas permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param storage_account_name: The name of the storage account.
          :type storage_account_name: str
          :param sas_definition_name: The name of the SAS definition.
          :type sas_definition_name: str
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: SasDefinitionBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.SasDefinitionBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.SasDefinitionBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
  
          # Construct URL
          url = self.get_sas_definition.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
              'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Accept'] = 'application/json'
  
          request = self._client.get(url, query_parameters, header_parameters)
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('SasDefinitionBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      get_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}  # type: ignore
  
      def set_sas_definition(
          self,
          vault_base_url,  # type: str
          storage_account_name,  # type: str
          sas_definition_name,  # type: str
          parameters,  # type: "models.SasDefinitionCreateParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.SasDefinitionBundle"
          """Creates or updates a new SAS definition for the specified storage account. This operation
          requires the storage/setsas permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param storage_account_name: The name of the storage account.
          :type storage_account_name: str
          :param sas_definition_name: The name of the SAS definition.
          :type sas_definition_name: str
          :param parameters: The parameters to create a SAS definition.
          :type parameters: ~azure.keyvault.v7_0.models.SasDefinitionCreateParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: SasDefinitionBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.SasDefinitionBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.SasDefinitionBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.set_sas_definition.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
              'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'SasDefinitionCreateParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('SasDefinitionBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      set_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}  # type: ignore
  
      def update_sas_definition(
          self,
          vault_base_url,  # type: str
          storage_account_name,  # type: str
          sas_definition_name,  # type: str
          parameters,  # type: "models.SasDefinitionUpdateParameters"
          **kwargs  # type: Any
      ):
          # type: (...) -> "models.SasDefinitionBundle"
          """Updates the specified attributes associated with the given SAS definition. This operation
          requires the storage/setsas permission.
  
          :param vault_base_url: The vault name, for example https://myvault.vault.azure.net.
          :type vault_base_url: str
          :param storage_account_name: The name of the storage account.
          :type storage_account_name: str
          :param sas_definition_name: The name of the SAS definition.
          :type sas_definition_name: str
          :param parameters: The parameters to update a SAS definition.
          :type parameters: ~azure.keyvault.v7_0.models.SasDefinitionUpdateParameters
          :keyword callable cls: A custom type or function that will be passed the direct response
          :return: SasDefinitionBundle, or the result of cls(response)
          :rtype: ~azure.keyvault.v7_0.models.SasDefinitionBundle
          :raises: ~azure.core.exceptions.HttpResponseError
          """
          cls = kwargs.pop('cls', None)  # type: ClsType["models.SasDefinitionBundle"]
          error_map = {404: ResourceNotFoundError, 409: ResourceExistsError}
          error_map.update(kwargs.pop('error_map', {}))
          api_version = "7.0"
          content_type = kwargs.pop("content_type", "application/json")
  
          # Construct URL
          url = self.update_sas_definition.metadata['url']  # type: ignore
          path_format_arguments = {
              'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True),
              'storage-account-name': self._serialize.url("storage_account_name", storage_account_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
              'sas-definition-name': self._serialize.url("sas_definition_name", sas_definition_name, 'str', pattern=r'^[0-9a-zA-Z]+$'),
          }
          url = self._client.format_url(url, **path_format_arguments)
  
          # Construct parameters
          query_parameters = {}  # type: Dict[str, Any]
          query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str')
  
          # Construct headers
          header_parameters = {}  # type: Dict[str, Any]
          header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str')
          header_parameters['Accept'] = 'application/json'
  
          body_content_kwargs = {}  # type: Dict[str, Any]
          body_content = self._serialize.body(parameters, 'SasDefinitionUpdateParameters')
          body_content_kwargs['content'] = body_content
          request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs)
  
          pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs)
          response = pipeline_response.http_response
  
          if response.status_code not in [200]:
              map_error(status_code=response.status_code, response=response, error_map=error_map)
              error = self._deserialize(models.KeyVaultError, response)
              raise HttpResponseError(response=response, model=error)
  
          deserialized = self._deserialize('SasDefinitionBundle', pipeline_response)
  
          if cls:
              return cls(pipeline_response, deserialized, {})
  
          return deserialized
      update_sas_definition.metadata = {'url': '/storage/{storage-account-name}/sas/{sas-definition-name}'}  # type: ignore
  