From ddcae4ecc1a0d2a72cbf32355403b989f8bf1b43 Mon Sep 17 00:00:00 2001 From: SDKAuto Date: Wed, 23 Apr 2025 22:29:43 +0000 Subject: [PATCH] CodeGen from PR 34032 in Azure/azure-rest-api-specs Merge c05749c07658b43406ee1632c47ff96074aa5137 into 4689e75cdeaa04dbeead0237b72cae8dc8dbba4d --- .../azure-keyvault-certificates/MANIFEST.in | 2 +- .../azure-keyvault-certificates/_meta.json | 6 + .../apiview-properties.json | 71 + .../azure/__init__.py | 4 - .../azure/keyvault/__init__.py | 4 - .../azure/keyvault/certificates/__init__.py | 80 +- .../azure/keyvault/certificates/_client.py | 1127 +----------- .../{_generated => }/_configuration.py | 0 .../azure/keyvault/certificates/_enums.py | 77 - .../certificates/_generated/__init__.py | 32 - .../certificates/_generated/_client.py | 100 -- .../certificates/_generated/_version.py | 9 - .../certificates/_generated/aio/__init__.py | 29 - .../certificates/_generated/aio/_client.py | 102 -- .../certificates/_generated/models/_patch.py | 20 - .../keyvault/certificates/_generated/py.typed | 1 - .../certificates/_generated/tsp-location.yaml | 5 - .../{_generated => }/_model_base.py | 27 +- .../azure/keyvault/certificates/_models.py | 1504 ----------------- .../{_generated => }/_operations/__init__.py | 0 .../_operations/_operations.py | 168 +- .../{_generated => }/_operations/_patch.py | 9 +- .../aio/_operations => }/_patch.py | 9 +- .../azure/keyvault/certificates/_polling.py | 61 - .../keyvault/certificates/_sdk_moniker.py | 7 - .../{_generated => }/_serialization.py | 32 +- .../keyvault/certificates/_shared/__init__.py | 78 - .../keyvault/certificates/_shared/_polling.py | 143 -- .../certificates/_shared/_polling_async.py | 87 - .../_shared/async_challenge_auth_policy.py | 262 --- .../certificates/_shared/async_client_base.py | 117 -- .../_shared/challenge_auth_policy.py | 270 --- .../certificates/_shared/client_base.py | 161 -- .../certificates/_shared/http_challenge.py | 186 -- .../_shared/http_challenge_cache.py | 93 - .../certificates/{_generated => }/_vendor.py | 0 .../azure/keyvault/certificates/_version.py | 13 +- .../keyvault/certificates/aio/__init__.py | 33 +- .../keyvault/certificates/aio/_client.py | 1129 +------------ .../{_generated => }/aio/_configuration.py | 0 .../aio/_operations/__init__.py | 0 .../aio/_operations/_operations.py | 170 +- .../{_generated => aio/_operations}/_patch.py | 9 +- .../{_generated => }/aio/_patch.py | 9 +- .../certificates/aio/_polling_async.py | 63 - .../{_generated => }/aio/_vendor.py | 0 .../{_generated => }/models/__init__.py | 4 +- .../{_generated => }/models/_enums.py | 2 +- .../{_generated => }/models/_models.py | 474 +++--- .../keyvault/certificates/models/_patch.py | 21 + .../samples/backup_restore_operations.py | 1 + .../backup_restore_operations_async.py | 1 + .../samples/contacts.py | 1 + .../samples/contacts_async.py | 1 + .../samples/hello_world.py | 1 + .../samples/hello_world_async.py | 1 + .../samples/import_certificate.py | 1 + .../samples/import_certificate_async.py | 1 + .../samples/issuers.py | 1 + .../samples/issuers_async.py | 1 + .../samples/list_operations.py | 1 + .../samples/list_operations_async.py | 1 + .../samples/parse_certificate.py | 1 + .../samples/parse_certificate_async.py | 1 + .../samples/recover_purge_operations.py | 1 + .../samples/recover_purge_operations_async.py | 1 + .../azure-keyvault-certificates/setup.py | 57 +- .../tests/certs.py | 1 + .../tests/test_certificates_client.py | 1 + .../tests/test_certificates_client_async.py | 1 + .../tsp-location.yaml | 5 + 71 files changed, 851 insertions(+), 6040 deletions(-) create mode 100644 sdk/keyvault/azure-keyvault-certificates/_meta.json create mode 100644 sdk/keyvault/azure-keyvault-certificates/apiview-properties.json rename sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/{_generated => }/_configuration.py (100%) delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_enums.py delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/__init__.py delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_client.py delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_version.py delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/__init__.py delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_client.py delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/models/_patch.py delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/py.typed delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/tsp-location.yaml rename sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/{_generated => }/_model_base.py (98%) delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_models.py rename sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/{_generated => }/_operations/__init__.py (100%) rename sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/{_generated => }/_operations/_operations.py (95%) rename sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/{_generated => }/_operations/_patch.py (61%) rename sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/{_generated/aio/_operations => }/_patch.py (61%) delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_polling.py delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_sdk_moniker.py rename sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/{_generated => }/_serialization.py (98%) delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/__init__.py delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_polling.py delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_polling_async.py delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/async_challenge_auth_policy.py delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/async_client_base.py delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/challenge_auth_policy.py delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/client_base.py delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/http_challenge.py delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/http_challenge_cache.py rename sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/{_generated => }/_vendor.py (100%) rename sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/{_generated => }/aio/_configuration.py (100%) rename sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/{_generated => }/aio/_operations/__init__.py (100%) rename sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/{_generated => }/aio/_operations/_operations.py (94%) rename sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/{_generated => aio/_operations}/_patch.py (61%) rename sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/{_generated => }/aio/_patch.py (61%) delete mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_polling_async.py rename sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/{_generated => }/aio/_vendor.py (100%) rename sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/{_generated => }/models/__init__.py (98%) rename sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/{_generated => }/models/_enums.py (98%) rename sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/{_generated => }/models/_models.py (77%) create mode 100644 sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/models/_patch.py create mode 100644 sdk/keyvault/azure-keyvault-certificates/tsp-location.yaml diff --git a/sdk/keyvault/azure-keyvault-certificates/MANIFEST.in b/sdk/keyvault/azure-keyvault-certificates/MANIFEST.in index c22abb8c0232..beadef0a4b14 100644 --- a/sdk/keyvault/azure-keyvault-certificates/MANIFEST.in +++ b/sdk/keyvault/azure-keyvault-certificates/MANIFEST.in @@ -4,4 +4,4 @@ include azure/keyvault/certificates/py.typed recursive-include tests *.py recursive-include samples *.py *.md include azure/__init__.py -include azure/keyvault/__init__.py \ No newline at end of file +include azure/keyvault/__init__.py diff --git a/sdk/keyvault/azure-keyvault-certificates/_meta.json b/sdk/keyvault/azure-keyvault-certificates/_meta.json new file mode 100644 index 000000000000..562a51a7afd8 --- /dev/null +++ b/sdk/keyvault/azure-keyvault-certificates/_meta.json @@ -0,0 +1,6 @@ +{ + "commit": "4465f2aaefeb75e8a088c7e0950979e03430a234", + "repository_url": "https://github.com/Azure/azure-rest-api-specs", + "typespec_src": "specification/keyvault/Security.KeyVault.Certificates", + "@azure-tools/typespec-python": "0.43.0" +} \ No newline at end of file diff --git a/sdk/keyvault/azure-keyvault-certificates/apiview-properties.json b/sdk/keyvault/azure-keyvault-certificates/apiview-properties.json new file mode 100644 index 000000000000..f0ea8b529e02 --- /dev/null +++ b/sdk/keyvault/azure-keyvault-certificates/apiview-properties.json @@ -0,0 +1,71 @@ +{ + "CrossLanguagePackageId": "KeyVault", + "CrossLanguageDefinitionId": { + "azure.keyvault.certificates.models.Action": "KeyVault.Action", + "azure.keyvault.certificates.models.AdministratorDetails": "KeyVault.AdministratorDetails", + "azure.keyvault.certificates.models.BackupCertificateResult": "KeyVault.BackupCertificateResult", + "azure.keyvault.certificates.models.CertificateAttributes": "KeyVault.CertificateAttributes", + "azure.keyvault.certificates.models.CertificateBundle": "KeyVault.CertificateBundle", + "azure.keyvault.certificates.models.CertificateCreateParameters": "KeyVault.CertificateCreateParameters", + "azure.keyvault.certificates.models.CertificateImportParameters": "KeyVault.CertificateImportParameters", + "azure.keyvault.certificates.models.CertificateIssuerItem": "KeyVault.CertificateIssuerItem", + "azure.keyvault.certificates.models.CertificateIssuerSetParameters": "KeyVault.CertificateIssuerSetParameters", + "azure.keyvault.certificates.models.CertificateIssuerUpdateParameters": "KeyVault.CertificateIssuerUpdateParameters", + "azure.keyvault.certificates.models.CertificateItem": "KeyVault.CertificateItem", + "azure.keyvault.certificates.models.CertificateMergeParameters": "KeyVault.CertificateMergeParameters", + "azure.keyvault.certificates.models.CertificateOperation": "KeyVault.CertificateOperation", + "azure.keyvault.certificates.models.CertificateOperationUpdateParameter": "KeyVault.CertificateOperationUpdateParameter", + "azure.keyvault.certificates.models.CertificatePolicy": "KeyVault.CertificatePolicy", + "azure.keyvault.certificates.models.CertificateRestoreParameters": "KeyVault.CertificateRestoreParameters", + "azure.keyvault.certificates.models.CertificateUpdateParameters": "KeyVault.CertificateUpdateParameters", + "azure.keyvault.certificates.models.Contact": "KeyVault.Contact", + "azure.keyvault.certificates.models.Contacts": "KeyVault.Contacts", + "azure.keyvault.certificates.models.DeletedCertificateBundle": "KeyVault.DeletedCertificateBundle", + "azure.keyvault.certificates.models.DeletedCertificateItem": "KeyVault.DeletedCertificateItem", + "azure.keyvault.certificates.models.Error": "Error", + "azure.keyvault.certificates.models.IssuerAttributes": "KeyVault.IssuerAttributes", + "azure.keyvault.certificates.models.IssuerBundle": "KeyVault.IssuerBundle", + "azure.keyvault.certificates.models.IssuerCredentials": "KeyVault.IssuerCredentials", + "azure.keyvault.certificates.models.IssuerParameters": "KeyVault.IssuerParameters", + "azure.keyvault.certificates.models.KeyProperties": "KeyVault.KeyProperties", + "azure.keyvault.certificates.models.KeyVaultError": "KeyVaultError", + "azure.keyvault.certificates.models.LifetimeAction": "KeyVault.LifetimeAction", + "azure.keyvault.certificates.models.OrganizationDetails": "KeyVault.OrganizationDetails", + "azure.keyvault.certificates.models.SecretProperties": "KeyVault.SecretProperties", + "azure.keyvault.certificates.models.SubjectAlternativeNames": "KeyVault.SubjectAlternativeNames", + "azure.keyvault.certificates.models.Trigger": "KeyVault.Trigger", + "azure.keyvault.certificates.models.X509CertificateProperties": "KeyVault.X509CertificateProperties", + "azure.keyvault.certificates.models.DeletionRecoveryLevel": "KeyVault.DeletionRecoveryLevel", + "azure.keyvault.certificates.models.JsonWebKeyType": "KeyVault.JsonWebKeyType", + "azure.keyvault.certificates.models.JsonWebKeyCurveName": "KeyVault.JsonWebKeyCurveName", + "azure.keyvault.certificates.models.KeyUsageType": "KeyVault.KeyUsageType", + "azure.keyvault.certificates.models.CertificatePolicyAction": "KeyVault.CertificatePolicyAction", + "azure.keyvault.certificates.KeyVaultClient.get_certificates": "KeyVault.getCertificates", + "azure.keyvault.certificates.KeyVaultClient.delete_certificate": "KeyVault.deleteCertificate", + "azure.keyvault.certificates.KeyVaultClient.set_certificate_contacts": "KeyVault.setCertificateContacts", + "azure.keyvault.certificates.KeyVaultClient.get_certificate_contacts": "KeyVault.getCertificateContacts", + "azure.keyvault.certificates.KeyVaultClient.delete_certificate_contacts": "KeyVault.deleteCertificateContacts", + "azure.keyvault.certificates.KeyVaultClient.get_certificate_issuers": "KeyVault.getCertificateIssuers", + "azure.keyvault.certificates.KeyVaultClient.set_certificate_issuer": "KeyVault.setCertificateIssuer", + "azure.keyvault.certificates.KeyVaultClient.update_certificate_issuer": "KeyVault.updateCertificateIssuer", + "azure.keyvault.certificates.KeyVaultClient.get_certificate_issuer": "KeyVault.getCertificateIssuer", + "azure.keyvault.certificates.KeyVaultClient.delete_certificate_issuer": "KeyVault.deleteCertificateIssuer", + "azure.keyvault.certificates.KeyVaultClient.create_certificate": "KeyVault.createCertificate", + "azure.keyvault.certificates.KeyVaultClient.import_certificate": "KeyVault.importCertificate", + "azure.keyvault.certificates.KeyVaultClient.get_certificate_versions": "KeyVault.getCertificateVersions", + "azure.keyvault.certificates.KeyVaultClient.get_certificate_policy": "KeyVault.getCertificatePolicy", + "azure.keyvault.certificates.KeyVaultClient.update_certificate_policy": "KeyVault.updateCertificatePolicy", + "azure.keyvault.certificates.KeyVaultClient.update_certificate": "KeyVault.updateCertificate", + "azure.keyvault.certificates.KeyVaultClient.get_certificate": "KeyVault.getCertificate", + "azure.keyvault.certificates.KeyVaultClient.update_certificate_operation": "KeyVault.updateCertificateOperation", + "azure.keyvault.certificates.KeyVaultClient.get_certificate_operation": "KeyVault.getCertificateOperation", + "azure.keyvault.certificates.KeyVaultClient.delete_certificate_operation": "KeyVault.deleteCertificateOperation", + "azure.keyvault.certificates.KeyVaultClient.merge_certificate": "KeyVault.mergeCertificate", + "azure.keyvault.certificates.KeyVaultClient.backup_certificate": "KeyVault.backupCertificate", + "azure.keyvault.certificates.KeyVaultClient.restore_certificate": "KeyVault.restoreCertificate", + "azure.keyvault.certificates.KeyVaultClient.get_deleted_certificates": "KeyVault.getDeletedCertificates", + "azure.keyvault.certificates.KeyVaultClient.get_deleted_certificate": "KeyVault.getDeletedCertificate", + "azure.keyvault.certificates.KeyVaultClient.purge_deleted_certificate": "KeyVault.purgeDeletedCertificate", + "azure.keyvault.certificates.KeyVaultClient.recover_deleted_certificate": "KeyVault.recoverDeletedCertificate" + } +} \ No newline at end of file diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/__init__.py b/sdk/keyvault/azure-keyvault-certificates/azure/__init__.py index 679ab6995134..d55ccad1f573 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/__init__.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/__init__.py @@ -1,5 +1 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ __path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/__init__.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/__init__.py index 679ab6995134..d55ccad1f573 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/__init__.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/__init__.py @@ -1,5 +1 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ __path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/__init__.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/__init__.py index 3e8da4143494..4f7962408227 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/__init__.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/__init__.py @@ -1,56 +1,32 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -from ._client import CertificateClient -from ._enums import( - CertificatePolicyAction, - KeyCurveName, - KeyType, - CertificateContentType, - KeyUsageType, - WellKnownIssuerNames -) -from ._models import( - AdministratorContact, - CertificateContact, - CertificateIssuer, - CertificateOperation, - CertificateOperationError, - CertificatePolicy, - CertificateProperties, - DeletedCertificate, - IssuerProperties, - LifetimeAction, - KeyVaultCertificate, - KeyVaultCertificateIdentifier -) -from ._shared.client_base import ApiVersion +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=wrong-import-position -__all__ = [ - "ApiVersion", - "CertificatePolicyAction", - "AdministratorContact", - "CertificateClient", - "CertificateContact", - "CertificateIssuer", - "CertificateOperation", - "CertificateOperationError", - "CertificatePolicy", - "CertificateProperties", - "DeletedCertificate", - "IssuerProperties", - "KeyCurveName", - "KeyType", - "KeyVaultCertificate", - "KeyVaultCertificateIdentifier", - "KeyUsageType", - "LifetimeAction", - "CertificateContentType", - "WellKnownIssuerNames", - "CertificateIssuer", - "IssuerProperties" -] +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from ._patch import * # pylint: disable=unused-wildcard-import +from ._client import KeyVaultClient # type: ignore from ._version import VERSION + __version__ = VERSION + +try: + from ._patch import __all__ as _patch_all + from ._patch import * +except ImportError: + _patch_all = [] +from ._patch import patch_sdk as _patch_sdk + +__all__ = [ + "KeyVaultClient", +] +__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore + +_patch_sdk() diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_client.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_client.py index 01f2b7d0db49..ad79f0c7348a 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_client.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_client.py @@ -1,1072 +1,101 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -# pylint:disable=too-many-lines,too-many-public-methods,bad-option-value,delete-operation-wrong-return-type -import base64 -from functools import partial -from typing import Any, Dict, List, Optional, Union +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- -from azure.core.polling import LROPoller -from azure.core.paging import ItemPaged -from azure.core.tracing.decorator import distributed_trace +from copy import deepcopy +from typing import Any, TYPE_CHECKING +from typing_extensions import Self -from ._shared import KeyVaultClientBase -from ._shared._polling import DeleteRecoverPollingMethod, KeyVaultOperationPoller -from ._models import ( - AdministratorContact, - KeyVaultCertificate, - CertificateProperties, - CertificatePolicy, - DeletedCertificate, - CertificateIssuer, - IssuerProperties, - CertificateContact, - CertificateOperation, -) -from ._polling import CreateCertificatePoller +from azure.core import PipelineClient +from azure.core.pipeline import policies +from azure.core.rest import HttpRequest, HttpResponse +from ._configuration import KeyVaultClientConfiguration +from ._operations import KeyVaultClientOperationsMixin +from ._serialization import Deserializer, Serializer -NO_SAN_OR_SUBJECT = "You need to set either subject or one of the subject alternative names parameters in the policy" +if TYPE_CHECKING: + from azure.core.credentials import TokenCredential -class CertificateClient(KeyVaultClientBase): - """A high-level interface for managing a vault's certificates. +class KeyVaultClient(KeyVaultClientOperationsMixin): + """The key vault client performs cryptographic key operations and vault operations against the Key + Vault service. - :param str vault_url: URL of the vault the client will access. This is also called the vault's "DNS Name". - You should validate that this URL references a valid Key Vault resource. See https://aka.ms/azsdk/blog/vault-uri - for details. - :param credential: An object which can provide an access token for the vault, such as a credential from - :mod:`azure.identity` + :param vault_base_url: Required. + :type vault_base_url: str + :param credential: Credential used to authenticate requests to the service. Required. :type credential: ~azure.core.credentials.TokenCredential - - :keyword api_version: Version of the service API to use. Defaults to the most recent. - :paramtype api_version: ~azure.keyvault.certificates.ApiVersion or str - :keyword bool verify_challenge_resource: Whether to verify the authentication challenge resource matches the Key - Vault domain. Defaults to True. - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START create_certificate_client] - :end-before: [END create_certificate_client] - :language: python - :caption: Create a new ``CertificateClient`` - :dedent: 4 + :keyword api_version: The API version to use for this operation. Default value is + "7.6-preview.2". Note that overriding this default value may result in unsupported behavior. + :paramtype api_version: str """ - # pylint:disable=protected-access - - @distributed_trace - def begin_create_certificate( - self, - certificate_name: str, - policy: CertificatePolicy, - *, - enabled: Optional[bool] = None, - tags: Optional[Dict[str, str]] = None, - preserve_certificate_order: Optional[bool] = None, - **kwargs: Any, - ) -> LROPoller[Union[KeyVaultCertificate, CertificateOperation]]: - """Creates a new certificate. - - If this is the first version, the certificate resource is created. This operation requires the - certificates/create permission. Waiting on the returned poller requires the certificates/get permission and - gives you the certificate if creation is successful, or the CertificateOperation if not -- otherwise, it raises - an :class:`~azure.core.exceptions.HttpResponseError`. - - :param str certificate_name: The name of the certificate. - :param policy: The management policy for the certificate. Either subject or one of the subject alternative - name properties are required. - :type policy: ~azure.keyvault.certificates.CertificatePolicy - - :keyword bool enabled: Whether the certificate is enabled for use. - :keyword tags: Application specific metadata in the form of key-value pairs. - :paramtype tags: dict[str, str] - :keyword bool preserve_certificate_order: Whether to preserve the order of the certificate chain. - - :returns: An LROPoller for the create certificate operation. Waiting on the poller gives you the certificate if - creation is successful, or the CertificateOperation if not. - :rtype: ~azure.core.polling.LROPoller[~azure.keyvault.certificates.KeyVaultCertificate or - ~azure.keyvault.certificates.CertificateOperation] - - :raises ValueError or ~azure.core.exceptions.HttpResponseError: - the former if the certificate policy is invalid; the latter for other errors - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START create_certificate] - :end-before: [END create_certificate] - :language: python - :caption: Create a certificate - :dedent: 8 - """ - if not (policy.san_emails or policy.san_user_principal_names or policy.san_dns_names or policy.subject): - raise ValueError(NO_SAN_OR_SUBJECT) - - polling_interval = kwargs.pop("_polling_interval", None) - if polling_interval is None: - polling_interval = 5 - - if enabled is not None: - attributes = self._models.CertificateAttributes(enabled=enabled) - else: - attributes = None - - parameters = self._models.CertificateCreateParameters( - certificate_policy=policy._to_certificate_policy_bundle(), - certificate_attributes=attributes, - tags=tags, - preserve_cert_order=preserve_certificate_order, - ) - - pipeline_response, cert_bundle = self._client.create_certificate( - certificate_name=certificate_name, - parameters=parameters, - cls=lambda pipeline_response, deserialized, _: (pipeline_response, deserialized), - **kwargs, - ) - - create_certificate_operation = CertificateOperation._from_certificate_operation_bundle(cert_bundle) - - command = partial(self.get_certificate_operation, certificate_name=certificate_name, **kwargs) - - get_certificate_command = partial(self.get_certificate, certificate_name=certificate_name, **kwargs) - - create_certificate_polling = CreateCertificatePoller( - pipeline_response=pipeline_response, - get_certificate_command=get_certificate_command, - interval=polling_interval - ) - - def no_op(*_, **__) -> Any: # The deserialization callback is ignored based on polling implementation - pass - - return LROPoller(command, create_certificate_operation, no_op, create_certificate_polling) - - @distributed_trace - def get_certificate(self, certificate_name: str, **kwargs: Any) -> KeyVaultCertificate: - """Gets a certificate with its management policy attached. Requires certificates/get permission. - - Does not accept the version of the certificate as a parameter. To get a specific version of the - certificate, call :func:`get_certificate_version`. - - :param str certificate_name: The name of the certificate in the given vault. - - :returns: An instance of KeyVaultCertificate - :rtype: ~azure.keyvault.certificates.KeyVaultCertificate - - :raises ~azure.core.exceptions.ResourceNotFoundError or ~azure.core.exceptions.HttpResponseError: - the former if the certificate doesn't exist; the latter for other errors - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START get_certificate] - :end-before: [END get_certificate] - :language: python - :caption: Get a certificate - :dedent: 8 - """ - bundle = self._client.get_certificate( - certificate_name=certificate_name, certificate_version="", **kwargs - ) - return KeyVaultCertificate._from_certificate_bundle(certificate_bundle=bundle) - - @distributed_trace - def get_certificate_version(self, certificate_name: str, version: str, **kwargs: Any) -> KeyVaultCertificate: - """Gets a specific version of a certificate without returning its management policy. - - Requires certificates/get permission. To get the latest version of the certificate, or to get the certificate's - policy as well, call :func:`get_certificate`. - - :param str certificate_name: The name of the certificate in the given vault. - :param str version: The version of the certificate. - - :returns: An instance of KeyVaultCertificate - :rtype: ~azure.keyvault.certificates.KeyVaultCertificate - - :raises ~azure.core.exceptions.ResourceNotFoundError or ~azure.core.exceptions.HttpResponseError: - the former if the certificate doesn't exist; the latter for other errors - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START get_certificate_version] - :end-before: [END get_certificate_version] - :language: python - :caption: Get a certificate with a specific version - :dedent: 8 - """ - bundle = self._client.get_certificate( - certificate_name=certificate_name, certificate_version=version, **kwargs - ) - return KeyVaultCertificate._from_certificate_bundle(certificate_bundle=bundle) - - @distributed_trace - def begin_delete_certificate(self, certificate_name: str, **kwargs: Any) -> LROPoller[DeletedCertificate]: - """Delete all versions of a certificate. Requires certificates/delete permission. - - When this method returns Key Vault has begun deleting the certificate. Deletion may take several seconds in a - vault with soft-delete enabled. This method therefore returns a poller enabling you to wait for deletion to - complete. - - :param str certificate_name: The name of the certificate to delete. - - :returns: A poller for the delete certificate operation. The poller's `result` method returns the - :class:`~azure.keyvault.certificates.DeletedCertificate` without waiting for deletion to complete. If the - vault has soft-delete enabled and you want to immediately, permanently delete the certificate with - :func:`purge_deleted_certificate`, call the poller's `wait` method first. It will block until the deletion - is complete. The `wait` method requires certificates/get permission. - :rtype: ~azure.core.polling.LROPoller[~azure.keyvault.certificates.DeletedCertificate] - - :raises ~azure.core.exceptions.ResourceNotFoundError or ~azure.core.exceptions.HttpResponseError: - the former if the certificate doesn't exist; the latter for other errors - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START delete_certificate] - :end-before: [END delete_certificate] - :language: python - :caption: Delete a certificate - :dedent: 8 - """ - polling_interval = kwargs.pop("_polling_interval", None) - if polling_interval is None: - polling_interval = 2 - pipeline_response, deleted_cert_bundle = self._client.delete_certificate( - certificate_name=certificate_name, - cls=lambda pipeline_response, deserialized, _: (pipeline_response, deserialized), - **kwargs, - ) - deleted_cert = DeletedCertificate._from_deleted_certificate_bundle(deleted_cert_bundle) - - polling_method = DeleteRecoverPollingMethod( - # no recovery ID means soft-delete is disabled, in which case we initialize the poller as finished - finished=deleted_cert.recovery_id is None, - pipeline_response=pipeline_response, - command=partial(self.get_deleted_certificate, certificate_name=certificate_name, **kwargs), - final_resource=deleted_cert, - interval=polling_interval, - ) - - return KeyVaultOperationPoller(polling_method) - - @distributed_trace - def get_deleted_certificate(self, certificate_name: str, **kwargs: Any) -> DeletedCertificate: - """Get a deleted certificate. Possible only in a vault with soft-delete enabled. - - Requires certificates/get permission. Retrieves the deleted certificate information plus its attributes, such as - retention interval, scheduled permanent deletion, and the current deletion recovery level. - - :param str certificate_name: The name of the certificate. - - :return: The deleted certificate - :rtype: ~azure.keyvault.certificates.DeletedCertificate - - :raises ~azure.core.exceptions.ResourceNotFoundError or ~azure.core.exceptions.HttpResponseError: - the former if the certificate doesn't exist; the latter for other errors - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START get_deleted_certificate] - :end-before: [END get_deleted_certificate] - :language: python - :caption: Get a deleted certificate - :dedent: 8 - """ - bundle = self._client.get_deleted_certificate( - certificate_name=certificate_name, **kwargs - ) - return DeletedCertificate._from_deleted_certificate_bundle(deleted_certificate_bundle=bundle) - - @distributed_trace - def purge_deleted_certificate(self, certificate_name: str, **kwargs: Any) -> None: - """Permanently deletes a deleted certificate. Possible only in vaults with soft-delete enabled. - - Requires certificates/purge permission. Performs an irreversible deletion of the specified certificate, without - possibility for recovery. The operation is not available if the - :py:attr:`~azure.keyvault.certificates.CertificateProperties.recovery_level` does not specify 'Purgeable'. - This method is only necessary for purging a certificate before its - :py:attr:`~azure.keyvault.certificates.DeletedCertificate.scheduled_purge_date`. - - :param str certificate_name: The name of the certificate - - :return: None - :rtype: None - - :raises ~azure.core.exceptions.HttpResponseError: - """ - self._client.purge_deleted_certificate( - certificate_name=certificate_name, **kwargs - ) - - @distributed_trace - def begin_recover_deleted_certificate(self, certificate_name: str, **kwargs: Any) -> LROPoller[KeyVaultCertificate]: - """Recover a deleted certificate to its latest version. Possible only in a vault with soft-delete enabled. - - Requires certificates/recover permission. When this method returns Key Vault has begun recovering the - certificate. Recovery may take several seconds. This method therefore returns a poller enabling you to wait for - recovery to complete. Waiting is only necessary when you want to use the recovered certificate in another - operation immediately. - - :param str certificate_name: The name of the deleted certificate to recover - - :returns: A poller for the recovery operation. The poller's `result` method returns the recovered - :class:`~azure.keyvault.certificates.KeyVaultCertificate` without waiting for recovery to complete. If you - want to use the recovered certificate immediately, call the poller's `wait` method, which blocks until the - certificate is ready to use. The `wait` method requires certificate/get permission. - :rtype: ~azure.core.polling.LROPoller[~azure.keyvault.certificates.KeyVaultCertificate] - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START recover_deleted_certificate] - :end-before: [END recover_deleted_certificate] - :language: python - :caption: Recover a deleted certificate - :dedent: 8 - """ - polling_interval = kwargs.pop("_polling_interval", None) - if polling_interval is None: - polling_interval = 2 - - pipeline_response, recovered_cert_bundle = self._client.recover_deleted_certificate( - certificate_name=certificate_name, - cls=lambda pipeline_response, deserialized, _: (pipeline_response, deserialized), - **kwargs, - ) - recovered_certificate = KeyVaultCertificate._from_certificate_bundle(recovered_cert_bundle) - command = partial(self.get_certificate, certificate_name=certificate_name, **kwargs) - polling_method = DeleteRecoverPollingMethod( - finished=False, - pipeline_response=pipeline_response, - command=command, - final_resource=recovered_certificate, - interval=polling_interval - ) - - return KeyVaultOperationPoller(polling_method) - - @distributed_trace - def import_certificate( - self, - certificate_name: str, - certificate_bytes: bytes, - *, - enabled: Optional[bool] = None, - tags: Optional[Dict[str, str]] = None, - password: Optional[str] = None, - policy: Optional[CertificatePolicy] = None, - preserve_certificate_order: Optional[bool] = None, - **kwargs: Any, - ) -> KeyVaultCertificate: - """Import a certificate created externally. Requires certificates/import permission. - - 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, and you must provide a ``policy`` with - :attr:`~azure.keyvault.certificates.CertificatePolicy.content_type` of - :attr:`~azure.keyvault.certificates.CertificateContentType.pem`. - - :param str certificate_name: The name of the certificate. - :param bytes certificate_bytes: Bytes of the certificate object to import. This certificate - needs to contain the private key. - - :keyword bool enabled: Whether the certificate is enabled for use. - :keyword tags: Application specific metadata in the form of key-value pairs. - :paramtype tags: dict[str, str] - :keyword str password: If the private key in the passed in certificate is encrypted, it - is the password used for encryption. - :keyword policy: The management policy for the certificate. Required if importing a PEM-format certificate, - with :attr:`~azure.keyvault.certificates.CertificatePolicy.content_type` set to - :attr:`~azure.keyvault.certificates.CertificateContentType.pem`. - :paramtype policy: ~azure.keyvault.certificates.CertificatePolicy - :keyword bool preserve_certificate_order: Whether to preserve the order of the certificate chain. - - :returns: The imported KeyVaultCertificate - :rtype: ~azure.keyvault.certificates.KeyVaultCertificate - - :raises ~azure.core.exceptions.HttpResponseError: - """ - - if enabled is not None: - attributes = self._models.CertificateAttributes(enabled=enabled) - else: - attributes = None - base64_encoded_certificate = base64.b64encode(certificate_bytes).decode("utf-8") - - parameters = self._models.CertificateImportParameters( - base64_encoded_certificate=base64_encoded_certificate, - password=password, - certificate_policy=policy._to_certificate_policy_bundle() if policy else None, - certificate_attributes=attributes, - tags=tags, - preserve_cert_order=preserve_certificate_order, - ) - - bundle = self._client.import_certificate( - certificate_name=certificate_name, parameters=parameters, **kwargs - ) - return KeyVaultCertificate._from_certificate_bundle(certificate_bundle=bundle) - - @distributed_trace - def get_certificate_policy(self, certificate_name: str, **kwargs: Any) -> CertificatePolicy: - """Gets the policy for a certificate. Requires certificates/get permission. - - Returns the specified certificate policy resources in the key vault. - - :param str certificate_name: The name of the certificate in a given key vault. - - :return: The certificate policy - :rtype: ~azure.keyvault.certificates.CertificatePolicy - - :raises ~azure.core.exceptions.HttpResponseError: - """ - bundle = self._client.get_certificate_policy( - certificate_name=certificate_name, **kwargs - ) - return CertificatePolicy._from_certificate_policy_bundle(certificate_policy_bundle=bundle) - - @distributed_trace - def update_certificate_policy( - self, certificate_name: str, policy: CertificatePolicy, **kwargs: Any - ) -> CertificatePolicy: - """Updates the policy for a certificate. Requires certificates/update permission. - - Set specified members in the certificate policy. Leaves others as null. - - :param str certificate_name: The name of the certificate in the given vault. - :param policy: The policy for the certificate. - :type policy: ~azure.keyvault.certificates.CertificatePolicy - - :return: The certificate policy - :rtype: ~azure.keyvault.certificates.CertificatePolicy - - :raises ~azure.core.exceptions.HttpResponseError: - """ - bundle = self._client.update_certificate_policy( - certificate_name=certificate_name, - certificate_policy=policy._to_certificate_policy_bundle(), - **kwargs - ) - return CertificatePolicy._from_certificate_policy_bundle(certificate_policy_bundle=bundle) - - @distributed_trace - def update_certificate_properties( - self, - certificate_name: str, - version: Optional[str] = None, - *, - enabled: Optional[bool] = None, - tags: Optional[Dict[str, str]] = None, - **kwargs: Any, - ) -> KeyVaultCertificate: - """Change a certificate's properties. Requires certificates/update permission. - - :param str certificate_name: The name of the certificate in the given key vault. - :param str version: The version of the certificate. - - :keyword bool enabled: Whether the certificate is enabled for use. - :keyword tags: Application specific metadata in the form of key-value pairs. - :paramtype tags: dict[str, str] - - :returns: The updated KeyVaultCertificate - :rtype: ~azure.keyvault.certificates.KeyVaultCertificate - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START update_certificate] - :end-before: [END update_certificate] - :language: python - :caption: Update a certificate's attributes - :dedent: 8 - """ - - if enabled is not None: - attributes = self._models.CertificateAttributes(enabled=enabled) - else: - attributes = None - - parameters = self._models.CertificateUpdateParameters( - certificate_attributes=attributes, tags=tags - ) - - bundle = self._client.update_certificate( - certificate_name=certificate_name, - certificate_version=version or "", - parameters=parameters, - **kwargs - ) - return KeyVaultCertificate._from_certificate_bundle(certificate_bundle=bundle) - - @distributed_trace - def backup_certificate(self, certificate_name: str, **kwargs: Any) -> bytes: - """Back up a certificate in a protected form useable only by Azure Key Vault. - - Requires certificates/backup permission. This is intended to allow copying a certificate from one vault to - another. Both vaults must be owned by the same Azure subscription. Also, backup / restore cannot be performed - across geopolitical boundaries. For example, a backup from a vault in a USA region cannot be restored to a vault - in an EU region. - - :param str certificate_name: The name of the certificate. - - :return: The backup blob containing the backed up certificate. - :rtype: bytes - - :raises ~azure.core.exceptions.ResourceNotFoundError or ~azure.core.exceptions.HttpResponseError: - the former if the certificate doesn't exist; the latter for other errors - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START backup_certificate] - :end-before: [END backup_certificate] - :language: python - :caption: Get a certificate backup - :dedent: 8 - """ - backup_result = self._client.backup_certificate( - certificate_name=certificate_name, **kwargs - ) - return backup_result.value - - @distributed_trace - def restore_certificate_backup(self, backup: bytes, **kwargs: Any) -> KeyVaultCertificate: - """Restore a certificate backup to the vault. Requires certificates/restore permission. - - This restores all versions of the certificate, with its name, attributes, and access control policies. If the - certificate's name is already in use, restoring it will fail. Also, the target vault must be owned by the same - Microsoft Azure subscription as the source vault. - - :param bytes backup: The backup blob associated with a certificate bundle. - - :return: The restored KeyVaultCertificate - :rtype: ~azure.keyvault.certificates.KeyVaultCertificate - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START restore_certificate] - :end-before: [END restore_certificate] - :language: python - :caption: Restore a certificate backup - :dedent: 8 - """ - bundle = self._client.restore_certificate( - parameters=self._models.CertificateRestoreParameters(certificate_bundle_backup=backup), - **kwargs - ) - return KeyVaultCertificate._from_certificate_bundle(certificate_bundle=bundle) - - @distributed_trace - def list_deleted_certificates( - self, *, include_pending: Optional[bool] = None, **kwargs: Any - ) -> ItemPaged[DeletedCertificate]: - """Lists the currently-recoverable deleted certificates. Possible only if vault is soft-delete enabled. - - Requires certificates/get/list permission. 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. - - :keyword bool include_pending: Specifies whether to include certificates which are not completely deleted. - Only available for API versions v7.0 and up. If not provided, Key Vault treats this as False. - :paramtype include_pending: bool or None - - :return: An iterator-like instance of DeletedCertificate - :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.certificates.DeletedCertificate] - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START list_deleted_certificates] - :end-before: [END list_deleted_certificates] - :language: python - :caption: List all the deleted certificates - :dedent: 8 - """ - max_page_size = kwargs.pop("max_page_size", None) - - if self.api_version == "2016-10-01": - if include_pending is not None: - raise NotImplementedError( - "The 'include_pending' parameter to `list_deleted_certificates` " - "is only available for API versions v7.0 and up" - ) - else: - kwargs.update({"include_pending": include_pending}) - - return self._client.get_deleted_certificates( - maxresults=max_page_size, - cls=lambda objs: [ - DeletedCertificate._from_deleted_certificate_item(deleted_certificate_item=x) for x in objs - ], - **kwargs - ) - - @distributed_trace - def list_properties_of_certificates( - self, *, include_pending: Optional[bool] = None, **kwargs: Any - ) -> ItemPaged[CertificateProperties]: - """List identifiers and properties of all certificates in the vault. - - Requires certificates/list permission. - - :keyword include_pending: Specifies whether to include certificates which are not completely provisioned. - Only available for API versions v7.0 and up. If not provided, Key Vault treats this as False. - :paramtype include_pending: bool or None - - :returns: An iterator-like instance of CertificateProperties - :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.certificates.CertificateProperties] - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START list_properties_of_certificates] - :end-before: [END list_properties_of_certificates] - :language: python - :caption: List all certificates - :dedent: 8 - """ - max_page_size = kwargs.pop("max_page_size", None) - - if self.api_version == "2016-10-01": - if include_pending is not None: - raise NotImplementedError( - "The 'include_pending' parameter to `list_properties_of_certificates` " - "is only available for API versions v7.0 and up" - ) - else: - kwargs.update({"include_pending": include_pending}) - - return self._client.get_certificates( - maxresults=max_page_size, - cls=lambda objs: [CertificateProperties._from_certificate_item(certificate_item=x) for x in objs], - **kwargs - ) - - @distributed_trace - def list_properties_of_certificate_versions( - self, certificate_name: str, **kwargs: Any - ) -> ItemPaged[CertificateProperties]: - """List the identifiers and properties of a certificate's versions. - - Requires certificates/list permission. - - :param str certificate_name: The name of the certificate. - - :returns: An iterator-like instance of CertificateProperties - :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.certificates.CertificateProperties] - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START list_properties_of_certificate_versions] - :end-before: [END list_properties_of_certificate_versions] - :language: python - :caption: List all versions of a certificate - :dedent: 8 - """ - max_page_size = kwargs.pop("max_page_size", None) - return self._client.get_certificate_versions( - certificate_name=certificate_name, - maxresults=max_page_size, - cls=lambda objs: [CertificateProperties._from_certificate_item(certificate_item=x) for x in objs], - **kwargs - ) - - @distributed_trace - def set_contacts(self, contacts: "List[CertificateContact]", **kwargs: Any) -> "List[CertificateContact]": - """Sets the certificate contacts for the key vault. Requires certificates/managecontacts permission. - - :param contacts: The contact list for the vault certificates. - :type contacts: list[~azure.keyvault.certificates.CertificateContact] - - :returns: The created list of contacts - :rtype: list[~azure.keyvault.certificates.CertificateContact] - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START set_contacts] - :end-before: [END set_contacts] - :language: python - :caption: Create contacts - :dedent: 8 - """ - new_contacts = self._client.set_certificate_contacts( - contacts=self._models.Contacts(contact_list=[c._to_certificate_contacts_item() for c in contacts]), - **kwargs - ) - return [ - CertificateContact._from_certificate_contacts_item(contact_item=item) for item in new_contacts.contact_list - ] - - @distributed_trace - def get_contacts(self, **kwargs: Any) -> "List[CertificateContact]": - """Gets the certificate contacts for the key vault. Requires the certificates/managecontacts permission. - - :return: The certificate contacts for the key vault. - :rtype: list[~azure.keyvault.certificates.CertificateContact] - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START get_contacts] - :end-before: [END get_contacts] - :language: python - :caption: Get contacts - :dedent: 8 - """ - contacts = self._client.get_certificate_contacts(**kwargs) - return [CertificateContact._from_certificate_contacts_item(contact_item=item) for item in contacts.contact_list] - - @distributed_trace - def delete_contacts(self, **kwargs: Any) -> "List[CertificateContact]": - """Deletes the certificate contacts for the key vault. Requires the certificates/managecontacts permission. - - :return: The deleted contacts for the key vault. - :rtype: list[~azure.keyvault.certificates.CertificateContact] - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START delete_contacts] - :end-before: [END delete_contacts] - :language: python - :caption: Delete contacts - :dedent: 8 - """ - contacts = self._client.delete_certificate_contacts(**kwargs) - return [CertificateContact._from_certificate_contacts_item(contact_item=item) for item in contacts.contact_list] - - @distributed_trace - def get_certificate_operation(self, certificate_name: str, **kwargs: Any) -> CertificateOperation: - """Gets the creation operation of a certificate. Requires the certificates/get permission. - - :param str certificate_name: The name of the certificate. - - :returns: The created CertificateOperation - :rtype: ~azure.keyvault.certificates.CertificateOperation - - :raises ~azure.core.exceptions.ResourceNotFoundError or ~azure.core.exceptions.HttpResponseError: - the former if the certificate doesn't exist; the latter for other errors - """ - - bundle = self._client.get_certificate_operation( - certificate_name=certificate_name, **kwargs - ) - return CertificateOperation._from_certificate_operation_bundle(certificate_operation_bundle=bundle) - - @distributed_trace - def delete_certificate_operation(self, certificate_name: str, **kwargs: Any) -> CertificateOperation: - """Deletes and stops the creation operation for a specific certificate. - - Requires the certificates/update permission. - - :param str certificate_name: The name of the certificate. - - :return: The deleted CertificateOperation - :rtype: ~azure.keyvault.certificates.CertificateOperation - - :raises ~azure.core.exceptions.HttpResponseError: - """ - bundle = self._client.delete_certificate_operation( - certificate_name=certificate_name, **kwargs - ) - return CertificateOperation._from_certificate_operation_bundle(certificate_operation_bundle=bundle) - - @distributed_trace - def cancel_certificate_operation(self, certificate_name: str, **kwargs: Any) -> CertificateOperation: - """Cancels an in-progress certificate operation. Requires the certificates/update permission. - - :param str certificate_name: The name of the certificate. - - :returns: The cancelled certificate operation - :rtype: ~azure.keyvault.certificates.CertificateOperation - - :raises ~azure.core.exceptions.HttpResponseError: - """ - bundle = self._client.update_certificate_operation( - certificate_name=certificate_name, - certificate_operation=self._models.CertificateOperationUpdateParameter(cancellation_requested=True), - **kwargs - ) - return CertificateOperation._from_certificate_operation_bundle(certificate_operation_bundle=bundle) - - @distributed_trace - def merge_certificate( - self, - certificate_name: str, - x509_certificates: List[bytes], - *, - enabled: Optional[bool] = None, - tags: Optional[Dict[str, str]] = None, - **kwargs: Any, - ) -> KeyVaultCertificate: - """Merges a certificate or a certificate chain with a key pair existing on the server. - - Requires the certificates/create permission. Performs the merging of a certificate or certificate chain with a - key pair currently available in the service. Make sure when creating the certificate to merge using - :func:`begin_create_certificate` that you set its issuer to 'Unknown'. This way Key Vault knows that the - certificate will not be signed by an issuer known to it. - - :param str certificate_name: The name of the certificate - :param x509_certificates: The certificate or the certificate chain to merge. - :type x509_certificates: list[bytes] - - :keyword enabled: Whether the certificate is enabled for use. - :paramtype enabled: bool or None - :keyword tags: Application specific metadata in the form of key-value pairs. - :paramtype tags: dict[str, str] or None - - :return: The merged certificate - :rtype: ~azure.keyvault.certificates.KeyVaultCertificate - - :raises ~azure.core.exceptions.HttpResponseError: - """ - - if enabled is not None: - attributes = self._models.CertificateAttributes(enabled=enabled) - else: - attributes = None - - parameters = self._models.CertificateMergeParameters( - x509_certificates=x509_certificates, certificate_attributes=attributes, tags=tags - ) - - bundle = self._client.merge_certificate( - certificate_name=certificate_name, parameters=parameters, **kwargs - ) - return KeyVaultCertificate._from_certificate_bundle(certificate_bundle=bundle) - - @distributed_trace - def get_issuer(self, issuer_name: str, **kwargs: Any) -> CertificateIssuer: - """Gets the specified certificate issuer. Requires certificates/manageissuers/getissuers permission. - - :param str issuer_name: The name of the issuer. - - :return: The specified certificate issuer. - :rtype: ~azure.keyvault.certificates.CertificateIssuer - - :raises ~azure.core.exceptions.ResourceNotFoundError or ~azure.core.exceptions.HttpResponseError: - the former if the issuer doesn't exist; the latter for other errors - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START get_issuer] - :end-before: [END get_issuer] - :language: python - :caption: Get an issuer - :dedent: 8 - """ - issuer_bundle = self._client.get_certificate_issuer( - issuer_name=issuer_name, **kwargs - ) - return CertificateIssuer._from_issuer_bundle(issuer_bundle=issuer_bundle) - - @distributed_trace - def create_issuer( - self, - issuer_name: str, - provider: str, - *, - enabled: Optional[bool] = None, - account_id: Optional[str] = None, - password: Optional[str] = None, - organization_id: Optional[str] = None, - admin_contacts: Optional[List[AdministratorContact]] = None, - **kwargs: Any, - ) -> CertificateIssuer: - """Sets the specified certificate issuer. Requires certificates/setissuers permission. - - :param str issuer_name: The name of the issuer. - :param str provider: The issuer provider. - - :keyword bool enabled: Whether the issuer is enabled for use. - :keyword str account_id: The user name/account name/account id. - :keyword str password: The password/secret/account key. - :keyword str organization_id: Id of the organization - :keyword admin_contacts: Contact details of the organization administrators of the - certificate issuer. - :paramtype admin_contacts: list[~azure.keyvault.certificates.AdministratorContact] - - :returns: The created CertificateIssuer - :rtype: ~azure.keyvault.certificates.CertificateIssuer - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START create_issuer] - :end-before: [END create_issuer] - :language: python - :caption: Create an issuer - :dedent: 8 - """ - - if account_id or password: - issuer_credentials = self._models.IssuerCredentials(account_id=account_id, password=password) - else: - issuer_credentials = None - if admin_contacts: - admin_details: Optional[List[Any]] = [ - self._models.AdministratorDetails( - first_name=contact.first_name, - last_name=contact.last_name, - email_address=contact.email, - phone=contact.phone, - ) - for contact in admin_contacts - ] - else: - admin_details = None - if organization_id or admin_details: - organization_details = self._models.OrganizationDetails(id=organization_id, admin_details=admin_details) - else: - organization_details = None - if enabled is not None: - issuer_attributes = self._models.IssuerAttributes(enabled=enabled) - else: - issuer_attributes = None - - parameters = self._models.CertificateIssuerSetParameters( - provider=provider, - credentials=issuer_credentials, - organization_details=organization_details, - attributes=issuer_attributes, - ) - - issuer_bundle = self._client.set_certificate_issuer( - issuer_name=issuer_name, parameter=parameters, **kwargs - ) - return CertificateIssuer._from_issuer_bundle(issuer_bundle=issuer_bundle) - - @distributed_trace - def update_issuer( - self, - issuer_name: str, - *, - enabled: Optional[bool] = None, - provider: Optional[str] = None, - account_id: Optional[str] = None, - password: Optional[str] = None, - organization_id: Optional[str] = None, - admin_contacts: Optional[List[AdministratorContact]] = None, - **kwargs: Any, - ) -> CertificateIssuer: - """Updates the specified certificate issuer. Requires certificates/setissuers permission. - - :param str issuer_name: The name of the issuer. - - :keyword bool enabled: Whether the issuer is enabled for use. - :keyword str provider: The issuer provider - :keyword str account_id: The user name/account name/account id. - :keyword str password: The password/secret/account key. - :keyword str organization_id: Id of the organization - :keyword admin_contacts: Contact details of the organization administrators of the certificate issuer - :paramtype admin_contacts: list[~azure.keyvault.certificates.AdministratorContact] - - :return: The updated issuer - :rtype: ~azure.keyvault.certificates.CertificateIssuer - - :raises ~azure.core.exceptions.HttpResponseError: - """ - - if account_id or password: - issuer_credentials = self._models.IssuerCredentials(account_id=account_id, password=password) - else: - issuer_credentials = None - if admin_contacts: - admin_details: Optional[List[Any]] = [ - self._models.AdministratorDetails( - first_name=contact.first_name, - last_name=contact.last_name, - email_address=contact.email, - phone=contact.phone, - ) - for contact in admin_contacts + def __init__(self, vault_base_url: str, credential: "TokenCredential", **kwargs: Any) -> None: + _endpoint = "{vaultBaseUrl}" + self._config = KeyVaultClientConfiguration(vault_base_url=vault_base_url, credential=credential, **kwargs) + + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, ] - else: - admin_details = None - if organization_id or admin_details: - organization_details = self._models.OrganizationDetails(id=organization_id, admin_details=admin_details) - else: - organization_details = None - if enabled is not None: - issuer_attributes = self._models.IssuerAttributes(enabled=enabled) - else: - issuer_attributes = None - - parameters = self._models.CertificateIssuerUpdateParameters( - provider=provider, - credentials=issuer_credentials, - organization_details=organization_details, - attributes=issuer_attributes, - ) + self._client: PipelineClient = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs) - issuer_bundle = self._client.update_certificate_issuer( - issuer_name=issuer_name, parameter=parameters, **kwargs - ) - return CertificateIssuer._from_issuer_bundle(issuer_bundle=issuer_bundle) + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False - @distributed_trace - def delete_issuer(self, issuer_name: str, **kwargs: Any) -> CertificateIssuer: - """Deletes the specified certificate issuer. + def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: + """Runs the network request through the client's chained policies. - Requires certificates/manageissuers/deleteissuers permission. + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = client.send_request(request) + - :param str issuer_name: The name of the issuer. + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request - :return: CertificateIssuer - :rtype: ~azure.keyvault.certificates.CertificateIssuer - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START delete_issuer] - :end-before: [END delete_issuer] - :language: python - :caption: Delete an issuer - :dedent: 8 + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.HttpResponse """ - issuer_bundle = self._client.delete_certificate_issuer( - issuer_name=issuer_name, **kwargs - ) - return CertificateIssuer._from_issuer_bundle(issuer_bundle=issuer_bundle) - - @distributed_trace - def list_properties_of_issuers(self, **kwargs: Any) -> ItemPaged[IssuerProperties]: - """Lists properties of the certificate issuers for the key vault. - Requires the certificates/manageissuers/getissuers permission. + request_copy = deepcopy(request) + path_format_arguments = { + "vaultBaseUrl": self._serialize.url( + "self._config.vault_base_url", self._config.vault_base_url, "str", skip_quote=True + ), + } - :return: An iterator-like instance of Issuers - :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.certificates.CertificateIssuer] + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore - :raises ~azure.core.exceptions.HttpResponseError: + def close(self) -> None: + self._client.close() - Example: - .. literalinclude:: ../tests/test_examples_certificates.py - :start-after: [START list_properties_of_issuers] - :end-before: [END list_properties_of_issuers] - :language: python - :caption: List issuers of a vault - :dedent: 8 - """ - max_page_size = kwargs.pop("max_page_size", None) - return self._client.get_certificate_issuers( - maxresults=max_page_size, - cls=lambda objs: [IssuerProperties._from_issuer_item(issuer_item=x) for x in objs], - **kwargs - ) - - def __enter__(self) -> "CertificateClient": + def __enter__(self) -> Self: self._client.__enter__() return self + + def __exit__(self, *exc_details: Any) -> None: + self._client.__exit__(*exc_details) diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_configuration.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_configuration.py similarity index 100% rename from sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_configuration.py rename to sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_configuration.py diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_enums.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_enums.py deleted file mode 100644 index 6913db4755d7..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_enums.py +++ /dev/null @@ -1,77 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ - -# pylint: disable=enum-must-be-uppercase - -from enum import Enum - -from azure.core import CaseInsensitiveEnumMeta - - -class CertificatePolicyAction(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """The supported action types for the lifetime of a certificate""" - - email_contacts = "EmailContacts" - auto_renew = "AutoRenew" - - -class CertificateContentType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """Content type of the secrets as specified in Certificate Policy""" - - pkcs12 = "application/x-pkcs12" - pem = "application/x-pem-file" - - -class KeyUsageType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """The supported types of key usages""" - - digital_signature = "digitalSignature" - non_repudiation = "nonRepudiation" - key_encipherment = "keyEncipherment" - data_encipherment = "dataEncipherment" - key_agreement = "keyAgreement" - key_cert_sign = "keyCertSign" - crl_sign = "cRLSign" - encipher_only = "encipherOnly" - decipher_only = "decipherOnly" - - -class KeyType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """Supported key types""" - - ec = "EC" #: Elliptic Curve - ec_hsm = "EC-HSM" #: Elliptic Curve with a private key which is not exportable from the HSM - rsa = "RSA" #: RSA (https://tools.ietf.org/html/rfc3447) - rsa_hsm = "RSA-HSM" #: RSA with a private key which is not exportable from the HSM - oct = "oct" #: Octet sequence (used to represent symmetric keys) - oct_hsm = "oct-HSM" #: Octet sequence with a private key which is not exportable from the HSM - - @classmethod - def _missing_(cls, value): - for member in cls: - if member.value.lower() == value.lower(): - return member - raise ValueError(f"{value} is not a valid KeyType") - - -class KeyCurveName(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """Supported elliptic curves""" - - p_256 = "P-256" #: The NIST P-256 elliptic curve, AKA SECG curve SECP256R1. - p_384 = "P-384" #: The NIST P-384 elliptic curve, AKA SECG curve SECP384R1. - p_521 = "P-521" #: The NIST P-521 elliptic curve, AKA SECG curve SECP521R1. - p_256_k = "P-256K" #: The SECG SECP256K1 elliptic curve. - - -class WellKnownIssuerNames(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """Collection of well-known issuer names""" - - self = "Self" #: Use this issuer for a self-signed certificate - unknown = "Unknown" - """ - If you use this issuer, you must manually get an x509 certificate from the issuer of your choice. - You must then call :func:`~azure.keyvault.certificates.CertificateClient.merge_certificate` to - merge the public x509 certificate with your key vault certificate pending object to complete creation. - """ diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/__init__.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/__init__.py deleted file mode 100644 index 4f7962408227..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/__init__.py +++ /dev/null @@ -1,32 +0,0 @@ -# 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) Python Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- -# pylint: disable=wrong-import-position - -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from ._patch import * # pylint: disable=unused-wildcard-import - -from ._client import KeyVaultClient # type: ignore -from ._version import VERSION - -__version__ = VERSION - -try: - from ._patch import __all__ as _patch_all - from ._patch import * -except ImportError: - _patch_all = [] -from ._patch import patch_sdk as _patch_sdk - -__all__ = [ - "KeyVaultClient", -] -__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore - -_patch_sdk() diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_client.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_client.py deleted file mode 100644 index a4f2ae420fbe..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_client.py +++ /dev/null @@ -1,100 +0,0 @@ -# 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) Python Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -from copy import deepcopy -from typing import Any, TYPE_CHECKING -from typing_extensions import Self - -from azure.core import PipelineClient -from azure.core.pipeline import policies -from azure.core.rest import HttpRequest, HttpResponse - -from ._configuration import KeyVaultClientConfiguration -from ._operations import KeyVaultClientOperationsMixin -from ._serialization import Deserializer, Serializer - -if TYPE_CHECKING: - from azure.core.credentials import TokenCredential - - -class KeyVaultClient(KeyVaultClientOperationsMixin): - """The key vault client performs cryptographic key operations and vault operations against the Key - Vault service. - - :param vault_base_url: Required. - :type vault_base_url: str - :param credential: Credential used to authenticate requests to the service. Required. - :type credential: ~azure.core.credentials.TokenCredential - :keyword api_version: The API version to use for this operation. Default value is - "7.6-preview.2". Note that overriding this default value may result in unsupported behavior. - :paramtype api_version: str - """ - - def __init__(self, vault_base_url: str, credential: "TokenCredential", **kwargs: Any) -> None: - _endpoint = "{vaultBaseUrl}" - self._config = KeyVaultClientConfiguration(vault_base_url=vault_base_url, credential=credential, **kwargs) - _policies = kwargs.pop("policies", None) - if _policies is None: - _policies = [ - policies.RequestIdPolicy(**kwargs), - self._config.headers_policy, - self._config.user_agent_policy, - self._config.proxy_policy, - policies.ContentDecodePolicy(**kwargs), - self._config.redirect_policy, - self._config.retry_policy, - self._config.authentication_policy, - self._config.custom_hook_policy, - self._config.logging_policy, - policies.DistributedTracingPolicy(**kwargs), - policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, - self._config.http_logging_policy, - ] - self._client: PipelineClient = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs) - - self._serialize = Serializer() - self._deserialize = Deserializer() - self._serialize.client_side_validation = False - - def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: - """Runs the network request through the client's chained policies. - - >>> from azure.core.rest import HttpRequest - >>> request = HttpRequest("GET", "https://www.example.org/") - - >>> response = client.send_request(request) - - - For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request - - :param request: The network request you want to make. Required. - :type request: ~azure.core.rest.HttpRequest - :keyword bool stream: Whether the response payload will be streamed. Defaults to False. - :return: The response of your network call. Does not do error handling on your response. - :rtype: ~azure.core.rest.HttpResponse - """ - - request_copy = deepcopy(request) - path_format_arguments = { - "vaultBaseUrl": self._serialize.url( - "self._config.vault_base_url", self._config.vault_base_url, "str", skip_quote=True - ), - } - - request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) - return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore - - def close(self) -> None: - self._client.close() - - def __enter__(self) -> Self: - self._client.__enter__() - return self - - def __exit__(self, *exc_details: Any) -> None: - self._client.__exit__(*exc_details) diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_version.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_version.py deleted file mode 100644 index 0d777283b3a2..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_version.py +++ /dev/null @@ -1,9 +0,0 @@ -# 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) Python Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -VERSION = "4.9.0b1" diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/__init__.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/__init__.py deleted file mode 100644 index 8c996b993b8a..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/__init__.py +++ /dev/null @@ -1,29 +0,0 @@ -# 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) Python Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- -# pylint: disable=wrong-import-position - -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from ._patch import * # pylint: disable=unused-wildcard-import - -from ._client import KeyVaultClient # type: ignore - -try: - from ._patch import __all__ as _patch_all - from ._patch import * -except ImportError: - _patch_all = [] -from ._patch import patch_sdk as _patch_sdk - -__all__ = [ - "KeyVaultClient", -] -__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore - -_patch_sdk() diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_client.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_client.py deleted file mode 100644 index 2d775e8b1ece..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_client.py +++ /dev/null @@ -1,102 +0,0 @@ -# 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) Python Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -from copy import deepcopy -from typing import Any, Awaitable, TYPE_CHECKING -from typing_extensions import Self - -from azure.core import AsyncPipelineClient -from azure.core.pipeline import policies -from azure.core.rest import AsyncHttpResponse, HttpRequest - -from .._serialization import Deserializer, Serializer -from ._configuration import KeyVaultClientConfiguration -from ._operations import KeyVaultClientOperationsMixin - -if TYPE_CHECKING: - from azure.core.credentials_async import AsyncTokenCredential - - -class KeyVaultClient(KeyVaultClientOperationsMixin): - """The key vault client performs cryptographic key operations and vault operations against the Key - Vault service. - - :param vault_base_url: Required. - :type vault_base_url: str - :param credential: Credential used to authenticate requests to the service. Required. - :type credential: ~azure.core.credentials_async.AsyncTokenCredential - :keyword api_version: The API version to use for this operation. Default value is - "7.6-preview.2". Note that overriding this default value may result in unsupported behavior. - :paramtype api_version: str - """ - - def __init__(self, vault_base_url: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: - _endpoint = "{vaultBaseUrl}" - self._config = KeyVaultClientConfiguration(vault_base_url=vault_base_url, credential=credential, **kwargs) - _policies = kwargs.pop("policies", None) - if _policies is None: - _policies = [ - policies.RequestIdPolicy(**kwargs), - self._config.headers_policy, - self._config.user_agent_policy, - self._config.proxy_policy, - policies.ContentDecodePolicy(**kwargs), - self._config.redirect_policy, - self._config.retry_policy, - self._config.authentication_policy, - self._config.custom_hook_policy, - self._config.logging_policy, - policies.DistributedTracingPolicy(**kwargs), - policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, - self._config.http_logging_policy, - ] - self._client: AsyncPipelineClient = AsyncPipelineClient(base_url=_endpoint, policies=_policies, **kwargs) - - self._serialize = Serializer() - self._deserialize = Deserializer() - self._serialize.client_side_validation = False - - def send_request( - self, request: HttpRequest, *, stream: bool = False, **kwargs: Any - ) -> Awaitable[AsyncHttpResponse]: - """Runs the network request through the client's chained policies. - - >>> from azure.core.rest import HttpRequest - >>> request = HttpRequest("GET", "https://www.example.org/") - - >>> response = await client.send_request(request) - - - For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request - - :param request: The network request you want to make. Required. - :type request: ~azure.core.rest.HttpRequest - :keyword bool stream: Whether the response payload will be streamed. Defaults to False. - :return: The response of your network call. Does not do error handling on your response. - :rtype: ~azure.core.rest.AsyncHttpResponse - """ - - request_copy = deepcopy(request) - path_format_arguments = { - "vaultBaseUrl": self._serialize.url( - "self._config.vault_base_url", self._config.vault_base_url, "str", skip_quote=True - ), - } - - request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) - return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore - - async def close(self) -> None: - await self._client.close() - - async def __aenter__(self) -> Self: - await self._client.__aenter__() - return self - - async def __aexit__(self, *exc_details: Any) -> None: - await self._client.__aexit__(*exc_details) diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/models/_patch.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/models/_patch.py deleted file mode 100644 index f7dd32510333..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/models/_patch.py +++ /dev/null @@ -1,20 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -"""Customize generated code here. - -Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize -""" -from typing import List - -__all__: List[str] = [] # Add all objects you want publicly available to users at this package level - - -def patch_sdk(): - """Do not remove from this file. - - `patch_sdk` is a last resort escape hatch that allows you to do customizations - you can't accomplish using the techniques described in - https://aka.ms/azsdk/python/dpcodegen/python/customize - """ diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/py.typed b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/py.typed deleted file mode 100644 index e5aff4f83af8..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/py.typed +++ /dev/null @@ -1 +0,0 @@ -# Marker file for PEP 561. \ No newline at end of file diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/tsp-location.yaml b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/tsp-location.yaml deleted file mode 100644 index 54685192d66b..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/tsp-location.yaml +++ /dev/null @@ -1,5 +0,0 @@ -directory: specification/keyvault/Security.KeyVault.Certificates -commit: b8d26b0e4c1886458fa56c22aac09c3e3e9a5c9e -repo: Azure/azure-rest-api-specs -additionalDirectories: -- specification/keyvault/Security.KeyVault.Common/ diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_model_base.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_model_base.py similarity index 98% rename from sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_model_base.py rename to sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_model_base.py index 3072ee252ed9..49d5c7259389 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_model_base.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_model_base.py @@ -2,8 +2,9 @@ # 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. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- # pylint: disable=protected-access, broad-except @@ -21,6 +22,7 @@ from datetime import datetime, date, time, timedelta, timezone from json import JSONEncoder import xml.etree.ElementTree as ET +from collections.abc import MutableMapping from typing_extensions import Self import isodate from azure.core.exceptions import DeserializationError @@ -28,11 +30,6 @@ from azure.core.pipeline import PipelineResponse from azure.core.serialization import _Null -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping - _LOGGER = logging.getLogger(__name__) __all__ = ["SdkJSONEncoder", "Model", "rest_field", "rest_discriminator"] @@ -347,7 +344,7 @@ def _get_model(module_name: str, model_name: str): _UNSET = object() -class _MyMutableMapping(MutableMapping[str, typing.Any]): # pylint: disable=unsubscriptable-object +class _MyMutableMapping(MutableMapping[str, typing.Any]): def __init__(self, data: typing.Dict[str, typing.Any]) -> None: self._data = data @@ -407,13 +404,13 @@ def get(self, key: str, default: typing.Any = None) -> typing.Any: return default @typing.overload - def pop(self, key: str) -> typing.Any: ... + def pop(self, key: str) -> typing.Any: ... # pylint: disable=arguments-differ @typing.overload - def pop(self, key: str, default: _T) -> _T: ... + def pop(self, key: str, default: _T) -> _T: ... # pylint: disable=signature-differs @typing.overload - def pop(self, key: str, default: typing.Any) -> typing.Any: ... + def pop(self, key: str, default: typing.Any) -> typing.Any: ... # pylint: disable=signature-differs def pop(self, key: str, default: typing.Any = _UNSET) -> typing.Any: """ @@ -443,7 +440,7 @@ def clear(self) -> None: """ self._data.clear() - def update(self, *args: typing.Any, **kwargs: typing.Any) -> None: + def update(self, *args: typing.Any, **kwargs: typing.Any) -> None: # pylint: disable=arguments-differ """ Updates D from mapping/iterable E and F. :param any args: Either a mapping object or an iterable of key-value pairs. @@ -454,7 +451,7 @@ def update(self, *args: typing.Any, **kwargs: typing.Any) -> None: def setdefault(self, key: str, default: None = None) -> None: ... @typing.overload - def setdefault(self, key: str, default: typing.Any) -> typing.Any: ... + def setdefault(self, key: str, default: typing.Any) -> typing.Any: ... # pylint: disable=signature-differs def setdefault(self, key: str, default: typing.Any = _UNSET) -> typing.Any: """ @@ -644,7 +641,7 @@ def __new__(cls, *args: typing.Any, **kwargs: typing.Any) -> Self: cls._attr_to_rest_field: typing.Dict[str, _RestField] = dict(attr_to_rest_field.items()) cls._calculated.add(f"{cls.__module__}.{cls.__qualname__}") - return super().__new__(cls) # pylint: disable=no-value-for-parameter + return super().__new__(cls) def __init_subclass__(cls, discriminator: typing.Optional[str] = None) -> None: for base in cls.__bases__: @@ -680,7 +677,7 @@ def _deserialize(cls, data, exist_discriminators): discriminator_value = data.find(xml_name).text # pyright: ignore else: discriminator_value = data.get(discriminator._rest_name) - mapped_cls = cls.__mapping__.get(discriminator_value, cls) # pyright: ignore + mapped_cls = cls.__mapping__.get(discriminator_value, cls) # pyright: ignore # pylint: disable=no-member return mapped_cls._deserialize(data, exist_discriminators) def as_dict(self, *, exclude_readonly: bool = False) -> typing.Dict[str, typing.Any]: diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_models.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_models.py deleted file mode 100644 index 3fb8fe955374..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_models.py +++ /dev/null @@ -1,1504 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -# pylint: disable=too-many-lines,too-many-public-methods -from datetime import datetime -from typing import Any, Dict, Optional, Union, List - -from ._generated import models -from ._shared import parse_key_vault_id -from ._enums import ( - CertificatePolicyAction, - KeyUsageType, - KeyCurveName, - KeyType, - CertificateContentType, - WellKnownIssuerNames, -) - - -class AdministratorContact(object): - """Details of the organization administrator of the certificate issuer. - - :param first_name: First name of the issuer. - :type first_name: str or None - :param last_name: Last name of the issuer. - :type last_name: str or None - :param email: email of the issuer. - :type email: str or None - :param phone: phone number of the issuer. - :type phone: str or None - """ - - def __init__( - self, - first_name: Optional[str] = None, - last_name: Optional[str] = None, - email: Optional[str] = None, - phone: Optional[str] = None, - ) -> None: - self._first_name = first_name - self._last_name = last_name - self._phone = phone - self._email = email - - def __repr__(self) -> str: - result = ( - f"AdministratorContact(first_name={self.first_name}, last_name={self.last_name}, " - + f"email={self.email}, phone={self.phone})" - ) - return result[:1024] - - @classmethod - def _from_admin_detail(cls, admin_detail: models.AdministratorDetails) -> "AdministratorContact": - return cls( - email=admin_detail.email_address, - first_name=admin_detail.first_name, - last_name=admin_detail.last_name, - phone=admin_detail.phone, - ) - - @property - def email(self) -> Optional[str]: - """:rtype: str or None""" - return self._email - - @property - def first_name(self) -> Optional[str]: - """:rtype: str or None""" - return self._first_name - - @property - def last_name(self) -> Optional[str]: - """:rtype: str or None""" - return self._last_name - - @property - def phone(self) -> Optional[str]: - """:rtype: str or None""" - return self._phone - - -class CertificateOperationError(object): - """The key vault server error. - - :param str code: The error code. - :param str message: The error message. - :param inner_error: The error object itself - :type inner_error: ~azure.keyvault.certificates.CertificateOperationError - """ - - def __init__(self, code: str, message: str, inner_error: "CertificateOperationError") -> None: - self._code = code - self._message = message - self._inner_error = inner_error - - def __repr__(self) -> str: - return f"CertificateOperationError({self.code}, {self.message}, {self.inner_error})"[:1024] - - @classmethod - def _from_error_bundle(cls, error_bundle: models.KeyVaultErrorError) -> "CertificateOperationError": - return cls( - code=error_bundle.code, # type: ignore - message=error_bundle.message, # type: ignore - inner_error=cls._from_error_bundle(error_bundle.inner_error), # type: ignore - ) - - @property - def code(self) -> str: - """The error code. - - :returns: The error code. - :rtype: str - """ - return self._code - - @property - def message(self) -> str: - """The error message. - - :returns: The error message. - :rtype: str - """ - return self._message - - @property - def inner_error(self) -> "CertificateOperationError": - """The error itself. - - :returns: The error itself. - :rtype: ~azure.keyvault.certificates.CertificateOperationError - """ - return self._inner_error - - -class CertificateProperties(object): - """Certificate properties consists of a certificates metadata.""" - - def __init__(self, **kwargs: Any) -> None: - self._attributes = kwargs.pop("attributes", None) - self._id = kwargs.pop("cert_id", None) - self._vault_id = KeyVaultCertificateIdentifier(self._id) - self._x509_thumbprint = kwargs.pop("x509_thumbprint", None) - self._tags = kwargs.pop("tags", None) - self._preserve_cert_order = kwargs.pop("preserve_cert_order", False) - - def __repr__(self) -> str: - return f""[:1024] - - @classmethod - def _from_certificate_bundle( - cls, - certificate_bundle: Union[ - models.CertificateBundle, - models.DeletedCertificateBundle, - ], - ) -> "CertificateProperties": - return cls( - attributes=certificate_bundle.attributes, - cert_id=certificate_bundle.id, - x509_thumbprint=certificate_bundle.x509_thumbprint, - tags=certificate_bundle.tags, - preserve_cert_order=certificate_bundle.preserve_cert_order, - ) - - @classmethod - def _from_certificate_item( - cls, - certificate_item: Union[ - models.CertificateItem, - models.DeletedCertificateItem, - ], - ) -> "CertificateProperties": - return cls( - attributes=certificate_item.attributes, - cert_id=certificate_item.id, - x509_thumbprint=certificate_item.x509_thumbprint, - tags=certificate_item.tags, - ) - - @property - def id(self) -> str: - """The certificate identifier. - - :returns: The certificate identifier. - :rtype: str - """ - return self._id - - @property - def name(self) -> str: - """The name of the certificate. - - :returns: The name of the certificate. - :rtype: str - """ - return self._vault_id.name - - @property - def enabled(self) -> Optional[bool]: - """Whether the certificate is enabled or not. - - :returns: True if the certificate is enabled; False otherwise. - :rtype: bool or None - """ - return self._attributes.enabled if self._attributes else None - - @property - def not_before(self) -> Optional[datetime]: - """The datetime before which the certificate is not valid. - - :returns: A datetime representing the point in time when the certificate becomes valid. - :rtype: ~datetime.datetime or None - """ - return self._attributes.not_before if self._attributes else None - - @property - def expires_on(self) -> Optional[datetime]: - """The datetime when the certificate expires. - - :returns: A datetime representing the point in time when the certificate expires. - :rtype: ~datetime.datetime or None - """ - return self._attributes.expires if self._attributes else None - - @property - def created_on(self) -> Optional[datetime]: - """The datetime when the certificate is created. - - :returns: A datetime representing the certificate's creation time. - :rtype: ~datetime.datetime or None - """ - return self._attributes.created if self._attributes else None - - @property - def updated_on(self) -> Optional[datetime]: - """The datetime when the certificate was last updated. - - :returns: A datetime representing the time of the certificate's most recent update. - :rtype: ~datetime.datetime or None - """ - return self._attributes.updated if self._attributes else None - - @property - def recoverable_days(self) -> Optional[int]: - """The number of days the certificate is retained before being deleted from a soft-delete enabled Key Vault. - - :returns: The number of days remaining where the certificate can be restored. - :rtype: int or None - """ - # recoverable_days was added in 7.1-preview - if self._attributes and hasattr(self._attributes, "recoverable_days"): - return self._attributes.recoverable_days - return None - - @property - def recovery_level(self) -> Optional[models.DeletionRecoveryLevel]: - """The deletion recovery level currently in effect for the certificate. - - :returns: The deletion recovery level currently in effect for the certificate. - :rtype: models.DeletionRecoveryLevel or None - """ - return self._attributes.recovery_level if self._attributes else None - - @property - def vault_url(self) -> str: - """The URL of the vault containing the certificate. - - :returns: The URL of the vault containing the certificate. - :rtype: str - """ - return self._vault_id.vault_url - - @property - def x509_thumbprint(self) -> bytes: - """The certificate's thumbprint, in bytes. - - To get the thumbprint as a hexadecimal string, call ``.hex()`` on this property. - - :return: The certificate's thumbprint, in bytes. - :rtype: bytes - """ - return self._x509_thumbprint - - @property - def tags(self) -> Optional[Dict[str, str]]: - """Application specific metadata in the form of key-value pairs. - - :returns: A dictionary of tags attached to the certificate. - :rtype: dict[str, str] or None - """ - return self._tags - - @property - def version(self) -> Optional[str]: - """The version of the certificate. - - :returns: The version of the certificate. - :rtype: str or None - """ - return self._vault_id.version - - @property - def preserve_certificate_order(self) -> Optional[bool]: - """Whether the certificate order should be preserved. - - :returns: Specifies whether the certificate chain preserves its original order. The default value is False, - which sets the leaf certificate at index 0. - :rtype: bool or None - """ - return self._preserve_cert_order - - -class KeyVaultCertificate(object): - """Consists of a certificate and its attributes - - :param policy: The management policy for the certificate. - :type policy: ~azure.keyvault.certificates.CertificatePolicy or None - :param properties: The certificate's properties. - :type properties: ~azure.keyvault.certificates.CertificateProperties or None - :param cer: CER contents of the X509 certificate. - :type cer: bytearray or None - """ - - def __init__( - self, - policy: "Optional[CertificatePolicy]" = None, - properties: Optional[CertificateProperties] = None, - cer: Optional[bytearray] = None, - **kwargs: Any, - ) -> None: - self._properties = properties - self._key_id = kwargs.get("key_id", None) - self._secret_id = kwargs.get("secret_id", None) - self._policy = policy - self._cer = cer - - def __repr__(self) -> str: - return f""[:1024] - - @classmethod - def _from_certificate_bundle(cls, certificate_bundle: models.CertificateBundle) -> "KeyVaultCertificate": - # pylint:disable=protected-access - - if certificate_bundle.policy: - policy: Optional[CertificatePolicy] = CertificatePolicy._from_certificate_policy_bundle( - certificate_bundle.policy - ) - else: - policy = None - - return cls( - properties=CertificateProperties._from_certificate_bundle(certificate_bundle), - key_id=certificate_bundle.kid, - secret_id=certificate_bundle.sid, - policy=policy, - cer=certificate_bundle.cer, # type: ignore - ) - - @property - def id(self) -> Optional[str]: - """The certificate identifier. - - :returns: The certificate identifier. - :rtype: str or None - """ - return self._properties.id if self._properties else None - - @property - def name(self) -> Optional[str]: - """The name of the certificate. - - :returns: The name of the certificate. - :rtype: str or None - """ - return self._properties.name if self._properties else None - - @property - def properties(self) -> Optional[CertificateProperties]: - """The certificate's properties. - - :returns: The certificate's properties. - :rtype: ~azure.keyvault.certificates.CertificateProperties or None - """ - return self._properties - - @property - def key_id(self) -> Optional[str]: - """The ID of the key associated with the certificate. - - :returns: The ID of the key associated with the certificate. - :rtype: str or None - """ - return self._key_id - - @property - def secret_id(self) -> Optional[str]: - """The ID of the secret associated with the certificate. - - :returns: The ID of the secret associated with the certificate. - :rtype: str or None - """ - return self._secret_id - - @property - def policy(self) -> "Optional[CertificatePolicy]": - """The management policy of the certificate. - - :returns: The management policy of the certificate. - :rtype: ~azure.keyvault.certificates.CertificatePolicy or None - """ - return self._policy - - @property - def cer(self) -> Optional[bytearray]: - """The CER contents of the certificate. - - :returns: The CER contents of the certificate. - :rtype: bytearray or None - """ - return self._cer - - -class KeyVaultCertificateIdentifier(object): - """Information about a KeyVaultCertificate parsed from a certificate ID. - - :param str source_id: the full original identifier of a certificate - - :raises ValueError: if the certificate ID is improperly formatted - - Example: - .. literalinclude:: ../tests/test_parse_id.py - :start-after: [START parse_key_vault_certificate_id] - :end-before: [END parse_key_vault_certificate_id] - :language: python - :caption: Parse a certificate's ID - :dedent: 8 - """ - - def __init__(self, source_id: str) -> None: - self._resource_id = parse_key_vault_id(source_id) - - @property - def source_id(self) -> str: - return self._resource_id.source_id - - @property - def vault_url(self) -> str: - return self._resource_id.vault_url - - @property - def name(self) -> str: - return self._resource_id.name - - @property - def version(self) -> Optional[str]: - return self._resource_id.version - - -class CertificateOperation(object): - # pylint:disable=too-many-instance-attributes - """A certificate operation is returned in case of long running requests. - - :param cert_operation_id: The certificate id. - :type cert_operation_id: str or None - :param issuer_name: Name of the operation's issuer object or reserved names. - :type issuer_name: str or ~azure.keyvault.certificates.WellKnownIssuerNames or None - :param certificate_type: Type of certificate requested from the issuer provider. - :type certificate_type: str or None - :param certificate_transparency: Indicates if the certificate this operation is running for is published to - certificate transparency logs. Defaults to False. - :type certificate_transparency: bool or None - :param csr: The certificate signing request (CSR) that is being used in the certificate operation. - :type csr: bytes or None - :param cancellation_requested: Indicates if cancellation was requested on the certificate operation. Defaults - to False. - :type cancellation_requested: bool or None - :param status: Status of the certificate operation. - :type status: str or None - :param status_details: The status details of the certificate operation - :type status_details: str or None - :param error: Error encountered, if any, during the certificate operation. - :type error: ~azure.keyvault.certificates.CertificateOperationError or None - :param target: Location which contains the result of the certificate operation. - :type target: str or None - :param request_id: Identifier for the certificate operation. - :type request_id: str or None - :param bool preserve_cert_order: Specifies whether the certificate chain preserves its original order. The default - value is False, which sets the leaf certificate at index 0. - """ - - def __init__( - self, - cert_operation_id: Optional[str] = None, - issuer_name: Optional[Union[str, WellKnownIssuerNames]] = None, - certificate_type: Optional[str] = None, - certificate_transparency: Optional[bool] = False, - csr: Optional[bytes] = None, - cancellation_requested: Optional[bool] = False, - status: Optional[str] = None, - status_details: Optional[str] = None, - error: Optional[CertificateOperationError] = None, - target: Optional[str] = None, - request_id: Optional[str] = None, - preserve_cert_order: Optional[bool] = False, - ) -> None: - self._id = cert_operation_id - self._vault_id = parse_key_vault_id(cert_operation_id) if cert_operation_id else None - self._issuer_name = issuer_name - self._certificate_type = certificate_type - self._certificate_transparency = certificate_transparency - self._csr = csr - self._cancellation_requested = cancellation_requested - self._status = status - self._status_details = status_details - self._error = error - self._target = target - self._request_id = request_id - self._preserve_cert_order = preserve_cert_order - - def __repr__(self) -> str: - return f""[:1024] - - @classmethod - def _from_certificate_operation_bundle( - cls, certificate_operation_bundle: models.CertificateOperation - ) -> "CertificateOperation": - - issuer_parameters = certificate_operation_bundle.issuer_parameters - return cls( - cert_operation_id=certificate_operation_bundle.id, - issuer_name=issuer_parameters.name if issuer_parameters else None, - certificate_type=( - certificate_operation_bundle.issuer_parameters.certificate_type - if certificate_operation_bundle.issuer_parameters - else None - ), - # 2016-10-01 IssuerParameters doesn't have certificate_transparency - certificate_transparency=getattr(issuer_parameters, "certificate_transparency", None), - csr=certificate_operation_bundle.csr, - cancellation_requested=certificate_operation_bundle.cancellation_requested, - status=certificate_operation_bundle.status, - status_details=certificate_operation_bundle.status_details, - error=( - CertificateOperationError._from_error_bundle( # pylint: disable=protected-access - certificate_operation_bundle.error - ) - if certificate_operation_bundle.error - else None - ), - target=certificate_operation_bundle.target, - request_id=certificate_operation_bundle.request_id, - preserve_cert_order=certificate_operation_bundle.preserve_cert_order, - ) - - @property - def id(self) -> Optional[str]: - """The certificate ID. - - :returns: The certificate ID. - :rtype: str or None - """ - return self._id - - @property - def name(self) -> Optional[str]: - """The certificate name. - - :returns: The certificate name. - :rtype: str or None - """ - return self._vault_id.name if self._vault_id else None - - @property - def vault_url(self) -> Optional[str]: - """URL of the vault performing the certificate operation. - - :returns: URL of the vault performing the certificate operation. - :rtype: str or None - """ - return self._vault_id.vault_url if self._vault_id else None - - @property - def issuer_name(self) -> Union[str, WellKnownIssuerNames, None]: - """The name of the certificate issuer. - - :returns: The name of the certificate issuer. - :rtype: str or ~azure.keyvault.certificates.WellKnownIssuerNames or None - """ - return self._issuer_name - - @property - def certificate_type(self) -> Optional[str]: - """Type of certificate to be requested from the issuer provider. - - :returns: Type of certificate to be requested from the issuer provider. - :rtype: str or None - """ - return self._certificate_type - - @property - def certificate_transparency(self) -> Optional[bool]: - """Whether certificates generated under this policy should be published to certificate transparency logs. - - :returns: True if the certificates should be published to transparency logs; False otherwise. - :rtype: bool or None - """ - return self._certificate_transparency - - @property - def csr(self) -> Optional[bytes]: - """The certificate signing request that is being used in this certificate operation. - - :returns: The certificate signing request that is being used in this certificate operation. - :rtype: bytes or None - """ - return self._csr - - @property - def cancellation_requested(self) -> Optional[bool]: - """Whether cancellation was requested on the certificate operation. - - :returns: True if cancellation was requested; False otherwise. - :rtype: bool or None - """ - return self._cancellation_requested - - @property - def status(self) -> Optional[str]: - """The operation status. - - :returns: The operation status. - :rtype: str or None - """ - return self._status - - @property - def status_details(self) -> Optional[str]: - """Details of the operation status. - - :returns: Details of the operation status. - :rtype: str or None - """ - return self._status_details - - @property - def error(self) -> Optional[CertificateOperationError]: - """Any error associated with the certificate operation. - - :returns: Any error associated with the operation, as a - :class:`~azure.keyvault.certificates.CertificateOperationError`. - :rtype: ~azure.keyvault.certificates.CertificateOperationError or None""" - return self._error - - @property - def target(self) -> Optional[str]: - """Location which contains the result of the certificate operation. - - :returns: Location which contains the result of the certificate operation. - :rtype: str or None - """ - return self._target - - @property - def request_id(self) -> Optional[str]: - """Identifier for the certificate operation. - - :returns: Identifier for the certificate operation. - :rtype: str or None - """ - return self._request_id - - @property - def preserve_certificate_order(self) -> Optional[bool]: - """Whether the certificate order should be preserved. - - :returns: Specifies whether the certificate chain preserves its original order. The default value is False, - which sets the leaf certificate at index 0. - :rtype: bool or None - """ - return self._preserve_cert_order - - -class CertificatePolicy(object): - """Management policy for a certificate. - - :param issuer_name: Optional. Name of the referenced issuer object or reserved names; for example, - :attr:`~azure.keyvault.certificates.WellKnownIssuerNames.self` or - :attr:`~azure.keyvault.certificates.WellKnownIssuerNames.unknown` - :type issuer_name: str or None - - :keyword subject: The subject name of the certificate. Should be a valid X509 distinguished name. Either subject or - one of the subject alternative name parameters are required for creating a certificate. This will be ignored - when importing a certificate; the subject will be parsed from the imported certificate. - :paramtype subject: str or None - :keyword san_emails: Subject alternative emails of the X509 object. Either subject or one of the subject alternative - name parameters are required for creating a certificate. - :paramtype san_emails: list[str] or None - :keyword san_dns_names: Subject alternative DNS names of the X509 object. Either subject or one of the subject - alternative name parameters are required for creating a certificate. - :paramtype san_dns_names: list[str] or None - :keyword san_user_principal_names: Subject alternative user principal names of the X509 object. Either subject or - one of the subject alternative name parameters are required for creating a certificate. - :paramtype san_user_principal_names: list[str] or None - :keyword exportable: Indicates if the private key can be exported. For valid values, see KeyType. - :paramtype exportable: bool or None - :keyword key_type: The type of key pair to be used for the certificate. - :paramtype key_type: str or ~azure.keyvault.certificates.KeyType or None - :keyword key_size: The key size in bits. For example: 2048, 3072, or 4096 for RSA. - :paramtype key_size: int or None - :keyword reuse_key: Indicates if the same key pair will be used on certificate renewal. - :paramtype reuse_key: bool or None - :keyword key_curve_name: Elliptic curve name. For valid values, see KeyCurveName. - :paramtype key_curve_name: str or ~azure.keyvault.certificates.KeyCurveName or None - :keyword enhanced_key_usage: The extended ways the key of the certificate can be used. - :paramtype enhanced_key_usage: list[str] or None - :keyword key_usage: List of key usages. - :paramtype key_usage: list[str or ~azure.keyvault.certificates.KeyUsageType] or None - :keyword content_type: The media type (MIME type) of the secret backing the certificate. If not specified, - :attr:`CertificateContentType.pkcs12` is assumed. - :paramtype content_type: str or ~azure.keyvault.certificates.CertificateContentType or None - :keyword validity_in_months: The duration that the certificate is valid in months. - :paramtype validity_in_months: int or None - :keyword lifetime_actions: Actions that will be performed by Key Vault over the lifetime of a certificate. - :paramtype lifetime_actions: list[~azure.keyvault.certificates.LifetimeAction] or None - :keyword certificate_type: Type of certificate to be requested from the issuer provider. - :paramtype certificate_type: str or None - :keyword certificate_transparency: Indicates if the certificates generated under this policy should be - published to certificate transparency logs. - :paramtype certificate_transparency: bool or None - """ - - # pylint:disable=too-many-instance-attributes - def __init__( - self, - issuer_name: Optional[str] = None, - **kwargs: Any, - ) -> None: - self._issuer_name = issuer_name - self._subject = kwargs.pop("subject", None) - self._attributes = kwargs.pop("attributes", None) - self._exportable = kwargs.pop("exportable", None) - self._key_type = kwargs.pop("key_type", None) - self._key_size = kwargs.pop("key_size", None) - self._reuse_key = kwargs.pop("reuse_key", None) - self._key_curve_name = kwargs.pop("key_curve_name", None) - self._enhanced_key_usage = kwargs.pop("enhanced_key_usage", None) - self._key_usage = kwargs.pop("key_usage", None) - self._content_type = kwargs.pop("content_type", None) - self._validity_in_months = kwargs.pop("validity_in_months", None) - self._lifetime_actions = kwargs.pop("lifetime_actions", None) - self._certificate_type = kwargs.pop("certificate_type", None) - self._certificate_transparency = kwargs.pop("certificate_transparency", None) - self._san_emails = kwargs.pop("san_emails", None) or None - self._san_dns_names = kwargs.pop("san_dns_names", None) or None - self._san_user_principal_names = kwargs.pop("san_user_principal_names", None) or None - - @classmethod - def get_default(cls) -> "CertificatePolicy": - return cls(issuer_name=WellKnownIssuerNames.self, subject="CN=DefaultPolicy") - - def __repr__(self) -> str: - return f""[:1024] - - def _to_certificate_policy_bundle(self) -> models.CertificatePolicy: - if self.issuer_name or self.certificate_type or self.certificate_transparency: - issuer_parameters: Optional[models.IssuerParameters] = models.IssuerParameters( - name=self.issuer_name, - certificate_type=self.certificate_type, - certificate_transparency=self.certificate_transparency, # 2016-10-01 model will ignore this - ) - else: - issuer_parameters = None - - if self.enabled is not None or self.created_on is not None or self.updated_on is not None: - attributes = models.CertificateAttributes( - { - "enabled": self.enabled, - "created": self.created_on, - "updated": self.updated_on, - } - ) - else: - attributes = None - - if self.lifetime_actions: - lifetime_actions = [] - for lifetime_action in self.lifetime_actions: - lifetime_actions.append( - models.LifetimeAction( - trigger=models.Trigger( - lifetime_percentage=lifetime_action.lifetime_percentage, - days_before_expiry=lifetime_action.days_before_expiry, - ), - action=models.Action(action_type=lifetime_action.action), - ) - ) - else: - lifetime_actions = None # type: ignore - - # pylint:disable=too-many-boolean-expressions - if ( - self.subject - or self.enhanced_key_usage - or self.key_usage - or self.san_emails - or self.san_user_principal_names - or self.san_dns_names - or self.validity_in_months - ): - if self.key_usage: - key_usage: Optional[List[Union[str, KeyUsageType]]] = [ - k.value if not isinstance(k, str) else k for k in self.key_usage - ] - else: - key_usage = None - - x509_properties: Optional[models.X509CertificateProperties] = models.X509CertificateProperties( - subject=self.subject, - ekus=self.enhanced_key_usage, - subject_alternative_names=models.SubjectAlternativeNames( - emails=self.san_emails, upns=self.san_user_principal_names, dns_names=self.san_dns_names - ), - key_usage=key_usage, - validity_in_months=self.validity_in_months, - ) - else: - x509_properties = None - - if self.exportable or self.key_type or self.key_size or self.reuse_key or self.key_curve_name: - key_properties: Optional[models.KeyProperties] = models.KeyProperties( - exportable=self.exportable, - key_type=self.key_type, - key_size=self.key_size, - reuse_key=self.reuse_key, - curve=self.key_curve_name, - ) - else: - key_properties = None - - if self.content_type: - secret_properties: Optional[models.SecretProperties] = models.SecretProperties( - content_type=self.content_type - ) - else: - secret_properties = None - - policy_bundle = models.CertificatePolicy( - key_properties=key_properties, - secret_properties=secret_properties, - x509_certificate_properties=x509_properties, - lifetime_actions=lifetime_actions, - issuer_parameters=issuer_parameters, - attributes=attributes, - ) - return policy_bundle - - @classmethod - def _from_certificate_policy_bundle( - cls, certificate_policy_bundle: Optional[models.CertificatePolicy] - ) -> "CertificatePolicy": - if certificate_policy_bundle is None: - return cls() - - if certificate_policy_bundle.lifetime_actions: - lifetime_actions: Optional[List[LifetimeAction]] = [ - LifetimeAction( - action=CertificatePolicyAction(item.action.action_type) if item.action else None, - lifetime_percentage=item.trigger.lifetime_percentage if item.trigger else None, - days_before_expiry=item.trigger.days_before_expiry if item.trigger else None, - ) - for item in certificate_policy_bundle.lifetime_actions - ] - else: - lifetime_actions = None - x509_certificate_properties = certificate_policy_bundle.x509_certificate_properties - if x509_certificate_properties and x509_certificate_properties.key_usage: - key_usage: Optional[List[KeyUsageType]] = [KeyUsageType(k) for k in x509_certificate_properties.key_usage] - else: - key_usage = None - key_properties = certificate_policy_bundle.key_properties - curve_name = getattr(key_properties, "curve", None) # missing from 2016-10-01 KeyProperties - if curve_name: - curve_name = KeyCurveName(curve_name) - - issuer_parameters = certificate_policy_bundle.issuer_parameters - return cls( - issuer_name=issuer_parameters.name if issuer_parameters else None, - subject=(x509_certificate_properties.subject if x509_certificate_properties else None), - certificate_type=issuer_parameters.certificate_type if issuer_parameters else None, - # 2016-10-01 IssuerParameters doesn't have certificate_transparency - certificate_transparency=getattr(issuer_parameters, "certificate_transparency", None), - lifetime_actions=lifetime_actions, - exportable=key_properties.exportable if key_properties else None, - key_type=KeyType(key_properties.key_type) if key_properties and key_properties.key_type else None, - key_size=key_properties.key_size if key_properties else None, - reuse_key=key_properties.reuse_key if key_properties else None, - key_curve_name=curve_name, - enhanced_key_usage=x509_certificate_properties.ekus if x509_certificate_properties else None, - key_usage=key_usage, - content_type=( - CertificateContentType(certificate_policy_bundle.secret_properties.content_type) - if certificate_policy_bundle.secret_properties - and certificate_policy_bundle.secret_properties.content_type - else None - ), - attributes=certificate_policy_bundle.attributes, - san_emails=( - x509_certificate_properties.subject_alternative_names.emails - if x509_certificate_properties and x509_certificate_properties.subject_alternative_names - else None - ), - san_user_principal_names=( - x509_certificate_properties.subject_alternative_names.upns - if x509_certificate_properties and x509_certificate_properties.subject_alternative_names - else None - ), - san_dns_names=( - x509_certificate_properties.subject_alternative_names.dns_names - if x509_certificate_properties and x509_certificate_properties.subject_alternative_names - else None - ), - validity_in_months=( - x509_certificate_properties.validity_in_months if x509_certificate_properties else None - ), - ) - - @property - def exportable(self) -> Optional[bool]: - """Whether the private key can be exported. - - :returns: True if the private key can be exported; False otherwise. - :rtype: bool or None - """ - return self._exportable - - @property - def key_type(self) -> Optional[KeyType]: - """The type of key pair to be used for the certificate. - - :returns: The type of key pair to be used for the certificate. - :rtype: ~azure.keyvault.certificates.KeyType or None - """ - return self._key_type - - @property - def key_size(self) -> Optional[int]: - """The key size in bits. - - :returns: The key size in bits. - :rtype: int or None - """ - return self._key_size - - @property - def reuse_key(self) -> Optional[bool]: - """Whether the same key pair will be used on certificate renewal. - - :returns: True if the same key pair will be used on certificate renewal; False otherwise. - :rtype: bool or None - """ - return self._reuse_key - - @property - def key_curve_name(self) -> Optional[KeyCurveName]: - """Elliptic curve name. - - :returns: Elliptic curve name. - :rtype: ~azure.keyvault.certificates.KeyCurveName or None - """ - return self._key_curve_name - - @property - def enhanced_key_usage(self) -> Optional[List[str]]: - """The enhanced key usage. - - :returns: The enhanced key usage. - :rtype: list[str] or None - """ - return self._enhanced_key_usage - - @property - def key_usage(self) -> Optional[List[KeyUsageType]]: - """List of key usages. - - :returns: List of key usages. - :rtype: list[~azure.keyvault.certificates.KeyUsageType] or None - """ - return self._key_usage - - @property - def content_type(self) -> Optional[CertificateContentType]: - """The media type (MIME type). - - :returns: The media type (MIME type). - :rtype: ~azure.keyvault.certificates.CertificateContentType or None - """ - return self._content_type - - @property - def subject(self) -> Optional[str]: - """The subject name of the certificate. - - :returns: The subject name of the certificate. - :rtype: str or None - """ - return self._subject - - @property - def san_emails(self) -> Optional[List[str]]: - """The subject alternative email addresses. - - :returns: The subject alternative email addresses, as a list. - :rtype: list[str] or None - """ - return self._san_emails - - @property - def san_dns_names(self) -> Optional[List[str]]: - """The subject alternative domain names. - - :returns: The subject alternative domain names, as a list. - :rtype: list[str] or None - """ - return self._san_dns_names - - @property - def san_user_principal_names(self) -> Optional[List[str]]: - """The subject alternative user principal names. - - :returns: The subject alternative user principal names, as a list. - :rtype: list[str] or None - """ - return self._san_user_principal_names - - @property - def validity_in_months(self) -> Optional[int]: - """The duration that the certificate is valid for in months. - - :returns: The duration that the certificate is valid for in months. - :rtype: int or None - """ - return self._validity_in_months - - @property - def lifetime_actions(self) -> "Optional[List[LifetimeAction]]": - """Actions and their triggers that will be performed by Key Vault over the lifetime of the certificate. - - :returns: Actions and their triggers that will be performed by Key Vault over the lifetime of the certificate. - :rtype: list[~azure.keyvault.certificates.LifetimeAction] or None - """ - return self._lifetime_actions - - @property - def issuer_name(self) -> Optional[str]: - """Name of the referenced issuer object or reserved names for the issuer of the certificate. - - :returns: Name of the referenced issuer object or reserved names for the issuer of the certificate. - :rtype: str or None - """ - return self._issuer_name - - @property - def certificate_type(self) -> Optional[str]: - """Type of certificate requested from the issuer provider. - - :returns: Type of certificate requested from the issuer provider. - :rtype: str or None - """ - return self._certificate_type - - @property - def certificate_transparency(self) -> Optional[bool]: - """Whether the certificates generated under this policy should be published to certificate transparency logs. - - :returns: True if the certificates should be published to transparency logs; False otherwise. - :rtype: bool or None - """ - return self._certificate_transparency - - @property - def enabled(self) -> Optional[bool]: - """Whether the certificate is enabled or not. - - :returns: True if the certificate is enabled; False otherwise. - :rtype: bool or None - """ - return self._attributes.enabled if self._attributes else None - - @property - def created_on(self) -> Optional[datetime]: - """The datetime when the certificate is created. - - :returns: The datetime when the certificate is created. - :rtype: ~datetime.datetime or None - """ - return self._attributes.created if self._attributes else None - - @property - def updated_on(self) -> Optional[datetime]: - """The datetime when the certificate was last updated. - - :returns: The datetime when the certificate was last updated. - :rtype: ~datetime.datetime or None - """ - return self._attributes.updated if self._attributes else None - - -class CertificateContact(object): - """The contact information for the vault certificates. - - :param email: Email address of a contact for the certificate. - :type email: str or None - :param name: Name of a contact for the certificate. - :type name: str or None - :param phone: phone number of a contact for the certificate. - :type phone: str or None - """ - - def __init__(self, email: Optional[str] = None, name: Optional[str] = None, phone: Optional[str] = None) -> None: - self._email = email - self._name = name - self._phone = phone - - def __repr__(self) -> str: - return f"CertificateContact(email={self.email}, name={self.name}, phone={self.phone})"[:1024] - - def _to_certificate_contacts_item(self) -> models.Contact: - return models.Contact(email_address=self.email, name=self.name, phone=self.phone) - - @classmethod - def _from_certificate_contacts_item(cls, contact_item: models.Contact) -> "CertificateContact": - return cls(email=contact_item.email_address, name=contact_item.name, phone=contact_item.phone) - - @property - def email(self) -> Optional[str]: - """:rtype: str or None""" - return self._email - - @property - def name(self) -> Optional[str]: - """:rtype: str or None""" - return self._name - - @property - def phone(self) -> Optional[str]: - """:rtype: str or None""" - return self._phone - - -class IssuerProperties(object): - """The properties of an issuer containing the issuer metadata. - - :param provider: The issuer provider. - :type provider: str or None - """ - - def __init__(self, provider: Optional[str] = None, **kwargs: Any) -> None: - self._id = kwargs.pop("issuer_id", None) - self._vault_id = parse_key_vault_id(self._id) - self._provider = provider - - def __repr__(self) -> str: - return f"IssuerProperties(issuer_id={self.id}, provider={self.provider})"[:1024] - - @classmethod - def _from_issuer_item( - cls, issuer_item: Union[models.CertificateIssuerItem, models.IssuerBundle] - ) -> "IssuerProperties": - return cls(issuer_id=issuer_item.id, provider=issuer_item.provider) - - @property - def id(self) -> Optional[str]: - """The issuer ID. - - :returns: The issuer ID. - :rtype: str or None - """ - return self._id - - @property - def name(self) -> Optional[str]: - """The issuer name. - - :returns: The issuer name. - :rtype: str or None - """ - # Issuer name is listed under version under vault_id - return self._vault_id.version - - @property - def provider(self) -> Optional[str]: - """The issuer provider. - - :returns: The issuer provider. - :rtype: str or None - """ - return self._provider - - -class CertificateIssuer(object): - """The issuer for a Key Vault certificate. - - :param provider: The issuer provider - :type provider: str or None - :param attributes: The issuer attributes. - :type attributes: ~azure.keyvault.certificates._generated.models.IssuerAttributes or None - :param account_id: The username / account name / account id. - :type account_id: str or None - :param password: The password / secret / account key. - :type password: str or None - :param organization_id: The ID of the organization. - :type organization_id: str or None - :param admin_contacts: Details of the organization administrator. - :type admin_contacts: list[~azure.keyvault.certificates.AdministratorContact] or None - """ - - def __init__( - self, - provider: Optional[str], - attributes: Optional[models.IssuerAttributes] = None, - account_id: Optional[str] = None, - # [SuppressMessage("Microsoft.Security", "CS002:SecretInNextLine", Justification="Typedef, not string.")] - password: Optional[str] = None, - organization_id: Optional[str] = None, - admin_contacts: Optional[List[AdministratorContact]] = None, - **kwargs: Any, - ) -> None: - self._provider = provider - self._attributes = attributes - self._account_id = account_id - self._password = password - self._organization_id = organization_id - self._admin_contacts = admin_contacts - self._id = kwargs.pop("issuer_id", None) - self._vault_id = parse_key_vault_id(self._id) - - def __repr__(self) -> str: - return f""[:1024] - - @classmethod - def _from_issuer_bundle(cls, issuer_bundle: models.IssuerBundle) -> "CertificateIssuer": - admin_contacts = [] - admin_details = issuer_bundle.organization_details.admin_details if issuer_bundle.organization_details else None - if admin_details: - # pylint:disable=protected-access - for admin_detail in admin_details: - admin_contacts.append(AdministratorContact._from_admin_detail(admin_detail)) - return cls( - provider=IssuerProperties._from_issuer_item(issuer_bundle).provider, # pylint: disable=protected-access - attributes=issuer_bundle.attributes, - account_id=issuer_bundle.credentials.account_id if issuer_bundle.credentials else None, - password=issuer_bundle.credentials.password if issuer_bundle.credentials else None, - organization_id=issuer_bundle.organization_details.id if issuer_bundle.organization_details else None, - admin_contacts=admin_contacts, - issuer_id=issuer_bundle.id, - ) - - @property - def id(self) -> Optional[str]: - """The issuer ID. - - :returns: The issuer ID. - :rtype: str or None - """ - return self._id - - @property - def name(self) -> Optional[str]: - """The issuer name. - - :returns: The issuer name. - :rtype: str or None - """ - # Issuer name is listed under version under vault_id. - # This is because the id we pass to parse_key_vault_id has an extra segment, so where most cases the version of - # the general pattern is certificates/name/version, but here we have certificates/issuers/name/version. - # Issuers are not versioned. - return self._vault_id.version - - @property - def provider(self) -> Optional[str]: - """The issuer provider. - - :returns: The issuer provider. - :rtype: str or None - """ - return self._provider - - @property - def enabled(self) -> Optional[bool]: - """Whether the certificate is enabled or not. - - :returns: True if the certificate is enabled; False otherwise. - :rtype: bool or None - """ - return self._attributes.enabled if self._attributes else None - - @property - def created_on(self) -> Optional[datetime]: - """The datetime when the certificate is created. - - :returns: The datetime when the certificate is created. - :rtype: ~datetime.datetime or None - """ - return self._attributes.created if self._attributes else None - - @property - def updated_on(self) -> Optional[datetime]: - """The datetime when the certificate was last updated. - - :returns: The datetime when the certificate was last updated. - :rtype: ~datetime.datetime or None - """ - return self._attributes.updated if self._attributes else None - - @property - def account_id(self) -> Optional[str]: - """The username / account name / account id. - - :returns: The username / account name / account id. - :rtype: str or None - """ - return self._account_id - - @property - def password(self) -> Optional[str]: - """The password / secret / account key. - - :returns: The password / secret / account key. - :rtype: str or None - """ - return self._password - - @property - def organization_id(self) -> Optional[str]: - """The issuer organization ID. - - :returns: The issuer organization ID. - :rtype: str or None - """ - return self._organization_id - - @property - def admin_contacts(self) -> Optional[List[AdministratorContact]]: - """Contact details of the organization administrator(s) of this issuer. - - :returns: Contact details of the organization administrator(s) of this issuer. - :rtype: list[~azure.keyvault.certificates.AdministratorContact] or None - """ - return self._admin_contacts - - -class LifetimeAction(object): - """Action and its trigger that will be performed by certificate Vault over the lifetime of a certificate. - - :param action: The type of the action. For valid values, see CertificatePolicyAction - :type action: str or ~azure.keyvault.certificates.CertificatePolicyAction or None - :param lifetime_percentage: Percentage of lifetime at which to trigger. Value should be between 1 and 99. - :type lifetime_percentage: int or None - :param days_before_expiry: Days before expiry to attempt renewal. Value should be between 1 and - `validity_in_months` multiplied by 27. I.e., if validity_in_months is 36, then value should be between 1 and 972 - (36 * 27). - :type days_before_expiry: int or None - """ - - def __init__( - self, - action: Union[str, CertificatePolicyAction, None], - lifetime_percentage: Optional[int] = None, - days_before_expiry: Optional[int] = None, - ) -> None: - self._lifetime_percentage = lifetime_percentage - self._days_before_expiry = days_before_expiry - self._action = action - - def __repr__(self) -> str: - result = ( - f"LifetimeAction(action={self.action}, lifetime_percentage={self.lifetime_percentage}, " - + f"days_before_expiry={self.days_before_expiry})" - ) - return result[:1024] - - @property - def lifetime_percentage(self) -> Optional[int]: - """Percentage of lifetime at which to trigger. - - :returns: Percentage of lifetime at which to trigger. - :rtype: int or None - """ - return self._lifetime_percentage - - @property - def days_before_expiry(self) -> Optional[int]: - """Days before expiry to attempt renewal. - - :returns: Days before expiry to attempt renewal. - :rtype: int or None - """ - return self._days_before_expiry - - @property - def action(self) -> Union[str, CertificatePolicyAction, None]: - """The type of action that will be executed; see :class:`~azure.keyvault.certificates.CertificatePolicyAction`. - - :returns: The type of action that will be executed; see - :class:`~azure.keyvault.certificates.CertificatePolicyAction`. - :rtype: str or ~azure.keyvault.certificates.CertificatePolicyAction or None - """ - return self._action - - -class DeletedCertificate(KeyVaultCertificate): - """A deleted Certificate consisting of its previous ID, attributes, tags, and information on when it will be purged. - - :param properties: Properties of the deleted certificate. - :type properties: ~azure.keyvault.certificates.CertificateProperties - :param policy: The management policy of the deleted certificate. - :type policy: ~azure.keyvault.certificates.CertificatePolicy or None - :param cer: CER contents of the X509 certificate. - :type cer: bytearray or None - - :keyword deleted_on: The time when the certificate was deleted, in UTC. - :paramtype deleted_on: ~datetime.datetime or None - :keyword recovery_id: The url of the recovery object, used to identify and recover the deleted certificate. - :paramtype recovery_id: str or None - :keyword scheduled_purge_date: The time when the certificate is scheduled to be purged, in UTC. - :paramtype scheduled_purge_date: ~datetime.datetime or None - """ - - def __init__( - self, - properties: Optional[CertificateProperties] = None, - policy: Optional[CertificatePolicy] = None, - cer: Optional[bytearray] = None, - **kwargs: Any, - ) -> None: - super(DeletedCertificate, self).__init__(properties=properties, policy=policy, cer=cer, **kwargs) - self._deleted_on = kwargs.get("deleted_on", None) - self._recovery_id = kwargs.get("recovery_id", None) - self._scheduled_purge_date = kwargs.get("scheduled_purge_date", None) - - def __repr__(self) -> str: - return f""[:1024] - - @classmethod - def _from_deleted_certificate_item( - cls, deleted_certificate_item: models.DeletedCertificateItem - ) -> "DeletedCertificate": - return cls( - properties=CertificateProperties._from_certificate_item( # pylint: disable=protected-access - deleted_certificate_item - ), - key_id=None, - secret_id=None, - policy=None, - cer=None, - deleted_on=deleted_certificate_item.deleted_date, - recovery_id=deleted_certificate_item.recovery_id, - scheduled_purge_date=deleted_certificate_item.scheduled_purge_date, - ) - - @classmethod - def _from_deleted_certificate_bundle( - cls, deleted_certificate_bundle: models.DeletedCertificateBundle - ) -> "DeletedCertificate": - # pylint:disable=protected-access - return cls( - properties=CertificateProperties._from_certificate_bundle(deleted_certificate_bundle), - key_id=deleted_certificate_bundle.kid, - secret_id=deleted_certificate_bundle.sid, - policy=CertificatePolicy._from_certificate_policy_bundle(deleted_certificate_bundle.policy), - cer=deleted_certificate_bundle.cer, # type: ignore - deleted_on=deleted_certificate_bundle.deleted_date, - recovery_id=deleted_certificate_bundle.recovery_id, - scheduled_purge_date=deleted_certificate_bundle.scheduled_purge_date, - ) - - @property - def deleted_on(self) -> Optional[datetime]: - """The datetime when the certificate was deleted. - - :returns: The datetime when the certificate was deleted. - :rtype: ~datetime.datetime or None - """ - return self._deleted_on - - @property - def recovery_id(self) -> Optional[str]: - """The URL of the recovery object, used to identify and recover the deleted certificate. - - :returns: The URL of the recovery object, used to identify and recover the deleted certificate. - :rtype: str or None - """ - return self._recovery_id - - @property - def scheduled_purge_date(self) -> Optional[datetime]: - """The datetime when the certificate is scheduled to be purged. - - :returns: The datetime when the certificate is scheduled to be purged. - :rtype: ~datetime.datetime or None - """ - return self._scheduled_purge_date diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_operations/__init__.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_operations/__init__.py similarity index 100% rename from sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_operations/__init__.py rename to sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_operations/__init__.py diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_operations/_operations.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_operations/_operations.py similarity index 95% rename from sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_operations/_operations.py rename to sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_operations/_operations.py index cf9b9094f642..5357ff63902e 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_operations/_operations.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_operations/_operations.py @@ -6,9 +6,9 @@ # Code generated by Microsoft (R) Python Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from collections.abc import MutableMapping from io import IOBase import json -import sys from typing import Any, Callable, Dict, IO, Iterable, List, Optional, TypeVar, Union, overload import urllib.parse @@ -33,11 +33,7 @@ from .._serialization import Serializer from .._vendor import KeyVaultClientMixinABC -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore -JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object +JSON = MutableMapping[str, Any] T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] @@ -766,7 +762,7 @@ def get_certificates( provisioned. Default value is None. :paramtype include_pending: bool :return: An iterator like instance of CertificateItem - :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.certificates._generated.models.CertificateItem] + :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.certificates.models.CertificateItem] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} @@ -823,7 +819,7 @@ def prepare_request(next_link=None): def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.CertificateItem], deserialized["value"]) + list_of_elem = _deserialize(List[_models.CertificateItem], deserialized.get("value", [])) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, iter(list_of_elem) @@ -858,7 +854,7 @@ def delete_certificate(self, certificate_name: str, **kwargs: Any) -> _models.De :type certificate_name: str :return: DeletedCertificateBundle. The DeletedCertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.DeletedCertificateBundle + :rtype: ~azure.keyvault.certificates.models.DeletedCertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -924,12 +920,12 @@ def set_certificate_contacts( certificates/managecontacts permission. :param contacts: The contacts for the key vault certificate. Required. - :type contacts: ~azure.keyvault.certificates._generated.models.Contacts + :type contacts: ~azure.keyvault.certificates.models.Contacts :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: Contacts. The Contacts is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.Contacts + :rtype: ~azure.keyvault.certificates.models.Contacts :raises ~azure.core.exceptions.HttpResponseError: """ @@ -948,7 +944,7 @@ def set_certificate_contacts( Default value is "application/json". :paramtype content_type: str :return: Contacts. The Contacts is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.Contacts + :rtype: ~azure.keyvault.certificates.models.Contacts :raises ~azure.core.exceptions.HttpResponseError: """ @@ -967,7 +963,7 @@ def set_certificate_contacts( Default value is "application/json". :paramtype content_type: str :return: Contacts. The Contacts is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.Contacts + :rtype: ~azure.keyvault.certificates.models.Contacts :raises ~azure.core.exceptions.HttpResponseError: """ @@ -982,9 +978,9 @@ def set_certificate_contacts( :param contacts: The contacts for the key vault certificate. Is one of the following types: Contacts, JSON, IO[bytes] Required. - :type contacts: ~azure.keyvault.certificates._generated.models.Contacts or JSON or IO[bytes] + :type contacts: ~azure.keyvault.certificates.models.Contacts or JSON or IO[bytes] :return: Contacts. The Contacts is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.Contacts + :rtype: ~azure.keyvault.certificates.models.Contacts :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -1057,7 +1053,7 @@ def get_certificate_contacts(self, **kwargs: Any) -> _models.Contacts: specified key vault. This operation requires the certificates/managecontacts permission. :return: Contacts. The Contacts is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.Contacts + :rtype: ~azure.keyvault.certificates.models.Contacts :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -1120,7 +1116,7 @@ def delete_certificate_contacts(self, **kwargs: Any) -> _models.Contacts: the certificates/managecontacts permission. :return: Contacts. The Contacts is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.Contacts + :rtype: ~azure.keyvault.certificates.models.Contacts :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -1189,7 +1185,7 @@ def get_certificate_issuers( service will return up to 25 results. Default value is None. :paramtype maxresults: int :return: An iterator like instance of CertificateIssuerItem - :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.certificates._generated.models.CertificateIssuerItem] + :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.certificates.models.CertificateIssuerItem] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} @@ -1245,7 +1241,7 @@ def prepare_request(next_link=None): def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.CertificateIssuerItem], deserialized["value"]) + list_of_elem = _deserialize(List[_models.CertificateIssuerItem], deserialized.get("value", [])) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, iter(list_of_elem) @@ -1287,12 +1283,12 @@ def set_certificate_issuer( identifiable or sensitive information. Required. :type issuer_name: str :param parameter: Certificate issuer set parameter. Required. - :type parameter: ~azure.keyvault.certificates._generated.models.CertificateIssuerSetParameters + :type parameter: ~azure.keyvault.certificates.models.CertificateIssuerSetParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1315,7 +1311,7 @@ def set_certificate_issuer( Default value is "application/json". :paramtype content_type: str :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1338,7 +1334,7 @@ def set_certificate_issuer( Default value is "application/json". :paramtype content_type: str :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1357,10 +1353,10 @@ def set_certificate_issuer( :type issuer_name: str :param parameter: Certificate issuer set parameter. Is one of the following types: CertificateIssuerSetParameters, JSON, IO[bytes] Required. - :type parameter: ~azure.keyvault.certificates._generated.models.CertificateIssuerSetParameters or JSON or + :type parameter: ~azure.keyvault.certificates.models.CertificateIssuerSetParameters or JSON or IO[bytes] :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -1443,12 +1439,12 @@ def update_certificate_issuer( :param issuer_name: The name of the issuer. Required. :type issuer_name: str :param parameter: Certificate issuer update parameter. Required. - :type parameter: ~azure.keyvault.certificates._generated.models.CertificateIssuerUpdateParameters + :type parameter: ~azure.keyvault.certificates.models.CertificateIssuerUpdateParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1469,7 +1465,7 @@ def update_certificate_issuer( Default value is "application/json". :paramtype content_type: str :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1490,7 +1486,7 @@ def update_certificate_issuer( Default value is "application/json". :paramtype content_type: str :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1510,10 +1506,10 @@ def update_certificate_issuer( :type issuer_name: str :param parameter: Certificate issuer update parameter. Is one of the following types: CertificateIssuerUpdateParameters, JSON, IO[bytes] Required. - :type parameter: ~azure.keyvault.certificates._generated.models.CertificateIssuerUpdateParameters or JSON + :type parameter: ~azure.keyvault.certificates.models.CertificateIssuerUpdateParameters or JSON or IO[bytes] :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -1590,7 +1586,7 @@ def get_certificate_issuer(self, issuer_name: str, **kwargs: Any) -> _models.Iss :param issuer_name: The name of the issuer. Required. :type issuer_name: str :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -1656,7 +1652,7 @@ def delete_certificate_issuer(self, issuer_name: str, **kwargs: Any) -> _models. :param issuer_name: The name of the issuer. Required. :type issuer_name: str :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -1731,12 +1727,12 @@ def create_certificate( personally identifiable or sensitive information. Required. :type certificate_name: str :param parameters: The parameters to create a certificate. Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateCreateParameters + :type parameters: ~azure.keyvault.certificates.models.CertificateCreateParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1759,7 +1755,7 @@ def create_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1782,7 +1778,7 @@ def create_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1804,10 +1800,10 @@ def create_certificate( :type certificate_name: str :param parameters: The parameters to create a certificate. Is one of the following types: CertificateCreateParameters, JSON, IO[bytes] Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateCreateParameters or JSON or + :type parameters: ~azure.keyvault.certificates.models.CertificateCreateParameters or JSON or IO[bytes] :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -1894,12 +1890,12 @@ def import_certificate( personally identifiable or sensitive information. Required. :type certificate_name: str :param parameters: The parameters to import the certificate. Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateImportParameters + :type parameters: ~azure.keyvault.certificates.models.CertificateImportParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1924,7 +1920,7 @@ def import_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1949,7 +1945,7 @@ def import_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1973,10 +1969,10 @@ def import_certificate( :type certificate_name: str :param parameters: The parameters to import the certificate. Is one of the following types: CertificateImportParameters, JSON, IO[bytes] Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateImportParameters or JSON or + :type parameters: ~azure.keyvault.certificates.models.CertificateImportParameters or JSON or IO[bytes] :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -2057,7 +2053,7 @@ def get_certificate_versions( service will return up to 25 results. Default value is None. :paramtype maxresults: int :return: An iterator like instance of CertificateItem - :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.certificates._generated.models.CertificateItem] + :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.certificates.models.CertificateItem] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} @@ -2114,7 +2110,7 @@ def prepare_request(next_link=None): def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.CertificateItem], deserialized["value"]) + list_of_elem = _deserialize(List[_models.CertificateItem], deserialized.get("value", [])) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, iter(list_of_elem) @@ -2147,7 +2143,7 @@ def get_certificate_policy(self, certificate_name: str, **kwargs: Any) -> _model :param certificate_name: The name of the certificate in a given key vault. Required. :type certificate_name: str :return: CertificatePolicy. The CertificatePolicy is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificatePolicy + :rtype: ~azure.keyvault.certificates.models.CertificatePolicy :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -2220,12 +2216,12 @@ def update_certificate_policy( :param certificate_name: The name of the certificate in the given vault. Required. :type certificate_name: str :param certificate_policy: The policy for the certificate. Required. - :type certificate_policy: ~azure.keyvault.certificates._generated.models.CertificatePolicy + :type certificate_policy: ~azure.keyvault.certificates.models.CertificatePolicy :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CertificatePolicy. The CertificatePolicy is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificatePolicy + :rtype: ~azure.keyvault.certificates.models.CertificatePolicy :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2246,7 +2242,7 @@ def update_certificate_policy( Default value is "application/json". :paramtype content_type: str :return: CertificatePolicy. The CertificatePolicy is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificatePolicy + :rtype: ~azure.keyvault.certificates.models.CertificatePolicy :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2272,7 +2268,7 @@ def update_certificate_policy( Default value is "application/json". :paramtype content_type: str :return: CertificatePolicy. The CertificatePolicy is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificatePolicy + :rtype: ~azure.keyvault.certificates.models.CertificatePolicy :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2292,10 +2288,10 @@ def update_certificate_policy( :type certificate_name: str :param certificate_policy: The policy for the certificate. Is one of the following types: CertificatePolicy, JSON, IO[bytes] Required. - :type certificate_policy: ~azure.keyvault.certificates._generated.models.CertificatePolicy or JSON or + :type certificate_policy: ~azure.keyvault.certificates.models.CertificatePolicy or JSON or IO[bytes] :return: CertificatePolicy. The CertificatePolicy is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificatePolicy + :rtype: ~azure.keyvault.certificates.models.CertificatePolicy :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -2382,12 +2378,12 @@ def update_certificate( :param certificate_version: The version of the certificate. Required. :type certificate_version: str :param parameters: The parameters for certificate update. Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateUpdateParameters + :type parameters: ~azure.keyvault.certificates.models.CertificateUpdateParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2417,7 +2413,7 @@ def update_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2447,7 +2443,7 @@ def update_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2471,10 +2467,10 @@ def update_certificate( :type certificate_version: str :param parameters: The parameters for certificate update. Is one of the following types: CertificateUpdateParameters, JSON, IO[bytes] Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateUpdateParameters or JSON or + :type parameters: ~azure.keyvault.certificates.models.CertificateUpdateParameters or JSON or IO[bytes] :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -2556,7 +2552,7 @@ def get_certificate( not specified, the latest version of the certificate is returned. Required. :type certificate_version: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -2631,12 +2627,12 @@ def update_certificate_operation( :type certificate_name: str :param certificate_operation: The certificate operation response. Required. :type certificate_operation: - ~azure.keyvault.certificates._generated.models.CertificateOperationUpdateParameter + ~azure.keyvault.certificates.models.CertificateOperationUpdateParameter :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2662,7 +2658,7 @@ def update_certificate_operation( Default value is "application/json". :paramtype content_type: str :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2688,7 +2684,7 @@ def update_certificate_operation( Default value is "application/json". :paramtype content_type: str :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2709,9 +2705,9 @@ def update_certificate_operation( :param certificate_operation: The certificate operation response. Is one of the following types: CertificateOperationUpdateParameter, JSON, IO[bytes] Required. :type certificate_operation: - ~azure.keyvault.certificates._generated.models.CertificateOperationUpdateParameter or JSON or IO[bytes] + ~azure.keyvault.certificates.models.CertificateOperationUpdateParameter or JSON or IO[bytes] :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -2787,7 +2783,7 @@ def get_certificate_operation(self, certificate_name: str, **kwargs: Any) -> _mo :param certificate_name: The name of the certificate. Required. :type certificate_name: str :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -2854,7 +2850,7 @@ def delete_certificate_operation(self, certificate_name: str, **kwargs: Any) -> :param certificate_name: The name of the certificate. Required. :type certificate_name: str :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -2928,12 +2924,12 @@ def merge_certificate( :param certificate_name: The name of the certificate. Required. :type certificate_name: str :param parameters: The parameters to merge certificate. Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateMergeParameters + :type parameters: ~azure.keyvault.certificates.models.CertificateMergeParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2955,7 +2951,7 @@ def merge_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2977,7 +2973,7 @@ def merge_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2998,10 +2994,10 @@ def merge_certificate( :type certificate_name: str :param parameters: The parameters to merge certificate. Is one of the following types: CertificateMergeParameters, JSON, IO[bytes] Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateMergeParameters or JSON or + :type parameters: ~azure.keyvault.certificates.models.CertificateMergeParameters or JSON or IO[bytes] :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -3078,7 +3074,7 @@ def backup_certificate(self, certificate_name: str, **kwargs: Any) -> _models.Ba :param certificate_name: The name of the certificate. Required. :type certificate_name: str :return: BackupCertificateResult. The BackupCertificateResult is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.BackupCertificateResult + :rtype: ~azure.keyvault.certificates.models.BackupCertificateResult :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -3144,12 +3140,12 @@ def restore_certificate( certificates/restore permission. :param parameters: The parameters to restore the certificate. Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateRestoreParameters + :type parameters: ~azure.keyvault.certificates.models.CertificateRestoreParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -3168,7 +3164,7 @@ def restore_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -3187,7 +3183,7 @@ def restore_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -3202,10 +3198,10 @@ def restore_certificate( :param parameters: The parameters to restore the certificate. Is one of the following types: CertificateRestoreParameters, JSON, IO[bytes] Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateRestoreParameters or JSON or + :type parameters: ~azure.keyvault.certificates.models.CertificateRestoreParameters or JSON or IO[bytes] :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -3289,7 +3285,7 @@ def get_deleted_certificates( :paramtype include_pending: bool :return: An iterator like instance of DeletedCertificateItem :rtype: - ~azure.core.paging.ItemPaged[~azure.keyvault.certificates._generated.models.DeletedCertificateItem] + ~azure.core.paging.ItemPaged[~azure.keyvault.certificates.models.DeletedCertificateItem] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} @@ -3346,7 +3342,7 @@ def prepare_request(next_link=None): def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.DeletedCertificateItem], deserialized["value"]) + list_of_elem = _deserialize(List[_models.DeletedCertificateItem], deserialized.get("value", [])) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, iter(list_of_elem) @@ -3381,7 +3377,7 @@ def get_deleted_certificate(self, certificate_name: str, **kwargs: Any) -> _mode :type certificate_name: str :return: DeletedCertificateBundle. The DeletedCertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.DeletedCertificateBundle + :rtype: ~azure.keyvault.certificates.models.DeletedCertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -3506,7 +3502,7 @@ def recover_deleted_certificate(self, certificate_name: str, **kwargs: Any) -> _ :param certificate_name: The name of the deleted certificate. Required. :type certificate_name: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_operations/_patch.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_operations/_patch.py similarity index 61% rename from sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_operations/_patch.py rename to sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_operations/_patch.py index f7dd32510333..8bcb627aa475 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_operations/_patch.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_operations/_patch.py @@ -1,7 +1,8 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ +# 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. +# -------------------------------------------------------------------------- """Customize generated code here. Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_operations/_patch.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_patch.py similarity index 61% rename from sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_operations/_patch.py rename to sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_patch.py index f7dd32510333..8bcb627aa475 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_operations/_patch.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_patch.py @@ -1,7 +1,8 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ +# 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. +# -------------------------------------------------------------------------- """Customize generated code here. Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_polling.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_polling.py deleted file mode 100644 index 8e597b4480f4..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_polling.py +++ /dev/null @@ -1,61 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -import logging -from typing import Any, Callable, cast, Optional, Union - -from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import HttpTransport -from azure.core.polling import PollingMethod -from azure.keyvault.certificates._models import KeyVaultCertificate, CertificateOperation - -logger = logging.getLogger(__name__) - - -class CreateCertificatePoller(PollingMethod): - def __init__( - self, pipeline_response: PipelineResponse, get_certificate_command: Callable, interval: int = 5 - ) -> None: - self._pipeline_response = pipeline_response - self._command: Optional[Callable] = None - self._resource: Optional[Union[CertificateOperation, KeyVaultCertificate]] = None - self._pending_certificate_op: Optional[CertificateOperation] = None - self._get_certificate_command = get_certificate_command - self._polling_interval = interval - - def _update_status(self) -> None: - self._pending_certificate_op = self._command() if self._command else None - - def initialize(self, client: Any, initial_response: Any, _: Any) -> None: - self._command = client - self._pending_certificate_op = initial_response - - def run(self) -> None: - try: - while not self.finished(): - self._update_status() - if not self.finished(): - # We should always ask the client's transport to sleep, instead of sleeping directly - transport: HttpTransport = cast(HttpTransport, self._pipeline_response.context.transport) - transport.sleep(self._polling_interval) - operation = self._pending_certificate_op - if operation and operation.status and operation.status.lower() == "completed": - self._resource = self._get_certificate_command() - else: - self._resource = self._pending_certificate_op - except Exception as e: - logger.warning(str(e)) - raise - - def finished(self) -> bool: - operation = self._pending_certificate_op - if operation and operation.issuer_name and operation.issuer_name.lower() == "unknown": - return True - return self._pending_certificate_op.status.lower() != "inprogress" # type: ignore - - def resource(self) -> Union[KeyVaultCertificate, CertificateOperation]: - return self._resource # type: ignore - - def status(self) -> str: - return self._pending_certificate_op.status.lower() # type: ignore diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_sdk_moniker.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_sdk_moniker.py deleted file mode 100644 index f7ac28c79e91..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_sdk_moniker.py +++ /dev/null @@ -1,7 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -from ._version import VERSION - -SDK_MONIKER = f"keyvault-certificates/{VERSION}" diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_serialization.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_serialization.py similarity index 98% rename from sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_serialization.py rename to sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_serialization.py index a066e16a64dd..eb86ea23c965 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_serialization.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_serialization.py @@ -1,28 +1,10 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines +# coding=utf-8 # -------------------------------------------------------------------------- -# # Copyright (c) Microsoft Corporation. All rights reserved. -# -# The MIT License (MIT) -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the ""Software""), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -# +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- # pyright: reportUnnecessaryTypeIgnoreComment=false @@ -411,7 +393,7 @@ def from_dict( :param function key_extractors: A key extractor function. :param str content_type: JSON by default, set application/xml if XML. :returns: An instance of this model - :raises: DeserializationError if something went wrong + :raises DeserializationError: if something went wrong :rtype: Self """ deserializer = Deserializer(cls._infer_class_models()) @@ -1361,7 +1343,7 @@ def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument # Iter and wrapped, should have found one node only (the wrap one) if len(children) != 1: raise DeserializationError( - "Tried to deserialize an array not wrapped, and found several nodes '{}'. Maybe you should declare this array as wrapped?".format( # pylint: disable=line-too-long + "Tried to deserialize an array not wrapped, and found several nodes '{}'. Maybe you should declare this array as wrapped?".format( xml_name ) ) diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/__init__.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/__init__.py deleted file mode 100644 index cb088e31ad23..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/__init__.py +++ /dev/null @@ -1,78 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -from typing import Optional -from urllib import parse - -from .challenge_auth_policy import ChallengeAuthPolicy -from .client_base import KeyVaultClientBase -from .http_challenge import HttpChallenge -from . import http_challenge_cache - -HttpChallengeCache = http_challenge_cache # to avoid aliasing pylint error (C4745) - - -__all__ = [ - "ChallengeAuthPolicy", - "HttpChallenge", - "HttpChallengeCache", - "KeyVaultClientBase", -] - - -class KeyVaultResourceId: - """Represents a Key Vault identifier and its parsed contents. - - :param str source_id: The complete identifier received from Key Vault - :param str vault_url: The vault URL - :param str name: The name extracted from the ID - :param str version: The version extracted from the ID - """ - - def __init__( - self, - source_id: str, - vault_url: str, - name: str, - version: "Optional[str]" = None, - ) -> None: - self.source_id = source_id - self.vault_url = vault_url - self.name = name - self.version = version - - -def parse_key_vault_id(source_id: str) -> KeyVaultResourceId: - try: - parsed_uri = parse.urlparse(source_id) - except Exception as exc: - raise ValueError(f"'{source_id}' is not a valid ID") from exc - if not (parsed_uri.scheme and parsed_uri.hostname): - raise ValueError(f"'{source_id}' is not a valid ID") - - path = list(filter(None, parsed_uri.path.split("/"))) - - if len(path) < 2 or len(path) > 3: - raise ValueError(f"'{source_id}' is not a valid ID") - - vault_url = f"{parsed_uri.scheme}://{parsed_uri.hostname}" - if parsed_uri.port: - vault_url += f":{parsed_uri.port}" - - return KeyVaultResourceId( - source_id=source_id, - vault_url=vault_url, - name=path[1], - version=path[2] if len(path) == 3 else None, - ) - - -try: - # pylint:disable=unused-import - from .async_challenge_auth_policy import AsyncChallengeAuthPolicy - from .async_client_base import AsyncKeyVaultClientBase - - __all__.extend(["AsyncChallengeAuthPolicy", "AsyncKeyVaultClientBase"]) -except (SyntaxError, ImportError): - pass diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_polling.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_polling.py deleted file mode 100644 index 5b273249c007..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_polling.py +++ /dev/null @@ -1,143 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -import logging -import threading -import uuid -from typing import Any, Callable, cast, Optional - -from azure.core.exceptions import ResourceNotFoundError, HttpResponseError -from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import HttpTransport -from azure.core.polling import PollingMethod, LROPoller, NoPolling - -from azure.core.tracing.decorator import distributed_trace -from azure.core.tracing.common import with_current_context - -logger = logging.getLogger(__name__) - - -class KeyVaultOperationPoller(LROPoller): - """Poller for long running operations where calling result() doesn't wait for operation to complete. - - :param polling_method: The poller's polling method. - :type polling_method: ~azure.core.polling.PollingMethod - """ - - def __init__(self, polling_method: PollingMethod) -> None: - super(KeyVaultOperationPoller, self).__init__(None, None, lambda *_: None, NoPolling()) - self._polling_method = polling_method - - # pylint: disable=arguments-differ - def result(self) -> "Any": # type: ignore - """Returns a representation of the final resource without waiting for the operation to complete. - - :returns: The deserialized resource of the long running operation - :rtype: Any - - :raises ~azure.core.exceptions.HttpResponseError: Server problem with the query. - """ - return self._polling_method.resource() - - @distributed_trace - def wait(self, timeout: Optional[float] = None) -> None: - """Wait on the long running operation for a number of seconds. - - You can check if this call has ended with timeout with the "done()" method. - - :param float timeout: Period of time to wait for the long running operation to complete (in seconds). - - :raises ~azure.core.exceptions.HttpResponseError: Server problem with the query. - """ - - if not self._polling_method.finished(): - self._done = threading.Event() - self._thread = threading.Thread( - target=with_current_context(self._start), name=f"KeyVaultOperationPoller({uuid.uuid4()})" - ) - self._thread.daemon = True - self._thread.start() - - if self._thread is None: - return - self._thread.join(timeout=timeout) - try: - # Let's handle possible None in forgiveness here - raise self._exception # type: ignore - except TypeError: # Was None - pass - - -class DeleteRecoverPollingMethod(PollingMethod): - """Poller for deleting resources, and recovering deleted resources, in vaults with soft-delete enabled. - - This works by polling for the existence of the deleted or recovered resource. When a resource is deleted, Key Vault - immediately removes it from its collection. However, the resource will not immediately appear in the deleted - collection. Key Vault will therefore respond 404 to GET requests for the deleted resource; when it responds 2xx, - the resource exists in the deleted collection i.e. its deletion is complete. - - Similarly, while recovering a deleted resource, Key Vault will respond 404 to GET requests for the non-deleted - resource; when it responds 2xx, the resource exists in the non-deleted collection, i.e. its recovery is complete. - - :param pipeline_response: The operation's original pipeline response. - :type pipeline_response: PipelineResponse - :param command: A callable to invoke when polling. - :type command: Callable - :param final_resource: The final resource returned by the polling operation. - :type final_resource: Any - :param bool finished: Whether or not the polling operation is completed. - :param int interval: The polling interval, in seconds. - """ - - def __init__( - self, - pipeline_response: PipelineResponse, - command: Callable, - final_resource: Any, - finished: bool, - interval: int = 2, - ) -> None: - self._pipeline_response = pipeline_response - self._command = command - self._resource = final_resource - self._polling_interval = interval - self._finished = finished - - def _update_status(self) -> None: - try: - self._command() - self._finished = True - except ResourceNotFoundError: - pass - except HttpResponseError as e: - # If we are polling on get_deleted_* and we don't have get permissions, we will get - # ResourceNotFoundError until the resource is recovered, at which point we'll get a 403. - if e.status_code == 403: - self._finished = True - else: - raise - - def initialize(self, client: Any, initial_response: Any, deserialization_callback: Callable) -> None: - pass - - def run(self) -> None: - try: - while not self.finished(): - self._update_status() - if not self.finished(): - # We should always ask the client's transport to sleep, instead of sleeping directly - transport: HttpTransport = cast(HttpTransport, self._pipeline_response.context.transport) - transport.sleep(self._polling_interval) - except Exception as e: - logger.warning(str(e)) - raise - - def finished(self) -> bool: - return self._finished - - def resource(self) -> Any: - return self._resource - - def status(self) -> str: - return "finished" if self._finished else "polling" diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_polling_async.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_polling_async.py deleted file mode 100644 index 7ba06ecf5767..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/_polling_async.py +++ /dev/null @@ -1,87 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -import logging -from typing import Any, Callable, cast - -from azure.core.exceptions import ResourceNotFoundError, HttpResponseError -from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import AsyncHttpTransport -from azure.core.polling import AsyncPollingMethod - -logger = logging.getLogger(__name__) - - -class AsyncDeleteRecoverPollingMethod(AsyncPollingMethod): - """Poller for deleting resources, and recovering deleted resources, in vaults with soft-delete enabled. - - This works by polling for the existence of the deleted or recovered resource. When a resource is deleted, Key Vault - immediately removes it from its collection. However, the resource will not immediately appear in the deleted - collection. Key Vault will therefore respond 404 to GET requests for the deleted resource; when it responds 2xx, - the resource exists in the deleted collection i.e. its deletion is complete. - - Similarly, while recovering a deleted resource, Key Vault will respond 404 to GET requests for the non-deleted - resource; when it responds 2xx, the resource exists in the non-deleted collection, i.e. its recovery is complete. - - :param pipeline_response: The operation's original pipeline response. - :type pipeline_response: PipelineResponse - :param command: An awaitable to invoke when polling. - :type command: Callable - :param final_resource: The final resource returned by the polling operation. - :type final_resource: Any - :param bool finished: Whether or not the polling operation is completed. - :param int interval: The polling interval, in seconds. - """ - - def __init__( - self, - pipeline_response: PipelineResponse, - command: Callable, - final_resource: Any, - finished: bool, - interval: int = 2, - ) -> None: - self._pipeline_response = pipeline_response - self._command = command - self._resource = final_resource - self._polling_interval = interval - self._finished = finished - - def initialize(self, client, initial_response, deserialization_callback): - pass - - async def _update_status(self) -> None: - try: - await self._command() - self._finished = True - except ResourceNotFoundError: - pass - except HttpResponseError as e: - # If we are polling on get_deleted_* and we don't have get permissions, we will get - # ResourceNotFoundError until the resource is recovered, at which point we'll get a 403. - if e.status_code == 403: - self._finished = True - else: - raise - - async def run(self) -> None: - try: - while not self.finished(): - await self._update_status() - if not self.finished(): - # We should always ask the client's transport to sleep, instead of sleeping directly - transport: AsyncHttpTransport = cast(AsyncHttpTransport, self._pipeline_response.context.transport) - await transport.sleep(self._polling_interval) - except Exception as e: - logger.warning(str(e)) - raise - - def finished(self) -> bool: - return self._finished - - def resource(self) -> Any: - return self._resource - - def status(self) -> str: - return "finished" if self._finished else "polling" diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/async_challenge_auth_policy.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/async_challenge_auth_policy.py deleted file mode 100644 index 0f84607e3ccd..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/async_challenge_auth_policy.py +++ /dev/null @@ -1,262 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -"""Policy implementing Key Vault's challenge authentication protocol. - -Normally the protocol is only used for the client's first service request, upon which: -1. The challenge authentication policy sends a copy of the request, without authorization or content. -2. Key Vault responds 401 with a header (the 'challenge') detailing how the client should authenticate such a request. -3. The policy authenticates according to the challenge and sends the original request with authorization. - -The policy caches the challenge and thus knows how to authenticate future requests. However, authentication -requirements can change. For example, a vault may move to a new tenant. In such a case the policy will attempt the -protocol again. -""" - -from copy import deepcopy -import sys -import time -from typing import Any, Callable, cast, Optional, overload, TypeVar, Union -from urllib.parse import urlparse - -from typing_extensions import ParamSpec - -from azure.core.credentials import AccessToken, AccessTokenInfo, TokenRequestOptions -from azure.core.credentials_async import AsyncSupportsTokenInfo, AsyncTokenCredential, AsyncTokenProvider -from azure.core.pipeline import PipelineRequest, PipelineResponse -from azure.core.pipeline.policies import AsyncBearerTokenCredentialPolicy -from azure.core.rest import AsyncHttpResponse, HttpRequest - -from .http_challenge import HttpChallenge -from . import http_challenge_cache as ChallengeCache -from .challenge_auth_policy import _enforce_tls, _has_claims, _update_challenge - -if sys.version_info < (3, 9): - from typing import Awaitable -else: - from collections.abc import Awaitable - - -P = ParamSpec("P") -T = TypeVar("T") - - -@overload -async def await_result(func: Callable[P, Awaitable[T]], *args: P.args, **kwargs: P.kwargs) -> T: ... - - -@overload -async def await_result(func: Callable[P, T], *args: P.args, **kwargs: P.kwargs) -> T: ... - - -async def await_result(func: Callable[P, Union[T, Awaitable[T]]], *args: P.args, **kwargs: P.kwargs) -> T: - """If func returns an awaitable, await it. - - :param func: The function to run. - :type func: callable - :param args: The positional arguments to pass to the function. - :type args: list - :rtype: any - :return: The result of the function - """ - result = func(*args, **kwargs) - if isinstance(result, Awaitable): - return await result - return result - - - -class AsyncChallengeAuthPolicy(AsyncBearerTokenCredentialPolicy): - """Policy for handling HTTP authentication challenges. - - :param credential: An object which can provide an access token for the vault, such as a credential from - :mod:`azure.identity.aio` - :type credential: ~azure.core.credentials_async.AsyncTokenProvider - """ - - def __init__(self, credential: AsyncTokenProvider, *scopes: str, **kwargs: Any) -> None: - # Pass `enable_cae` so `enable_cae=True` is always passed through self.authorize_request - super().__init__(credential, *scopes, enable_cae=True, **kwargs) - self._credential: AsyncTokenProvider = credential - self._token: Optional[Union["AccessToken", "AccessTokenInfo"]] = None - self._verify_challenge_resource = kwargs.pop("verify_challenge_resource", True) - self._request_copy: Optional[HttpRequest] = None - - async def send( - self, request: PipelineRequest[HttpRequest] - ) -> PipelineResponse[HttpRequest, AsyncHttpResponse]: - """Authorize request with a bearer token and send it to the next policy. - - We implement this method to account for the valid scenario where a Key Vault authentication challenge is - immediately followed by a CAE claims challenge. The base class's implementation would return the second 401 to - the caller, but we should handle that second challenge as well (and only return any third 401 response). - - :param request: The pipeline request object - :type request: ~azure.core.pipeline.PipelineRequest - :return: The pipeline response object - :rtype: ~azure.core.pipeline.PipelineResponse - """ - await await_result(self.on_request, request) - response: PipelineResponse[HttpRequest, AsyncHttpResponse] - try: - response = await self.next.send(request) - except Exception: # pylint:disable=broad-except - await await_result(self.on_exception, request) - raise - await await_result(self.on_response, request, response) - - if response.http_response.status_code == 401: - return await self.handle_challenge_flow(request, response) - return response - - async def handle_challenge_flow( - self, - request: PipelineRequest[HttpRequest], - response: PipelineResponse[HttpRequest, AsyncHttpResponse], - consecutive_challenge: bool = False, - ) -> PipelineResponse[HttpRequest, AsyncHttpResponse]: - """Handle the challenge flow of Key Vault and CAE authentication. - - :param request: The pipeline request object - :type request: ~azure.core.pipeline.PipelineRequest - :param response: The pipeline response object - :type response: ~azure.core.pipeline.PipelineResponse - :param bool consecutive_challenge: Whether the challenge is arriving immediately after another challenge. - Consecutive challenges can only be valid if a Key Vault challenge is followed by a CAE claims challenge. - True if the preceding challenge was a Key Vault challenge; False otherwise. - - :return: The pipeline response object - :rtype: ~azure.core.pipeline.PipelineResponse - """ - self._token = None # any cached token is invalid - if "WWW-Authenticate" in response.http_response.headers: - # If the previous challenge was a KV challenge and this one is too, return the 401 - claims_challenge = _has_claims(response.http_response.headers["WWW-Authenticate"]) - if consecutive_challenge and not claims_challenge: - return response - - request_authorized = await self.on_challenge(request, response) - if request_authorized: - # if we receive a challenge response, we retrieve a new token - # which matches the new target. In this case, we don't want to remove - # token from the request so clear the 'insecure_domain_change' tag - request.context.options.pop("insecure_domain_change", False) - try: - response = await self.next.send(request) - except Exception: # pylint:disable=broad-except - await await_result(self.on_exception, request) - raise - - # If consecutive_challenge == True, this could be a third consecutive 401 - if response.http_response.status_code == 401 and not consecutive_challenge: - # If the previous challenge wasn't from CAE, we can try this function one more time - if not claims_challenge: - return await self.handle_challenge_flow(request, response, consecutive_challenge=True) - await await_result(self.on_response, request, response) - return response - - - async def on_request(self, request: PipelineRequest) -> None: - _enforce_tls(request) - challenge = ChallengeCache.get_challenge_for_url(request.http_request.url) - if challenge: - # Note that if the vault has moved to a new tenant since our last request for it, this request will fail. - if self._need_new_token(): - # azure-identity credentials require an AADv2 scope but the challenge may specify an AADv1 resource - scope = challenge.get_scope() or challenge.get_resource() + "/.default" - await self._request_kv_token(scope, challenge) - - bearer_token = cast(Union[AccessToken, AccessTokenInfo], self._token).token - request.http_request.headers["Authorization"] = f"Bearer {bearer_token}" - return - - # else: discover authentication information by eliciting a challenge from Key Vault. Remove any request data, - # saving it for later. Key Vault will reject the request as unauthorized and respond with a challenge. - # on_challenge will parse that challenge, use the original request including the body, authorize the - # request, and tell super to send it again. - if request.http_request.content: - self._request_copy = request.http_request - bodiless_request = HttpRequest( - method=request.http_request.method, - url=request.http_request.url, - headers=deepcopy(request.http_request.headers), - ) - bodiless_request.headers["Content-Length"] = "0" - request.http_request = bodiless_request - - async def on_challenge(self, request: PipelineRequest, response: PipelineResponse) -> bool: - try: - # CAE challenges may not include a scope or tenant; cache from the previous challenge to use if necessary - old_scope: Optional[str] = None - old_tenant: Optional[str] = None - cached_challenge = ChallengeCache.get_challenge_for_url(request.http_request.url) - if cached_challenge: - old_scope = cached_challenge.get_scope() or cached_challenge.get_resource() + "/.default" - old_tenant = cached_challenge.tenant_id - - challenge = _update_challenge(request, response) - # CAE challenges may not include a scope or tenant; use the previous challenge's values if necessary - if challenge.claims and old_scope: - challenge._parameters["scope"] = old_scope # pylint:disable=protected-access - challenge.tenant_id = old_tenant - # azure-identity credentials require an AADv2 scope but the challenge may specify an AADv1 resource - scope = challenge.get_scope() or challenge.get_resource() + "/.default" - except ValueError: - return False - - if self._verify_challenge_resource: - resource_domain = urlparse(scope).netloc - if not resource_domain: - raise ValueError(f"The challenge contains invalid scope '{scope}'.") - - request_domain = urlparse(request.http_request.url).netloc - if not request_domain.lower().endswith(f".{resource_domain.lower()}"): - raise ValueError( - f"The challenge resource '{resource_domain}' does not match the requested domain. Pass " - "`verify_challenge_resource=False` to your client's constructor to disable this verification. " - "See https://aka.ms/azsdk/blog/vault-uri for more information." - ) - - # If we had created a request copy in on_request, use it now to send along the original body content - if self._request_copy: - request.http_request = self._request_copy - - # The tenant parsed from AD FS challenges is "adfs"; we don't actually need a tenant for AD FS authentication - # For AD FS we skip cross-tenant authentication per https://github.com/Azure/azure-sdk-for-python/issues/28648 - if challenge.tenant_id and challenge.tenant_id.lower().endswith("adfs"): - await self.authorize_request(request, scope, claims=challenge.claims) - else: - await self.authorize_request( - request, scope, claims=challenge.claims, tenant_id=challenge.tenant_id - ) - - return True - - def _need_new_token(self) -> bool: - now = time.time() - refresh_on = getattr(self._token, "refresh_on", None) - return not self._token or (refresh_on and refresh_on <= now) or self._token.expires_on - now < 300 - - async def _request_kv_token(self, scope: str, challenge: HttpChallenge) -> None: - """Implementation of BearerTokenCredentialPolicy's _request_token method, but specific to Key Vault. - - :param str scope: The scope for which to request a token. - :param challenge: The challenge for the request being made. - :type challenge: HttpChallenge - """ - # Exclude tenant for AD FS authentication - exclude_tenant = challenge.tenant_id and challenge.tenant_id.lower().endswith("adfs") - # The AsyncSupportsTokenInfo protocol needs TokenRequestOptions for token requests instead of kwargs - if hasattr(self._credential, "get_token_info"): - options: TokenRequestOptions = {"enable_cae": True} - if challenge.tenant_id and not exclude_tenant: - options["tenant_id"] = challenge.tenant_id - self._token = await cast(AsyncSupportsTokenInfo, self._credential).get_token_info(scope, options=options) - else: - if exclude_tenant: - self._token = await self._credential.get_token(scope, enable_cae=True) - else: - self._token = await cast(AsyncTokenCredential, self._credential).get_token( - scope, tenant_id=challenge.tenant_id, enable_cae=True - ) diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/async_client_base.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/async_client_base.py deleted file mode 100644 index 3e1a2bec8fc4..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/async_client_base.py +++ /dev/null @@ -1,117 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -import sys -from typing import Any - -from azure.core.credentials_async import AsyncTokenCredential -from azure.core.pipeline.policies import HttpLoggingPolicy -from azure.core.rest import AsyncHttpResponse, HttpRequest -from azure.core.tracing.decorator_async import distributed_trace_async - -from . import AsyncChallengeAuthPolicy -from .client_base import ApiVersion, DEFAULT_VERSION, _format_api_version, _SERIALIZER -from .._sdk_moniker import SDK_MONIKER -from .._generated.aio import KeyVaultClient as _KeyVaultClient -from .._generated import models as _models - -if sys.version_info < (3, 9): - from typing import Awaitable -else: - from collections.abc import Awaitable - - -class AsyncKeyVaultClientBase(object): - # pylint:disable=protected-access - def __init__(self, vault_url: str, credential: AsyncTokenCredential, **kwargs: Any) -> None: - if not credential: - raise ValueError( - "credential should be an object supporting the AsyncTokenCredential protocol, " - "such as a credential from azure-identity" - ) - if not vault_url: - raise ValueError("vault_url must be the URL of an Azure Key Vault") - - try: - self.api_version = kwargs.pop("api_version", DEFAULT_VERSION) - # If API version was provided as an enum value, need to make a plain string for 3.11 compatibility - if hasattr(self.api_version, "value"): - self.api_version = self.api_version.value - self._vault_url = vault_url.strip(" /") - - client = kwargs.get("generated_client") - if client: - # caller provided a configured client -> only models left to initialize - self._client = client - models = kwargs.get("generated_models") - self._models = models or _models - return - - http_logging_policy = HttpLoggingPolicy(**kwargs) - http_logging_policy.allowed_header_names.update( - {"x-ms-keyvault-network-info", "x-ms-keyvault-region", "x-ms-keyvault-service-version"} - ) - - verify_challenge = kwargs.pop("verify_challenge_resource", True) - self._client = _KeyVaultClient( - credential=credential, - vault_base_url=self._vault_url, - api_version=self.api_version, - authentication_policy=AsyncChallengeAuthPolicy(credential, verify_challenge_resource=verify_challenge), - sdk_moniker=SDK_MONIKER, - http_logging_policy=http_logging_policy, - **kwargs, - ) - self._models = _models - except ValueError as exc: - # Ignore pyright error that comes from not identifying ApiVersion as an iterable enum - raise NotImplementedError( - f"This package doesn't support API version '{self.api_version}'. " - + "Supported versions: " - + f"{', '.join(v.value for v in ApiVersion)}" # pyright: ignore[reportGeneralTypeIssues] - ) from exc - - @property - def vault_url(self) -> str: - return self._vault_url - - async def __aenter__(self) -> "AsyncKeyVaultClientBase": - await self._client.__aenter__() - return self - - async def __aexit__(self, *args: Any) -> None: - await self._client.__aexit__(*args) - - async def close(self) -> None: - """Close sockets opened by the client. - - Calling this method is unnecessary when using the client as a context manager. - """ - await self._client.close() - - @distributed_trace_async - def send_request( - self, request: HttpRequest, *, stream: bool = False, **kwargs: Any - ) -> Awaitable[AsyncHttpResponse]: - """Runs a network request using the client's existing pipeline. - - The request URL can be relative to the vault URL. The service API version used for the request is the same as - the client's unless otherwise specified. This method does not raise if the response is an error; to raise an - exception, call `raise_for_status()` on the returned response object. For more information about how to send - custom requests with this method, see https://aka.ms/azsdk/dpcodegen/python/send_request. - - :param request: The network request you want to make. - :type request: ~azure.core.rest.HttpRequest - - :keyword bool stream: Whether the response payload will be streamed. Defaults to False. - - :return: The response of your network call. Does not do error handling on your response. - :rtype: ~azure.core.rest.AsyncHttpResponse - """ - request_copy = _format_api_version(request, self.api_version) - path_format_arguments = { - "vaultBaseUrl": _SERIALIZER.url("vault_base_url", self._vault_url, "str", skip_quote=True), - } - request_copy.url = self._client._client.format_url(request_copy.url, **path_format_arguments) - return self._client._client.send_request(request_copy, stream=stream, **kwargs) diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/challenge_auth_policy.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/challenge_auth_policy.py deleted file mode 100644 index eb4073d0e699..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/challenge_auth_policy.py +++ /dev/null @@ -1,270 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -"""Policy implementing Key Vault's challenge authentication protocol. - -Normally the protocol is only used for the client's first service request, upon which: -1. The challenge authentication policy sends a copy of the request, without authorization or content. -2. Key Vault responds 401 with a header (the 'challenge') detailing how the client should authenticate such a request. -3. The policy authenticates according to the challenge and sends the original request with authorization. - -The policy caches the challenge and thus knows how to authenticate future requests. However, authentication -requirements can change. For example, a vault may move to a new tenant. In such a case the policy will attempt the -protocol again. -""" - -from copy import deepcopy -import time -from typing import Any, cast, Optional, Union -from urllib.parse import urlparse - -from azure.core.credentials import ( - AccessToken, - AccessTokenInfo, - TokenCredential, - TokenProvider, - TokenRequestOptions, - SupportsTokenInfo, -) -from azure.core.exceptions import ServiceRequestError -from azure.core.pipeline import PipelineRequest, PipelineResponse -from azure.core.pipeline.policies import BearerTokenCredentialPolicy -from azure.core.rest import HttpRequest, HttpResponse - -from .http_challenge import HttpChallenge -from . import http_challenge_cache as ChallengeCache - - -def _enforce_tls(request: PipelineRequest) -> None: - if not request.http_request.url.lower().startswith("https"): - raise ServiceRequestError( - "Bearer token authentication is not permitted for non-TLS protected (non-https) URLs." - ) - - -def _has_claims(challenge: str) -> bool: - """Check if a challenge header contains claims. - - :param challenge: The challenge header to check. - :type challenge: str - - :returns: True if the challenge contains claims; False otherwise. - :rtype: bool - """ - # Split the challenge into its scheme and parameters, then check if any parameter contains claims - split_challenge = challenge.strip().split(" ", 1) - return any("claims=" in item for item in split_challenge[1].split(",")) - - -def _update_challenge(request: PipelineRequest, challenger: PipelineResponse) -> HttpChallenge: - """Parse challenge from a challenge response, cache it, and return it. - - :param request: The pipeline request that prompted the challenge response. - :type request: ~azure.core.pipeline.PipelineRequest - :param challenger: The pipeline response containing the authentication challenge. - :type challenger: ~azure.core.pipeline.PipelineResponse - - :returns: An HttpChallenge object representing the authentication challenge. - :rtype: HttpChallenge - """ - - challenge = HttpChallenge( - request.http_request.url, - challenger.http_response.headers.get("WWW-Authenticate"), - response_headers=challenger.http_response.headers, - ) - ChallengeCache.set_challenge_for_url(request.http_request.url, challenge) - return challenge - - -class ChallengeAuthPolicy(BearerTokenCredentialPolicy): - """Policy for handling HTTP authentication challenges. - - :param credential: An object which can provide an access token for the vault, such as a credential from - :mod:`azure.identity` - :type credential: ~azure.core.credentials.TokenProvider - :param str scopes: Lets you specify the type of access needed. - """ - - def __init__(self, credential: TokenProvider, *scopes: str, **kwargs: Any) -> None: - # Pass `enable_cae` so `enable_cae=True` is always passed through self.authorize_request - super(ChallengeAuthPolicy, self).__init__(credential, *scopes, enable_cae=True, **kwargs) - self._credential: TokenProvider = credential - self._token: Optional[Union["AccessToken", "AccessTokenInfo"]] = None - self._verify_challenge_resource = kwargs.pop("verify_challenge_resource", True) - self._request_copy: Optional[HttpRequest] = None - - def send(self, request: PipelineRequest[HttpRequest]) -> PipelineResponse[HttpRequest, HttpResponse]: - """Authorize request with a bearer token and send it to the next policy. - - We implement this method to account for the valid scenario where a Key Vault authentication challenge is - immediately followed by a CAE claims challenge. The base class's implementation would return the second 401 to - the caller, but we should handle that second challenge as well (and only return any third 401 response). - - :param request: The pipeline request object - :type request: ~azure.core.pipeline.PipelineRequest - - :return: The pipeline response object - :rtype: ~azure.core.pipeline.PipelineResponse - """ - self.on_request(request) - try: - response = self.next.send(request) - except Exception: # pylint:disable=broad-except - self.on_exception(request) - raise - - self.on_response(request, response) - if response.http_response.status_code == 401: - return self.handle_challenge_flow(request, response) - return response - - def handle_challenge_flow( - self, - request: PipelineRequest[HttpRequest], - response: PipelineResponse[HttpRequest, HttpResponse], - consecutive_challenge: bool = False, - ) -> PipelineResponse[HttpRequest, HttpResponse]: - """Handle the challenge flow of Key Vault and CAE authentication. - - :param request: The pipeline request object - :type request: ~azure.core.pipeline.PipelineRequest - :param response: The pipeline response object - :type response: ~azure.core.pipeline.PipelineResponse - :param bool consecutive_challenge: Whether the challenge is arriving immediately after another challenge. - Consecutive challenges can only be valid if a Key Vault challenge is followed by a CAE claims challenge. - True if the preceding challenge was a Key Vault challenge; False otherwise. - - :return: The pipeline response object - :rtype: ~azure.core.pipeline.PipelineResponse - """ - self._token = None # any cached token is invalid - if "WWW-Authenticate" in response.http_response.headers: - # If the previous challenge was a KV challenge and this one is too, return the 401 - claims_challenge = _has_claims(response.http_response.headers["WWW-Authenticate"]) - if consecutive_challenge and not claims_challenge: - return response - - request_authorized = self.on_challenge(request, response) - if request_authorized: - # if we receive a challenge response, we retrieve a new token - # which matches the new target. In this case, we don't want to remove - # token from the request so clear the 'insecure_domain_change' tag - request.context.options.pop("insecure_domain_change", False) - try: - response = self.next.send(request) - except Exception: # pylint:disable=broad-except - self.on_exception(request) - raise - - # If consecutive_challenge == True, this could be a third consecutive 401 - if response.http_response.status_code == 401 and not consecutive_challenge: - # If the previous challenge wasn't from CAE, we can try this function one more time - if not claims_challenge: - return self.handle_challenge_flow(request, response, consecutive_challenge=True) - self.on_response(request, response) - return response - - def on_request(self, request: PipelineRequest) -> None: - _enforce_tls(request) - challenge = ChallengeCache.get_challenge_for_url(request.http_request.url) - if challenge: - # Note that if the vault has moved to a new tenant since our last request for it, this request will fail. - if self._need_new_token: - # azure-identity credentials require an AADv2 scope but the challenge may specify an AADv1 resource - scope = challenge.get_scope() or challenge.get_resource() + "/.default" - self._request_kv_token(scope, challenge) - - bearer_token = cast(Union["AccessToken", "AccessTokenInfo"], self._token).token - request.http_request.headers["Authorization"] = f"Bearer {bearer_token}" - return - - # else: discover authentication information by eliciting a challenge from Key Vault. Remove any request data, - # saving it for later. Key Vault will reject the request as unauthorized and respond with a challenge. - # on_challenge will parse that challenge, use the original request including the body, authorize the - # request, and tell super to send it again. - if request.http_request.content: - self._request_copy = request.http_request - bodiless_request = HttpRequest( - method=request.http_request.method, - url=request.http_request.url, - headers=deepcopy(request.http_request.headers), - ) - bodiless_request.headers["Content-Length"] = "0" - request.http_request = bodiless_request - - def on_challenge(self, request: PipelineRequest, response: PipelineResponse) -> bool: - try: - # CAE challenges may not include a scope or tenant; cache from the previous challenge to use if necessary - old_scope: Optional[str] = None - old_tenant: Optional[str] = None - cached_challenge = ChallengeCache.get_challenge_for_url(request.http_request.url) - if cached_challenge: - old_scope = cached_challenge.get_scope() or cached_challenge.get_resource() + "/.default" - old_tenant = cached_challenge.tenant_id - - challenge = _update_challenge(request, response) - # CAE challenges may not include a scope or tenant; use the previous challenge's values if necessary - if challenge.claims and old_scope: - challenge._parameters["scope"] = old_scope # pylint:disable=protected-access - challenge.tenant_id = old_tenant - # azure-identity credentials require an AADv2 scope but the challenge may specify an AADv1 resource - scope = challenge.get_scope() or challenge.get_resource() + "/.default" - except ValueError: - return False - - if self._verify_challenge_resource: - resource_domain = urlparse(scope).netloc - if not resource_domain: - raise ValueError(f"The challenge contains invalid scope '{scope}'.") - - request_domain = urlparse(request.http_request.url).netloc - if not request_domain.lower().endswith(f".{resource_domain.lower()}"): - raise ValueError( - f"The challenge resource '{resource_domain}' does not match the requested domain. Pass " - "`verify_challenge_resource=False` to your client's constructor to disable this verification. " - "See https://aka.ms/azsdk/blog/vault-uri for more information." - ) - - # If we had created a request copy in on_request, use it now to send along the original body content - if self._request_copy: - request.http_request = self._request_copy - - # The tenant parsed from AD FS challenges is "adfs"; we don't actually need a tenant for AD FS authentication - # For AD FS we skip cross-tenant authentication per https://github.com/Azure/azure-sdk-for-python/issues/28648 - if challenge.tenant_id and challenge.tenant_id.lower().endswith("adfs"): - self.authorize_request(request, scope, claims=challenge.claims) - else: - self.authorize_request(request, scope, claims=challenge.claims, tenant_id=challenge.tenant_id) - - return True - - @property - def _need_new_token(self) -> bool: - now = time.time() - refresh_on = getattr(self._token, "refresh_on", None) - return not self._token or (refresh_on and refresh_on <= now) or self._token.expires_on - now < 300 - - def _request_kv_token(self, scope: str, challenge: HttpChallenge) -> None: - """Implementation of BearerTokenCredentialPolicy's _request_token method, but specific to Key Vault. - - :param str scope: The scope for which to request a token. - :param challenge: The challenge for the request being made. - :type challenge: HttpChallenge - """ - # Exclude tenant for AD FS authentication - exclude_tenant = challenge.tenant_id and challenge.tenant_id.lower().endswith("adfs") - # The SupportsTokenInfo protocol needs TokenRequestOptions for token requests instead of kwargs - if hasattr(self._credential, "get_token_info"): - options: TokenRequestOptions = {"enable_cae": True} - if challenge.tenant_id and not exclude_tenant: - options["tenant_id"] = challenge.tenant_id - self._token = cast(SupportsTokenInfo, self._credential).get_token_info(scope, options=options) - else: - if exclude_tenant: - self._token = self._credential.get_token(scope, enable_cae=True) - else: - self._token = cast(TokenCredential, self._credential).get_token( - scope, tenant_id=challenge.tenant_id, enable_cae=True - ) diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/client_base.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/client_base.py deleted file mode 100644 index 38ad2ee6b385..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/client_base.py +++ /dev/null @@ -1,161 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -from copy import deepcopy -from enum import Enum -from typing import Any -from urllib.parse import urlparse - -from azure.core import CaseInsensitiveEnumMeta -from azure.core.credentials import TokenCredential -from azure.core.pipeline.policies import HttpLoggingPolicy -from azure.core.rest import HttpRequest, HttpResponse -from azure.core.tracing.decorator import distributed_trace - -from . import ChallengeAuthPolicy -from .._generated import KeyVaultClient as _KeyVaultClient -from .._generated import models as _models -from .._generated._serialization import Serializer -from .._sdk_moniker import SDK_MONIKER - - -class ApiVersion(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """Key Vault API versions supported by this package""" - - #: this is the default version - V7_6_PREVIEW_2 = "7.6-preview.2" - V7_5 = "7.5" - V7_4 = "7.4" - V7_3 = "7.3" - V7_2 = "7.2" - V7_1 = "7.1" - V7_0 = "7.0" - V2016_10_01 = "2016-10-01" - - -DEFAULT_VERSION = ApiVersion.V7_6_PREVIEW_2 - -_SERIALIZER = Serializer() -_SERIALIZER.client_side_validation = False - - -def _format_api_version(request: HttpRequest, api_version: str) -> HttpRequest: - """Returns a request copy that includes an api-version query parameter if one wasn't originally present. - - :param request: The HTTP request being sent. - :type request: ~azure.core.rest.HttpRequest - :param str api_version: The service API version that the request should include. - - :returns: A copy of the request that includes an api-version query parameter. - :rtype: azure.core.rest.HttpRequest - """ - request_copy = deepcopy(request) - params = {"api-version": api_version} # By default, we want to use the client's API version - query = urlparse(request_copy.url).query - - if query: - request_copy.url = request_copy.url.partition("?")[0] - existing_params = {p[0]: p[-1] for p in [p.partition("=") for p in query.split("&")]} - params.update(existing_params) # If an api-version was provided, this will overwrite our default - - # Reconstruct the query parameters onto the URL - query_params = [] - for k, v in params.items(): - query_params.append("{}={}".format(k, v)) - query = "?" + "&".join(query_params) - request_copy.url = request_copy.url + query - return request_copy - - -class KeyVaultClientBase(object): - # pylint:disable=protected-access - def __init__(self, vault_url: str, credential: TokenCredential, **kwargs: Any) -> None: - if not credential: - raise ValueError( - "credential should be an object supporting the TokenCredential protocol, " - "such as a credential from azure-identity" - ) - if not vault_url: - raise ValueError("vault_url must be the URL of an Azure Key Vault") - - try: - self.api_version = kwargs.pop("api_version", DEFAULT_VERSION) - # If API version was provided as an enum value, need to make a plain string for 3.11 compatibility - if hasattr(self.api_version, "value"): - self.api_version = self.api_version.value - self._vault_url = vault_url.strip(" /") - - client = kwargs.get("generated_client") - if client: - # caller provided a configured client -> only models left to initialize - self._client = client - models = kwargs.get("generated_models") - self._models = models or _models - return - - http_logging_policy = HttpLoggingPolicy(**kwargs) - http_logging_policy.allowed_header_names.update( - {"x-ms-keyvault-network-info", "x-ms-keyvault-region", "x-ms-keyvault-service-version"} - ) - - verify_challenge = kwargs.pop("verify_challenge_resource", True) - self._client = _KeyVaultClient( - credential=credential, - vault_base_url=self._vault_url, - api_version=self.api_version, - authentication_policy=ChallengeAuthPolicy(credential, verify_challenge_resource=verify_challenge), - sdk_moniker=SDK_MONIKER, - http_logging_policy=http_logging_policy, - **kwargs, - ) - self._models = _models - except ValueError as exc: - # Ignore pyright error that comes from not identifying ApiVersion as an iterable enum - raise NotImplementedError( - f"This package doesn't support API version '{self.api_version}'. " - + "Supported versions: " - + f"{', '.join(v.value for v in ApiVersion)}" # pyright: ignore[reportGeneralTypeIssues] - ) from exc - - @property - def vault_url(self) -> str: - return self._vault_url - - def __enter__(self) -> "KeyVaultClientBase": - self._client.__enter__() - return self - - def __exit__(self, *args: Any) -> None: - self._client.__exit__(*args) - - def close(self) -> None: - """Close sockets opened by the client. - - Calling this method is unnecessary when using the client as a context manager. - """ - self._client.close() - - @distributed_trace - def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: - """Runs a network request using the client's existing pipeline. - - The request URL can be relative to the vault URL. The service API version used for the request is the same as - the client's unless otherwise specified. This method does not raise if the response is an error; to raise an - exception, call `raise_for_status()` on the returned response object. For more information about how to send - custom requests with this method, see https://aka.ms/azsdk/dpcodegen/python/send_request. - - :param request: The network request you want to make. - :type request: ~azure.core.rest.HttpRequest - - :keyword bool stream: Whether the response payload will be streamed. Defaults to False. - - :return: The response of your network call. Does not do error handling on your response. - :rtype: ~azure.core.rest.HttpResponse - """ - request_copy = _format_api_version(request, self.api_version) - path_format_arguments = { - "vaultBaseUrl": _SERIALIZER.url("vault_base_url", self._vault_url, "str", skip_quote=True), - } - request_copy.url = self._client._client.format_url(request_copy.url, **path_format_arguments) - return self._client._client.send_request(request_copy, stream=stream, **kwargs) diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/http_challenge.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/http_challenge.py deleted file mode 100644 index 8b14b999de78..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/http_challenge.py +++ /dev/null @@ -1,186 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -import base64 -from typing import Dict, MutableMapping, Optional -from urllib import parse - - -class HttpChallenge(object): - """An object representing the content of a Key Vault authentication challenge. - - :param str request_uri: The URI of the HTTP request that prompted this challenge. - :param str challenge: The WWW-Authenticate header of the challenge response. - :param response_headers: Optional. The headers attached to the challenge response. - :type response_headers: MutableMapping[str, str] or None - """ - - def __init__( - self, request_uri: str, challenge: str, response_headers: "Optional[MutableMapping[str, str]]" = None - ) -> None: - """Parses an HTTP WWW-Authentication Bearer challenge from a server. - - Example challenge with claims: - Bearer authorization="https://login.windows-ppe.net/", error="invalid_token", - error_description="User session has been revoked", - claims="eyJhY2Nlc3NfdG9rZW4iOnsibmJmIjp7ImVzc2VudGlhbCI6dHJ1ZSwgInZhbHVlIjoiMTYwMzc0MjgwMCJ9fX0=" - """ - self.source_authority = self._validate_request_uri(request_uri) - self.source_uri = request_uri - self._parameters: "Dict[str, str]" = {} - - # get the scheme of the challenge and remove from the challenge string - trimmed_challenge = self._validate_challenge(challenge) - split_challenge = trimmed_challenge.split(" ", 1) - self.scheme = split_challenge[0] - trimmed_challenge = split_challenge[1] - - self.claims = None - # split trimmed challenge into comma-separated name=value pairs. Values are expected - # to be surrounded by quotes which are stripped here. - for item in trimmed_challenge.split(","): - # Special case for claims, which can contain = symbols as padding. Assume at most one claim per challenge - if "claims=" in item: - encoded_claims = item[item.index("=") + 1 :].strip(" \"'") - padding_needed = -len(encoded_claims) % 4 - try: - decoded_claims = base64.urlsafe_b64decode(encoded_claims + "=" * padding_needed).decode() - self.claims = decoded_claims - except Exception: # pylint:disable=broad-except - continue - # process name=value pairs - else: - comps = item.split("=") - if len(comps) == 2: - key = comps[0].strip(' "') - value = comps[1].strip(' "') - if key: - self._parameters[key] = value - - # minimum set of parameters - if not self._parameters: - raise ValueError("Invalid challenge parameters") - - # must specify authorization or authorization_uri - if "authorization" not in self._parameters and "authorization_uri" not in self._parameters: - raise ValueError("Invalid challenge parameters") - - authorization_uri = self.get_authorization_server() - # the authorization server URI should look something like https://login.windows.net/tenant-id - raw_uri_path = str(parse.urlparse(authorization_uri).path) - uri_path = raw_uri_path.lstrip("/") - self.tenant_id = uri_path.split("/", maxsplit=1)[0] or None - - # if the response headers were supplied - if response_headers: - # get the message signing key and message key encryption key from the headers - self.server_signature_key = response_headers.get("x-ms-message-signing-key", None) - self.server_encryption_key = response_headers.get("x-ms-message-encryption-key", None) - - def is_bearer_challenge(self) -> bool: - """Tests whether the HttpChallenge is a Bearer challenge. - - :returns: True if the challenge is a Bearer challenge; False otherwise. - :rtype: bool - """ - if not self.scheme: - return False - - return self.scheme.lower() == "bearer" - - def is_pop_challenge(self) -> bool: - """Tests whether the HttpChallenge is a proof of possession challenge. - - :returns: True if the challenge is a proof of possession challenge; False otherwise. - :rtype: bool - """ - if not self.scheme: - return False - - return self.scheme.lower() == "pop" - - def get_value(self, key: str) -> "Optional[str]": - return self._parameters.get(key) - - def get_authorization_server(self) -> str: - """Returns the URI for the authorization server if present, otherwise an empty string. - - :returns: The URI for the authorization server if present, otherwise an empty string. - :rtype: str - """ - value = "" - for key in ["authorization_uri", "authorization"]: - value = self.get_value(key) or "" - if value: - break - return value - - def get_resource(self) -> str: - """Returns the resource if present, otherwise an empty string. - - :returns: The challenge resource if present, otherwise an empty string. - :rtype: str - """ - return self.get_value("resource") or "" - - def get_scope(self) -> str: - """Returns the scope if present, otherwise an empty string. - - :returns: The challenge scope if present, otherwise an empty string. - :rtype: str - """ - return self.get_value("scope") or "" - - def supports_pop(self) -> bool: - """Returns True if the challenge supports proof of possession token auth; False otherwise. - - :returns: True if the challenge supports proof of possession token auth; False otherwise. - :rtype: bool - """ - return self._parameters.get("supportspop", "").lower() == "true" - - def supports_message_protection(self) -> bool: - """Returns True if the challenge vault supports message protection; False otherwise. - - :returns: True if the challenge vault supports message protection; False otherwise. - :rtype: bool - """ - return self.supports_pop() and self.server_encryption_key and self.server_signature_key # type: ignore - - def _validate_challenge( - self, challenge: str - ) -> str: # pylint:disable=bad-option-value,useless-option-value,no-self-use - """Verifies that the challenge is a valid auth challenge and returns the key=value pairs. - - :param str challenge: The WWW-Authenticate header of the challenge response. - - :returns: The challenge key/value pairs, with whitespace removed, as a string. - :rtype: str - """ - if not challenge: - raise ValueError("Challenge cannot be empty") - - return challenge.strip() - - def _validate_request_uri( - self, uri: str - ) -> str: # pylint:disable=bad-option-value,useless-option-value,no-self-use - """Extracts the host authority from the given URI. - - :param str uri: The URI of the HTTP request that prompted the challenge. - - :returns: The challenge host authority. - :rtype: str - """ - if not uri: - raise ValueError("request_uri cannot be empty") - - parsed = parse.urlparse(uri) - if not parsed.netloc: - raise ValueError("request_uri must be an absolute URI") - - if parsed.scheme.lower() not in ["http", "https"]: - raise ValueError("request_uri must be HTTP or HTTPS") - - return parsed.netloc diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/http_challenge_cache.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/http_challenge_cache.py deleted file mode 100644 index f1448cc53391..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_shared/http_challenge_cache.py +++ /dev/null @@ -1,93 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -import threading -from typing import Dict, Optional -from urllib import parse - -from .http_challenge import HttpChallenge - - -_cache: "Dict[str, HttpChallenge]" = {} -_lock = threading.Lock() - - -def get_challenge_for_url(url: str) -> "Optional[HttpChallenge]": - """Gets the challenge for the cached URL. - - :param str url: the URL the challenge is cached for. - - :returns: The challenge for the cached request URL, or None if the request URL isn't cached. - :rtype: HttpChallenge or None - """ - - if not url: - raise ValueError("URL cannot be None") - - key = _get_cache_key(url) - - with _lock: - return _cache.get(key) - - -def _get_cache_key(url: str) -> str: - """Use the URL's netloc as cache key except when the URL specifies the default port for its scheme. In that case - use the netloc without the port. That is to say, https://foo.bar and https://foo.bar:443 are considered equivalent. - - This equivalency prevents an unnecessary challenge when using Key Vault's paging API. The Key Vault client doesn't - specify ports, but Key Vault's next page links do, so a redundant challenge would otherwise be executed when the - client requests the next page. - - :param str url: The HTTP request URL. - - :returns: The URL's `netloc`, minus any port attached to the URL. - :rtype: str - """ - - parsed = parse.urlparse(url) - if parsed.scheme == "https" and parsed.port == 443: - return parsed.netloc[:-4] - return parsed.netloc - - -def remove_challenge_for_url(url: str) -> None: - """Removes the cached challenge for the specified URL. - - :param str url: the URL for which to remove the cached challenge - """ - if not url: - raise ValueError("URL cannot be empty") - - parsed = parse.urlparse(url) - - with _lock: - del _cache[parsed.netloc] - - -def set_challenge_for_url(url: str, challenge: "HttpChallenge") -> None: - """Caches the challenge for the specified URL. - - :param str url: the URL for which to cache the challenge - :param challenge: the challenge to cache - :type challenge: HttpChallenge - """ - if not url: - raise ValueError("URL cannot be empty") - - if not challenge: - raise ValueError("Challenge cannot be empty") - - src_url = parse.urlparse(url) - if src_url.netloc != challenge.source_authority: - raise ValueError("Source URL and Challenge URL do not match") - - with _lock: - _cache[src_url.netloc] = challenge - - -def clear() -> None: - """Clears the cache.""" - - with _lock: - _cache.clear() diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_vendor.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_vendor.py similarity index 100% rename from sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_vendor.py rename to sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_vendor.py diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_version.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_version.py index f058fb2e3bd0..0d777283b3a2 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_version.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_version.py @@ -1,6 +1,9 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- -VERSION = "4.10.0b2" +VERSION = "4.9.0b1" diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/__init__.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/__init__.py index ba1c15a8d7ae..8c996b993b8a 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/__init__.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/__init__.py @@ -1,8 +1,29 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=wrong-import-position -from ._client import CertificateClient +from typing import TYPE_CHECKING -__all__ = ["CertificateClient"] +if TYPE_CHECKING: + from ._patch import * # pylint: disable=unused-wildcard-import + +from ._client import KeyVaultClient # type: ignore + +try: + from ._patch import __all__ as _patch_all + from ._patch import * +except ImportError: + _patch_all = [] +from ._patch import patch_sdk as _patch_sdk + +__all__ = [ + "KeyVaultClient", +] +__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore + +_patch_sdk() diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_client.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_client.py index c1e3d3aa8804..86d6fc4a3056 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_client.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_client.py @@ -1,1070 +1,103 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -# pylint:disable=too-many-lines,too-many-public-methods -import base64 -from typing import Any, Dict, List, Optional, Union -from functools import partial +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- -from azure.core.polling import AsyncLROPoller -from azure.core.tracing.decorator import distributed_trace -from azure.core.tracing.decorator_async import distributed_trace_async -from azure.core.async_paging import AsyncItemPaged +from copy import deepcopy +from typing import Any, Awaitable, TYPE_CHECKING +from typing_extensions import Self -from .. import ( - AdministratorContact, - KeyVaultCertificate, - CertificateOperation, - CertificatePolicy, - DeletedCertificate, - CertificateProperties, - CertificateContact, - CertificateIssuer, - IssuerProperties, -) -from ._polling_async import CreateCertificatePollerAsync -from .._client import NO_SAN_OR_SUBJECT -from .._shared import AsyncKeyVaultClientBase -from .._shared._polling_async import AsyncDeleteRecoverPollingMethod +from azure.core import AsyncPipelineClient +from azure.core.pipeline import policies +from azure.core.rest import AsyncHttpResponse, HttpRequest +from .._serialization import Deserializer, Serializer +from ._configuration import KeyVaultClientConfiguration +from ._operations import KeyVaultClientOperationsMixin -class CertificateClient(AsyncKeyVaultClientBase): - """A high-level asynchronous interface for managing a vault's certificates. +if TYPE_CHECKING: + from azure.core.credentials_async import AsyncTokenCredential - :param str vault_url: URL of the vault the client will access. This is also called the vault's "DNS Name". - You should validate that this URL references a valid Key Vault resource. See https://aka.ms/azsdk/blog/vault-uri - for details. - :param credential: An object which can provide an access token for the vault, such as a credential from - :mod:`azure.identity.aio` - :type credential: ~azure.core.credentials_async.AsyncTokenCredential - :keyword api_version: Version of the service API to use. Defaults to the most recent. - :paramtype api_version: ~azure.keyvault.certificates.ApiVersion or str - :keyword bool verify_challenge_resource: Whether to verify the authentication challenge resource matches the Key - Vault domain. Defaults to True. +class KeyVaultClient(KeyVaultClientOperationsMixin): + """The key vault client performs cryptographic key operations and vault operations against the Key + Vault service. - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START create_certificate_client] - :end-before: [END create_certificate_client] - :language: python - :dedent: 4 - :caption: Creates a new instance of the Certificate client + :param vault_base_url: Required. + :type vault_base_url: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword api_version: The API version to use for this operation. Default value is + "7.6-preview.2". Note that overriding this default value may result in unsupported behavior. + :paramtype api_version: str """ - # pylint:disable=protected-access - @distributed_trace_async - async def create_certificate( - self, - certificate_name: str, - policy: CertificatePolicy, - *, - enabled: Optional[bool] = None, - tags: Optional[Dict[str, str]] = None, - preserve_certificate_order: Optional[bool] = None, - **kwargs: Any, - ) -> Union[KeyVaultCertificate, CertificateOperation]: - """Creates a new certificate. - - If this is the first version, the certificate resource is created. This operation requires the - certificates/create permission. The poller requires the certificates/get permission, otherwise raises an - :class:`~azure.core.exceptions.HttpResponseError`. - - :param str certificate_name: The name of the certificate. - :param policy: The management policy for the certificate. Either subject or one of the subject alternative - name properties are required. - :type policy: ~azure.keyvault.certificates.CertificatePolicy - - :keyword bool enabled: Whether the certificate is enabled for use. - :keyword tags: Application specific metadata in the form of key-value pairs. - :paramtype tags: dict[str, str] - :keyword bool preserve_certificate_order: Whether to preserve the order of the certificate chain. - - :returns: A coroutine for the creation of the certificate. Awaiting the coroutine returns the created - KeyVaultCertificate if creation is successful, or the CertificateOperation if not. - :rtype: ~azure.keyvault.certificates.KeyVaultCertificate or ~azure.keyvault.certificates.CertificateOperation - - :raises ValueError or ~azure.core.exceptions.HttpResponseError: - the former if the certificate policy is invalid; the latter for other errors - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START create_certificate] - :end-before: [END create_certificate] - :language: python - :caption: Create a certificate - :dedent: 8 - """ - if not (policy.san_emails or policy.san_user_principal_names or policy.san_dns_names or policy.subject): - raise ValueError(NO_SAN_OR_SUBJECT) - - polling_interval = kwargs.pop("_polling_interval", None) - if polling_interval is None: - polling_interval = 5 - - if enabled is not None: - attributes = self._models.CertificateAttributes(enabled=enabled) - else: - attributes = None - - parameters = self._models.CertificateCreateParameters( - certificate_policy=policy._to_certificate_policy_bundle(), - certificate_attributes=attributes, - tags=tags, - preserve_cert_order=preserve_certificate_order, - ) - - pipeline_response, cert_bundle = await self._client.create_certificate( - certificate_name=certificate_name, - parameters=parameters, - cls=lambda pipeline_response, deserialized, _: (pipeline_response, deserialized), - **kwargs - ) - - create_certificate_operation = CertificateOperation._from_certificate_operation_bundle(cert_bundle) - - command = partial(self.get_certificate_operation, certificate_name=certificate_name, **kwargs) - - get_certificate_command = partial(self.get_certificate, certificate_name=certificate_name, **kwargs) - - create_certificate_polling = CreateCertificatePollerAsync( - pipeline_response=pipeline_response, - get_certificate_command=get_certificate_command, - interval=polling_interval, - ) - def no_op(*_, **__) -> Any: # The deserialization callback is ignored based on polling implementation - pass - return await AsyncLROPoller(command, create_certificate_operation, no_op, create_certificate_polling) - - @distributed_trace_async - async def get_certificate(self, certificate_name: str, **kwargs: Any) -> KeyVaultCertificate: - """Gets a certificate with its management policy attached. Requires certificates/get permission. - - Does not accept the version of the certificate as a parameter. To get a specific version of the - certificate, call :func:`get_certificate_version`. - - :param str certificate_name: The name of the certificate in the given vault. - - :returns: An instance of KeyVaultCertificate - :rtype: ~azure.keyvault.certificates.KeyVaultCertificate - - :raises ~azure.core.exceptions.ResourceNotFoundError or ~azure.core.exceptions.HttpResponseError: - the former if the certificate doesn't exist; the latter for other errors - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START get_certificate] - :end-before: [END get_certificate] - :language: python - :caption: Get a certificate - :dedent: 8 - """ - bundle = await self._client.get_certificate( - certificate_name=certificate_name, - certificate_version="", - **kwargs - ) - return KeyVaultCertificate._from_certificate_bundle(certificate_bundle=bundle) - - @distributed_trace_async - async def get_certificate_version( - self, certificate_name: str, version: str, **kwargs: Any - ) -> KeyVaultCertificate: - """Gets a specific version of a certificate without returning its management policy. - - Requires certificates/get permission. To get the latest version of the certificate, or to get the certificate's - policy as well, call :func:`get_certificate`. - - :param str certificate_name: The name of the certificate in the given vault. - :param str version: The version of the certificate. - - :returns: An instance of KeyVaultCertificate - :rtype: ~azure.keyvault.certificates.KeyVaultCertificate - - :raises ~azure.core.exceptions.ResourceNotFoundError or ~azure.core.exceptions.HttpResponseError: - the former if the certificate doesn't exist; the latter for other errors - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START get_certificate_version] - :end-before: [END get_certificate_version] - :language: python - :caption: Get a certificate with a specific version - :dedent: 8 - """ - bundle = await self._client.get_certificate( - certificate_name=certificate_name, - certificate_version=version, - **kwargs - ) - return KeyVaultCertificate._from_certificate_bundle(certificate_bundle=bundle) - - @distributed_trace_async - async def delete_certificate(self, certificate_name: str, **kwargs: Any) -> DeletedCertificate: - """Delete all versions of a certificate. Requires certificates/delete permission. - - If the vault has soft-delete enabled, deletion may take several seconds to complete. - - :param str certificate_name: The name of the certificate. - - :returns: The deleted certificate - :rtype: ~azure.keyvault.certificates.DeletedCertificate - - :raises ~azure.core.exceptions.ResourceNotFoundError or ~azure.core.exceptions.HttpResponseError: - the former if the certificate doesn't exist; the latter for other errors - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START delete_certificate] - :end-before: [END delete_certificate] - :language: python - :caption: Delete a certificate - :dedent: 8 - """ - polling_interval = kwargs.pop("_polling_interval", None) - if polling_interval is None: - polling_interval = 2 - pipeline_response, deleted_cert_bundle = await self._client.delete_certificate( - certificate_name=certificate_name, - cls=lambda pipeline_response, deserialized, _: (pipeline_response, deserialized), - **kwargs, - ) - deleted_certificate = DeletedCertificate._from_deleted_certificate_bundle(deleted_cert_bundle) - - polling_method = AsyncDeleteRecoverPollingMethod( - # no recovery ID means soft-delete is disabled, in which case we initialize the poller as finished - finished=deleted_certificate.recovery_id is None, - pipeline_response=pipeline_response, - command=partial(self.get_deleted_certificate, certificate_name=certificate_name, **kwargs), - final_resource=deleted_certificate, - interval=polling_interval, - ) - await polling_method.run() - - return polling_method.resource() - - @distributed_trace_async - async def get_deleted_certificate(self, certificate_name: str, **kwargs: Any) -> DeletedCertificate: - """Get a deleted certificate. Possible only in a vault with soft-delete enabled. - - Requires certificates/get permission. Retrieves the deleted certificate information plus its attributes, such as - retention interval, scheduled permanent deletion, and the current deletion recovery level. - - :param str certificate_name: The name of the certificate. - - :return: The deleted certificate - :rtype: ~azure.keyvault.certificates.DeletedCertificate - - :raises ~azure.core.exceptions.ResourceNotFoundError or ~azure.core.exceptions.HttpResponseError: - the former if the certificate doesn't exist; the latter for other errors - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START get_deleted_certificate] - :end-before: [END get_deleted_certificate] - :language: python - :caption: Get a deleted certificate - :dedent: 8 - """ - bundle = await self._client.get_deleted_certificate( - certificate_name=certificate_name, **kwargs - ) - return DeletedCertificate._from_deleted_certificate_bundle(deleted_certificate_bundle=bundle) - - @distributed_trace_async - async def purge_deleted_certificate(self, certificate_name: str, **kwargs: Any) -> None: - """Permanently deletes a deleted certificate. Possible only in vaults with soft-delete enabled. - - Requires certificates/purge permission. Performs an irreversible deletion of the specified certificate, without - possibility for recovery. The operation is not available if the - :py:attr:`~azure.keyvault.certificates.CertificateProperties.recovery_level` does not specify 'Purgeable'. - This method is only necessary for purging a certificate before its - :py:attr:`~azure.keyvault.certificates.DeletedCertificate.scheduled_purge_date`. - - :param str certificate_name: The name of the certificate - - :return: None - :rtype: None - - :raises ~azure.core.exceptions.HttpResponseError: - """ - await self._client.purge_deleted_certificate( - certificate_name=certificate_name, **kwargs - ) - - @distributed_trace_async - async def recover_deleted_certificate(self, certificate_name: str, **kwargs: Any) -> KeyVaultCertificate: - """Recover a deleted certificate to its latest version. Possible only in a vault with soft-delete enabled. - - Requires certificates/recover permission. If the vault does not have soft-delete enabled, - :func:`delete_certificate` is permanent, and this method will raise an error. Attempting to recover a - non-deleted certificate will also raise an error. - - :param str certificate_name: The name of the deleted certificate - - :returns: The recovered certificate - :rtype: ~azure.keyvault.certificates.KeyVaultCertificate - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START recover_deleted_certificate] - :end-before: [END recover_deleted_certificate] - :language: python - :caption: Recover a deleted certificate - :dedent: 8 - """ - polling_interval = kwargs.pop("_polling_interval", None) - if polling_interval is None: - polling_interval = 2 - pipeline_response, recovered_cert_bundle = await self._client.recover_deleted_certificate( - certificate_name=certificate_name, - cls=lambda pipeline_response, deserialized, _: (pipeline_response, deserialized), - **kwargs, - ) - recovered_certificate = KeyVaultCertificate._from_certificate_bundle(recovered_cert_bundle) - - command = partial(self.get_certificate, certificate_name=certificate_name, **kwargs) - polling_method = AsyncDeleteRecoverPollingMethod( - pipeline_response=pipeline_response, - command=command, - final_resource=recovered_certificate, - finished=False, - interval=polling_interval - ) - await polling_method.run() - - return polling_method.resource() - - @distributed_trace_async - async def import_certificate( - self, - certificate_name: str, - certificate_bytes: bytes, - *, - enabled: Optional[bool] = None, - tags: Optional[Dict[str, str]] = None, - password: Optional[str] = None, - policy: Optional[CertificatePolicy] = None, - preserve_certificate_order: Optional[bool] = None, - **kwargs: Any, - ) -> KeyVaultCertificate: - """Import a certificate created externally. Requires certificates/import permission. - - 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, and you must provide a ``policy`` with - :attr:`~azure.keyvault.certificates.CertificatePolicy.content_type` of - :attr:`~azure.keyvault.certificates.CertificateContentType.pem`. - - :param str certificate_name: The name of the certificate. - :param bytes certificate_bytes: Bytes of the certificate object to import. - This certificate needs to contain the private key. - - :keyword bool enabled: Whether the certificate is enabled for use. - :keyword tags: Application specific metadata in the form of key-value pairs. - :paramtype tags: dict[str, str] - :keyword str password: If the private key in the passed in certificate is encrypted, it - is the password used for encryption. - :keyword policy: The management policy for the certificate. Required if importing a PEM-format certificate, - with :attr:`~azure.keyvault.certificates.CertificatePolicy.content_type` set to - :attr:`~azure.keyvault.certificates.CertificateContentType.pem`. - :paramtype policy: ~azure.keyvault.certificates.CertificatePolicy - :keyword bool preserve_certificate_order: Whether to preserve the order of the certificate chain. - - :returns: The imported KeyVaultCertificate - :rtype: ~azure.keyvault.certificates.KeyVaultCertificate - - :raises ~azure.core.exceptions.HttpResponseError: - """ - - if enabled is not None: - attributes = self._models.CertificateAttributes(enabled=enabled) - else: - attributes = None - base64_encoded_certificate = base64.b64encode(certificate_bytes).decode("utf-8") - - parameters = self._models.CertificateImportParameters( - base64_encoded_certificate=base64_encoded_certificate, - password=password, - certificate_policy=policy._to_certificate_policy_bundle() if policy else None, - certificate_attributes=attributes, - tags=tags, - preserve_cert_order=preserve_certificate_order, - ) - - bundle = await self._client.import_certificate( - certificate_name=certificate_name, - parameters=parameters, - **kwargs - ) - return KeyVaultCertificate._from_certificate_bundle(certificate_bundle=bundle) - - @distributed_trace_async - async def get_certificate_policy(self, certificate_name: str, **kwargs: Any) -> CertificatePolicy: - """Gets the policy for a certificate. Requires certificates/get permission. - - Returns the specified certificate policy resources in the key vault. - - :param str certificate_name: The name of the certificate in a given key vault. - - :return: The certificate policy - :rtype: ~azure.keyvault.certificates.CertificatePolicy - - :raises ~azure.core.exceptions.HttpResponseError: - """ - bundle = await self._client.get_certificate_policy( - certificate_name=certificate_name, **kwargs - ) - return CertificatePolicy._from_certificate_policy_bundle(certificate_policy_bundle=bundle) - - @distributed_trace_async - async def update_certificate_policy( - self, certificate_name: str, policy: CertificatePolicy, **kwargs: Any - ) -> CertificatePolicy: - """Updates the policy for a certificate. Requires certificates/update permission. - - Set specified members in the certificate policy. Leaves others as null. - - :param str certificate_name: The name of the certificate in the given vault. - :param policy: The policy for the certificate. - :type policy: ~azure.keyvault.certificates.CertificatePolicy - - :return: The certificate policy - :rtype: ~azure.keyvault.certificates.CertificatePolicy - - :raises ~azure.core.exceptions.HttpResponseError: - """ - bundle = await self._client.update_certificate_policy( - certificate_name=certificate_name, - certificate_policy=policy._to_certificate_policy_bundle(), - **kwargs - ) - return CertificatePolicy._from_certificate_policy_bundle(certificate_policy_bundle=bundle) - - @distributed_trace_async - async def update_certificate_properties( - self, - certificate_name: str, - version: Optional[str] = None, - *, - enabled: Optional[bool] = None, - tags: Optional[Dict[str, str]] = None, - **kwargs: Any, - ) -> KeyVaultCertificate: - """Change a certificate's properties. Requires certificates/update permission. - - :param str certificate_name: The name of the certificate in the given key vault. - :param str version: The version of the certificate. - - :keyword bool enabled: Whether the certificate is enabled for use. - :keyword tags: Application specific metadata in the form of key-value pairs. - :paramtype tags: dict[str, str] - - :returns: The updated KeyVaultCertificate - :rtype: ~azure.keyvault.certificates.KeyVaultCertificate - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START update_certificate] - :end-before: [END update_certificate] - :language: python - :caption: Update a certificate's attributes - :dedent: 8 - """ - - if enabled is not None: - attributes = self._models.CertificateAttributes(enabled=enabled) - else: - attributes = None - - parameters = self._models.CertificateUpdateParameters( - certificate_attributes=attributes, tags=tags - ) - - bundle = await self._client.update_certificate( - certificate_name=certificate_name, - certificate_version=version or "", - parameters=parameters, - **kwargs - ) - return KeyVaultCertificate._from_certificate_bundle(certificate_bundle=bundle) - - @distributed_trace_async - async def backup_certificate(self, certificate_name: str, **kwargs: Any) -> bytes: - """Back up a certificate in a protected form useable only by Azure Key Vault. - - Requires certificates/backup permission. This is intended to allow copying a certificate from one vault to - another. Both vaults must be owned by the same Azure subscription. Also, backup / restore cannot be performed - across geopolitical boundaries. For example, a backup from a vault in a USA region cannot be restored to a vault - in an EU region. - - :param str certificate_name: The name of the certificate. - - :return: The backup blob containing the backed up certificate. - :rtype: bytes - - :raises ~azure.core.exceptions.ResourceNotFoundError or ~azure.core.exceptions.HttpResponseError: - the former if the certificate doesn't exist; the latter for other errors - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START backup_certificate] - :end-before: [END backup_certificate] - :language: python - :caption: Get a certificate backup - :dedent: 8 - """ - backup_result = await self._client.backup_certificate( - certificate_name=certificate_name, **kwargs - ) - return backup_result.value - - @distributed_trace_async - async def restore_certificate_backup(self, backup: bytes, **kwargs: Any) -> KeyVaultCertificate: - """Restore a certificate backup to the vault. Requires certificates/restore permission. - - This restores all versions of the certificate, with its name, attributes, and access control policies. If the - certificate's name is already in use, restoring it will fail. Also, the target vault must be owned by the same - Microsoft Azure subscription as the source vault. - - :param bytes backup: The backup blob associated with a certificate bundle. - - :return: The restored KeyVaultCertificate - :rtype: ~azure.keyvault.certificates.KeyVaultCertificate - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START restore_certificate] - :end-before: [END restore_certificate] - :language: python - :caption: Restore a certificate backup - :dedent: 8 - """ - bundle = await self._client.restore_certificate( - parameters=self._models.CertificateRestoreParameters(certificate_bundle_backup=backup), - **kwargs - ) - return KeyVaultCertificate._from_certificate_bundle(certificate_bundle=bundle) - - @distributed_trace - def list_deleted_certificates( - self, *, include_pending: Optional[bool] = None, **kwargs: Any - ) -> AsyncItemPaged[DeletedCertificate]: - """Lists the currently-recoverable deleted certificates. Possible only if vault is soft-delete enabled. - - Requires certificates/get/list permission. 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. - - :keyword bool include_pending: Specifies whether to include certificates which are not completely deleted. - Only available for API versions v7.0 and up. If not provided, Key Vault treats this as False. - :paramtype include_pending: bool or None - - :return: An iterator-like instance of DeletedCertificate - :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.certificates.DeletedCertificate] - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START list_deleted_certificates] - :end-before: [END list_deleted_certificates] - :language: python - :caption: List all the deleted certificates - :dedent: 8 - """ - max_page_size = kwargs.pop("max_page_size", None) - - if self.api_version == "2016-10-01": - if include_pending is not None: - raise NotImplementedError( - "The 'include_pending' parameter to `list_deleted_certificates` " - "is only available for API versions v7.0 and up" - ) - else: - kwargs.update({"include_pending": include_pending}) - - return self._client.get_deleted_certificates( - maxresults=max_page_size, - cls=lambda objs: [DeletedCertificate._from_deleted_certificate_item(x) for x in objs], - **kwargs - ) - - @distributed_trace - def list_properties_of_certificates( - self, *, include_pending: Optional[bool] = None, **kwargs: Any - ) -> AsyncItemPaged[CertificateProperties]: - """List identifiers and properties of all certificates in the vault. - - Requires certificates/list permission. - - :keyword bool include_pending: Specifies whether to include certificates which are not completely provisioned. - Only available for API versions v7.0 and up. If not provided, Key Vault treats this as False. - :paramtype include_pending: bool or None - - :returns: An iterator-like instance of CertificateProperties - :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.certificates.CertificateProperties] - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START list_properties_of_certificates] - :end-before: [END list_properties_of_certificates] - :language: python - :caption: List all certificates - :dedent: 8 - """ - max_page_size = kwargs.pop("max_page_size", None) - - if self.api_version == "2016-10-01": - if include_pending is not None: - raise NotImplementedError( - "The 'include_pending' parameter to `list_properties_of_certificates` " - "is only available for API versions v7.0 and up" - ) - else: - kwargs.update({"include_pending": include_pending}) - - return self._client.get_certificates( - maxresults=max_page_size, - cls=lambda objs: [CertificateProperties._from_certificate_item(x) for x in objs], - **kwargs - ) - - @distributed_trace - def list_properties_of_certificate_versions( - self, certificate_name: str, **kwargs: Any - ) -> AsyncItemPaged[CertificateProperties]: - """List the identifiers and properties of a certificate's versions. - - Requires certificates/list permission. - - :param str certificate_name: The name of the certificate. - - :returns: An iterator-like instance of CertificateProperties - :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.certificates.CertificateProperties] - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START list_properties_of_certificate_versions] - :end-before: [END list_properties_of_certificate_versions] - :language: python - :caption: List all versions of a certificate - :dedent: 8 - """ - max_page_size = kwargs.pop("max_page_size", None) - return self._client.get_certificate_versions( - certificate_name=certificate_name, - maxresults=max_page_size, - cls=lambda objs: [CertificateProperties._from_certificate_item(x) for x in objs], - **kwargs - ) - - @distributed_trace_async - async def set_contacts(self, contacts: List[CertificateContact], **kwargs: Any) -> List[CertificateContact]: - """Sets the certificate contacts for the key vault. Requires certificates/managecontacts permission. - - :param contacts: The contact list for the vault certificates. - :type contacts: list[~azure.keyvault.certificates.CertificateContact] - - :returns: The created list of contacts - :rtype: list[~azure.keyvault.certificates.CertificateContact] - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START set_contacts] - :end-before: [END set_contacts] - :language: python - :caption: Create contacts - :dedent: 8 - """ - new_contacts = await self._client.set_certificate_contacts( - contacts=self._models.Contacts(contact_list=[c._to_certificate_contacts_item() for c in contacts]), - **kwargs - ) - return [ - CertificateContact._from_certificate_contacts_item(contact_item=item) for item in new_contacts.contact_list - ] - - @distributed_trace_async - async def get_contacts(self, **kwargs: Any) -> List[CertificateContact]: - """Gets the certificate contacts for the key vault. Requires the certificates/managecontacts permission. - - :return: The certificate contacts for the key vault. - :rtype: list[azure.keyvault.certificates.CertificateContact] - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START get_contacts] - :end-before: [END get_contacts] - :language: python - :caption: Get contacts - :dedent: 8 - """ - contacts = await self._client.get_certificate_contacts( **kwargs - ) - return [CertificateContact._from_certificate_contacts_item(contact_item=item) for item in contacts.contact_list] - - @distributed_trace_async - async def delete_contacts(self, **kwargs: Any) -> List[CertificateContact]: - """Deletes the certificate contacts for the key vault. Requires the certificates/managecontacts permission. - - :return: The deleted contacts for the key vault. - :rtype: list[~azure.keyvault.certificates.CertificateContact] - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START delete_contacts] - :end-before: [END delete_contacts] - :language: python - :caption: Delete contacts - :dedent: 8 - """ - contacts = await self._client.delete_certificate_contacts( - **kwargs - ) - return [CertificateContact._from_certificate_contacts_item(contact_item=item) for item in contacts.contact_list] - - @distributed_trace_async - async def get_certificate_operation(self, certificate_name: str, **kwargs: Any) -> CertificateOperation: - """Gets the creation operation of a certificate. Requires the certificates/get permission. - - :param str certificate_name: The name of the certificate. - - :returns: The created CertificateOperation - :rtype: ~azure.keyvault.certificates.CertificateOperation - - :raises ~azure.core.exceptions.ResourceNotFoundError or ~azure.core.exceptions.HttpResponseError: - the former if the certificate doesn't exist; the latter for other errors - """ - - bundle = await self._client.get_certificate_operation( - certificate_name=certificate_name, **kwargs - ) - return CertificateOperation._from_certificate_operation_bundle(certificate_operation_bundle=bundle) - - @distributed_trace_async - async def delete_certificate_operation(self, certificate_name: str, **kwargs: Any) -> CertificateOperation: - """Deletes and stops the creation operation for a specific certificate. - - Requires the certificates/update permission. - - :param str certificate_name: The name of the certificate. - - :return: The deleted CertificateOperation - :rtype: ~azure.keyvault.certificates.CertificateOperation - - :raises ~azure.core.exceptions.ResourceNotFoundError or ~azure.core.exceptions.HttpResponseError: - the former if the operation doesn't exist; the latter for other errors - """ - bundle = await self._client.delete_certificate_operation( - certificate_name=certificate_name, **kwargs - ) - return CertificateOperation._from_certificate_operation_bundle(certificate_operation_bundle=bundle) - - @distributed_trace_async - async def cancel_certificate_operation(self, certificate_name: str, **kwargs: Any) -> CertificateOperation: - """Cancels an in-progress certificate operation. Requires the certificates/update permission. - - :param str certificate_name: The name of the certificate. - - :returns: The cancelled certificate operation - :rtype: ~azure.keyvault.certificates.CertificateOperation - - :raises ~azure.core.exceptions.HttpResponseError: - """ - bundle = await self._client.update_certificate_operation( - certificate_name=certificate_name, - certificate_operation=self._models.CertificateOperationUpdateParameter(cancellation_requested=True), - **kwargs - ) - return CertificateOperation._from_certificate_operation_bundle(certificate_operation_bundle=bundle) - - @distributed_trace_async - async def merge_certificate( - self, - certificate_name: str, - x509_certificates: List[bytes], - *, - enabled: Optional[bool] = None, - tags: Optional[Dict[str, str]] = None, - **kwargs: Any, - ) -> KeyVaultCertificate: - """Merges a certificate or a certificate chain with a key pair existing on the server. - - Requires the certificates/create permission. Performs the merging of a certificate or certificate chain with a - key pair currently available in the service. Make sure when creating the certificate to merge using - :func:`create_certificate` that you set its issuer to 'Unknown'. This way Key Vault knows that the - certificate will not be signed by an issuer known to it. - - :param str certificate_name: The name of the certificate - :param x509_certificates: The certificate or the certificate chain to merge. - :type x509_certificates: list[bytes] - - :keyword bool enabled: Whether the certificate is enabled for use. - :keyword tags: Application specific metadata in the form of key-value pairs. - :paramtype tags: dict[str, str] - - :return: The merged certificate operation - :rtype: ~azure.keyvault.certificates.CertificateOperation - - :raises ~azure.core.exceptions.HttpResponseError: - """ - - if enabled is not None: - attributes = self._models.CertificateAttributes(enabled=enabled) - else: - attributes = None - - parameters = self._models.CertificateMergeParameters( - x509_certificates=x509_certificates, certificate_attributes=attributes, tags=tags - ) - - bundle = await self._client.merge_certificate( - certificate_name=certificate_name, - parameters=parameters, - **kwargs - ) - return KeyVaultCertificate._from_certificate_bundle(certificate_bundle=bundle) - - @distributed_trace_async - async def get_issuer(self, issuer_name: str, **kwargs: Any) -> CertificateIssuer: - """Gets the specified certificate issuer. Requires certificates/manageissuers/getissuers permission. - - :param str issuer_name: The name of the issuer. - - :return: The specified certificate issuer. - :rtype: ~azure.keyvault.certificates.CertificateIssuer - - :raises ~azure.core.exceptions.ResourceNotFoundError or ~azure.core.exceptions.HttpResponseError: - the former if the issuer doesn't exist; the latter for other errors - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START get_issuer] - :end-before: [END get_issuer] - :language: python - :caption: Get an issuer - :dedent: 8 - """ - issuer_bundle = await self._client.get_certificate_issuer( - issuer_name=issuer_name, **kwargs - ) - return CertificateIssuer._from_issuer_bundle(issuer_bundle=issuer_bundle) - - @distributed_trace_async - async def create_issuer( - self, - issuer_name: str, - provider: str, - *, - enabled: Optional[bool] = None, - account_id: Optional[str] = None, - password: Optional[str] = None, - organization_id: Optional[str] = None, - admin_contacts: Optional[List[AdministratorContact]] = None, - **kwargs: Any, - ) -> CertificateIssuer: - """Sets the specified certificate issuer. Requires certificates/setissuers permission. - - :param str issuer_name: The name of the issuer. - :param str provider: The issuer provider. - - :keyword bool enabled: Whether the issuer is enabled for use. - :keyword str account_id: The user name/account name/account id. - :keyword str password: The password/secret/account key. - :keyword str organization_id: Id of the organization - :keyword admin_contacts: Contact details of the organization administrators of the - certificate issuer. - :paramtype admin_contacts: list[~azure.keyvault.certificates.AdministratorContact] - - :returns: The created CertificateIssuer - :rtype: ~azure.keyvault.certificates.CertificateIssuer - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START create_issuer] - :end-before: [END create_issuer] - :language: python - :caption: Create an issuer - :dedent: 8 - """ - - if account_id or password: - issuer_credentials = self._models.IssuerCredentials(account_id=account_id, password=password) - else: - issuer_credentials = None - if admin_contacts: - admin_details: Optional[List[Any]] = [ - self._models.AdministratorDetails( - first_name=contact.first_name, - last_name=contact.last_name, - email_address=contact.email, - phone=contact.phone, - ) - for contact in admin_contacts + def __init__(self, vault_base_url: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + _endpoint = "{vaultBaseUrl}" + self._config = KeyVaultClientConfiguration(vault_base_url=vault_base_url, credential=credential, **kwargs) + + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, ] - else: - admin_details = None - if organization_id or admin_details: - organization_details = self._models.OrganizationDetails(id=organization_id, admin_details=admin_details) - else: - organization_details = None - if enabled is not None: - issuer_attributes = self._models.IssuerAttributes(enabled=enabled) - else: - issuer_attributes = None - - parameters = self._models.CertificateIssuerSetParameters( - provider=provider, - credentials=issuer_credentials, - organization_details=organization_details, - attributes=issuer_attributes, - ) + self._client: AsyncPipelineClient = AsyncPipelineClient(base_url=_endpoint, policies=_policies, **kwargs) - issuer_bundle = await self._client.set_certificate_issuer( - issuer_name=issuer_name, parameter=parameters, **kwargs - ) - return CertificateIssuer._from_issuer_bundle(issuer_bundle=issuer_bundle) + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False - @distributed_trace_async - async def update_issuer( - self, - issuer_name: str, - *, - enabled: Optional[bool] = None, - provider: Optional[str] = None, - account_id: Optional[str] = None, - password: Optional[str] = None, - organization_id: Optional[str] = None, - admin_contacts: Optional[List[AdministratorContact]] = None, - **kwargs: Any, - ) -> CertificateIssuer: - """Updates the specified certificate issuer. Requires certificates/setissuers permission. + def send_request( + self, request: HttpRequest, *, stream: bool = False, **kwargs: Any + ) -> Awaitable[AsyncHttpResponse]: + """Runs the network request through the client's chained policies. - :param str issuer_name: The name of the issuer. + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = await client.send_request(request) + - :keyword bool enabled: Whether the issuer is enabled for use. - :keyword str provider: The issuer provider - :keyword str account_id: The user name/account name/account id. - :keyword str password: The password/secret/account key. - :keyword str organization_id: Id of the organization - :keyword admin_contacts: Contact details of the organization administrators of - the certificate issuer - :paramtype admin_contacts: list[~azure.keyvault.certificates.AdministratorContact] + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request - :return: The updated issuer - :rtype: ~azure.keyvault.certificates.CertificateIssuer - - :raises ~azure.core.exceptions.HttpResponseError: + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.AsyncHttpResponse """ - if account_id or password: - issuer_credentials = self._models.IssuerCredentials(account_id=account_id, password=password) - else: - issuer_credentials = None - if admin_contacts: - admin_details: Optional[List[Any]] = list( - self._models.AdministratorDetails( - first_name=contact.first_name, - last_name=contact.last_name, - email_address=contact.email, - phone=contact.phone, - ) - for contact in admin_contacts - ) - else: - admin_details = None - if organization_id or admin_details: - organization_details = self._models.OrganizationDetails(id=organization_id, admin_details=admin_details) - else: - organization_details = None - if enabled is not None: - issuer_attributes = self._models.IssuerAttributes(enabled=enabled) - else: - issuer_attributes = None - - parameters = self._models.CertificateIssuerUpdateParameters( - provider=provider, - credentials=issuer_credentials, - organization_details=organization_details, - attributes=issuer_attributes, - ) - - issuer_bundle = await self._client.update_certificate_issuer( - issuer_name=issuer_name, parameter=parameters, **kwargs - ) - return CertificateIssuer._from_issuer_bundle(issuer_bundle=issuer_bundle) + request_copy = deepcopy(request) + path_format_arguments = { + "vaultBaseUrl": self._serialize.url( + "self._config.vault_base_url", self._config.vault_base_url, "str", skip_quote=True + ), + } - @distributed_trace_async - async def delete_issuer(self, issuer_name: str, **kwargs: Any) -> CertificateIssuer: - """Deletes the specified certificate issuer. + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore - Requires certificates/manageissuers/deleteissuers permission. + async def close(self) -> None: + await self._client.close() - :param str issuer_name: The name of the issuer. - - :return: CertificateIssuer - :rtype: ~azure.keyvault.certificates.CertificateIssuer - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START delete_issuer] - :end-before: [END delete_issuer] - :language: python - :caption: Delete an issuer - :dedent: 8 - """ - issuer_bundle = await self._client.delete_certificate_issuer( - issuer_name=issuer_name, **kwargs - ) - return CertificateIssuer._from_issuer_bundle(issuer_bundle=issuer_bundle) - - @distributed_trace - def list_properties_of_issuers(self, **kwargs: Any) -> AsyncItemPaged[IssuerProperties]: - """Lists properties of the certificate issuers for the key vault. - - Requires the certificates/manageissuers/getissuers permission. - - :return: An iterator-like instance of Issuers - :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.certificates.CertificateIssuer] - - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. literalinclude:: ../tests/test_examples_certificates_async.py - :start-after: [START list_properties_of_issuers] - :end-before: [END list_properties_of_issuers] - :language: python - :caption: List issuers of a vault - :dedent: 8 - """ - max_page_size = kwargs.pop("max_page_size", None) - return self._client.get_certificate_issuers( - maxresults=max_page_size, - cls=lambda objs: [IssuerProperties._from_issuer_item(x) for x in objs], - **kwargs - ) - - async def __aenter__(self) -> "CertificateClient": + async def __aenter__(self) -> Self: await self._client.__aenter__() return self + + async def __aexit__(self, *exc_details: Any) -> None: + await self._client.__aexit__(*exc_details) diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_configuration.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_configuration.py similarity index 100% rename from sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_configuration.py rename to sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_configuration.py diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_operations/__init__.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_operations/__init__.py similarity index 100% rename from sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_operations/__init__.py rename to sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_operations/__init__.py diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_operations/_operations.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_operations/_operations.py similarity index 94% rename from sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_operations/_operations.py rename to sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_operations/_operations.py index 64474658d747..f762bfbd726f 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_operations/_operations.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_operations/_operations.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -6,9 +6,9 @@ # Code generated by Microsoft (R) Python Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from collections.abc import MutableMapping from io import IOBase import json -import sys from typing import Any, AsyncIterable, Callable, Dict, IO, List, Optional, TypeVar, Union, overload import urllib.parse @@ -62,11 +62,7 @@ ) from .._vendor import KeyVaultClientMixinABC -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore -JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object +JSON = MutableMapping[str, Any] T = TypeVar("T") ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -90,7 +86,7 @@ def get_certificates( :paramtype include_pending: bool :return: An iterator like instance of CertificateItem :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.certificates._generated.models.CertificateItem] + ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.certificates.models.CertificateItem] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} @@ -147,7 +143,7 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.CertificateItem], deserialized["value"]) + list_of_elem = _deserialize(List[_models.CertificateItem], deserialized.get("value", [])) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -182,7 +178,7 @@ async def delete_certificate(self, certificate_name: str, **kwargs: Any) -> _mod :type certificate_name: str :return: DeletedCertificateBundle. The DeletedCertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.DeletedCertificateBundle + :rtype: ~azure.keyvault.certificates.models.DeletedCertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -248,12 +244,12 @@ async def set_certificate_contacts( certificates/managecontacts permission. :param contacts: The contacts for the key vault certificate. Required. - :type contacts: ~azure.keyvault.certificates._generated.models.Contacts + :type contacts: ~azure.keyvault.certificates.models.Contacts :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: Contacts. The Contacts is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.Contacts + :rtype: ~azure.keyvault.certificates.models.Contacts :raises ~azure.core.exceptions.HttpResponseError: """ @@ -272,7 +268,7 @@ async def set_certificate_contacts( Default value is "application/json". :paramtype content_type: str :return: Contacts. The Contacts is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.Contacts + :rtype: ~azure.keyvault.certificates.models.Contacts :raises ~azure.core.exceptions.HttpResponseError: """ @@ -291,7 +287,7 @@ async def set_certificate_contacts( Default value is "application/json". :paramtype content_type: str :return: Contacts. The Contacts is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.Contacts + :rtype: ~azure.keyvault.certificates.models.Contacts :raises ~azure.core.exceptions.HttpResponseError: """ @@ -306,9 +302,9 @@ async def set_certificate_contacts( :param contacts: The contacts for the key vault certificate. Is one of the following types: Contacts, JSON, IO[bytes] Required. - :type contacts: ~azure.keyvault.certificates._generated.models.Contacts or JSON or IO[bytes] + :type contacts: ~azure.keyvault.certificates.models.Contacts or JSON or IO[bytes] :return: Contacts. The Contacts is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.Contacts + :rtype: ~azure.keyvault.certificates.models.Contacts :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -381,7 +377,7 @@ async def get_certificate_contacts(self, **kwargs: Any) -> _models.Contacts: specified key vault. This operation requires the certificates/managecontacts permission. :return: Contacts. The Contacts is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.Contacts + :rtype: ~azure.keyvault.certificates.models.Contacts :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -444,7 +440,7 @@ async def delete_certificate_contacts(self, **kwargs: Any) -> _models.Contacts: the certificates/managecontacts permission. :return: Contacts. The Contacts is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.Contacts + :rtype: ~azure.keyvault.certificates.models.Contacts :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -514,7 +510,7 @@ def get_certificate_issuers( :paramtype maxresults: int :return: An iterator like instance of CertificateIssuerItem :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.certificates._generated.models.CertificateIssuerItem] + ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.certificates.models.CertificateIssuerItem] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} @@ -570,7 +566,7 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.CertificateIssuerItem], deserialized["value"]) + list_of_elem = _deserialize(List[_models.CertificateIssuerItem], deserialized.get("value", [])) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -612,12 +608,12 @@ async def set_certificate_issuer( identifiable or sensitive information. Required. :type issuer_name: str :param parameter: Certificate issuer set parameter. Required. - :type parameter: ~azure.keyvault.certificates._generated.models.CertificateIssuerSetParameters + :type parameter: ~azure.keyvault.certificates.models.CertificateIssuerSetParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -640,7 +636,7 @@ async def set_certificate_issuer( Default value is "application/json". :paramtype content_type: str :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -663,7 +659,7 @@ async def set_certificate_issuer( Default value is "application/json". :paramtype content_type: str :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -682,10 +678,10 @@ async def set_certificate_issuer( :type issuer_name: str :param parameter: Certificate issuer set parameter. Is one of the following types: CertificateIssuerSetParameters, JSON, IO[bytes] Required. - :type parameter: ~azure.keyvault.certificates._generated.models.CertificateIssuerSetParameters or JSON or + :type parameter: ~azure.keyvault.certificates.models.CertificateIssuerSetParameters or JSON or IO[bytes] :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -768,12 +764,12 @@ async def update_certificate_issuer( :param issuer_name: The name of the issuer. Required. :type issuer_name: str :param parameter: Certificate issuer update parameter. Required. - :type parameter: ~azure.keyvault.certificates._generated.models.CertificateIssuerUpdateParameters + :type parameter: ~azure.keyvault.certificates.models.CertificateIssuerUpdateParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -794,7 +790,7 @@ async def update_certificate_issuer( Default value is "application/json". :paramtype content_type: str :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -815,7 +811,7 @@ async def update_certificate_issuer( Default value is "application/json". :paramtype content_type: str :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -835,10 +831,10 @@ async def update_certificate_issuer( :type issuer_name: str :param parameter: Certificate issuer update parameter. Is one of the following types: CertificateIssuerUpdateParameters, JSON, IO[bytes] Required. - :type parameter: ~azure.keyvault.certificates._generated.models.CertificateIssuerUpdateParameters or JSON + :type parameter: ~azure.keyvault.certificates.models.CertificateIssuerUpdateParameters or JSON or IO[bytes] :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -915,7 +911,7 @@ async def get_certificate_issuer(self, issuer_name: str, **kwargs: Any) -> _mode :param issuer_name: The name of the issuer. Required. :type issuer_name: str :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -981,7 +977,7 @@ async def delete_certificate_issuer(self, issuer_name: str, **kwargs: Any) -> _m :param issuer_name: The name of the issuer. Required. :type issuer_name: str :return: IssuerBundle. The IssuerBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.IssuerBundle + :rtype: ~azure.keyvault.certificates.models.IssuerBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -1056,12 +1052,12 @@ async def create_certificate( personally identifiable or sensitive information. Required. :type certificate_name: str :param parameters: The parameters to create a certificate. Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateCreateParameters + :type parameters: ~azure.keyvault.certificates.models.CertificateCreateParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1084,7 +1080,7 @@ async def create_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1107,7 +1103,7 @@ async def create_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1129,10 +1125,10 @@ async def create_certificate( :type certificate_name: str :param parameters: The parameters to create a certificate. Is one of the following types: CertificateCreateParameters, JSON, IO[bytes] Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateCreateParameters or JSON or + :type parameters: ~azure.keyvault.certificates.models.CertificateCreateParameters or JSON or IO[bytes] :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -1219,12 +1215,12 @@ async def import_certificate( personally identifiable or sensitive information. Required. :type certificate_name: str :param parameters: The parameters to import the certificate. Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateImportParameters + :type parameters: ~azure.keyvault.certificates.models.CertificateImportParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1249,7 +1245,7 @@ async def import_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1274,7 +1270,7 @@ async def import_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1298,10 +1294,10 @@ async def import_certificate( :type certificate_name: str :param parameters: The parameters to import the certificate. Is one of the following types: CertificateImportParameters, JSON, IO[bytes] Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateImportParameters or JSON or + :type parameters: ~azure.keyvault.certificates.models.CertificateImportParameters or JSON or IO[bytes] :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -1383,7 +1379,7 @@ def get_certificate_versions( :paramtype maxresults: int :return: An iterator like instance of CertificateItem :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.certificates._generated.models.CertificateItem] + ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.certificates.models.CertificateItem] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} @@ -1440,7 +1436,7 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.CertificateItem], deserialized["value"]) + list_of_elem = _deserialize(List[_models.CertificateItem], deserialized.get("value", [])) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -1473,7 +1469,7 @@ async def get_certificate_policy(self, certificate_name: str, **kwargs: Any) -> :param certificate_name: The name of the certificate in a given key vault. Required. :type certificate_name: str :return: CertificatePolicy. The CertificatePolicy is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificatePolicy + :rtype: ~azure.keyvault.certificates.models.CertificatePolicy :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -1546,12 +1542,12 @@ async def update_certificate_policy( :param certificate_name: The name of the certificate in the given vault. Required. :type certificate_name: str :param certificate_policy: The policy for the certificate. Required. - :type certificate_policy: ~azure.keyvault.certificates._generated.models.CertificatePolicy + :type certificate_policy: ~azure.keyvault.certificates.models.CertificatePolicy :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CertificatePolicy. The CertificatePolicy is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificatePolicy + :rtype: ~azure.keyvault.certificates.models.CertificatePolicy :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1572,7 +1568,7 @@ async def update_certificate_policy( Default value is "application/json". :paramtype content_type: str :return: CertificatePolicy. The CertificatePolicy is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificatePolicy + :rtype: ~azure.keyvault.certificates.models.CertificatePolicy :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1598,7 +1594,7 @@ async def update_certificate_policy( Default value is "application/json". :paramtype content_type: str :return: CertificatePolicy. The CertificatePolicy is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificatePolicy + :rtype: ~azure.keyvault.certificates.models.CertificatePolicy :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1618,10 +1614,10 @@ async def update_certificate_policy( :type certificate_name: str :param certificate_policy: The policy for the certificate. Is one of the following types: CertificatePolicy, JSON, IO[bytes] Required. - :type certificate_policy: ~azure.keyvault.certificates._generated.models.CertificatePolicy or JSON or + :type certificate_policy: ~azure.keyvault.certificates.models.CertificatePolicy or JSON or IO[bytes] :return: CertificatePolicy. The CertificatePolicy is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificatePolicy + :rtype: ~azure.keyvault.certificates.models.CertificatePolicy :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -1708,12 +1704,12 @@ async def update_certificate( :param certificate_version: The version of the certificate. Required. :type certificate_version: str :param parameters: The parameters for certificate update. Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateUpdateParameters + :type parameters: ~azure.keyvault.certificates.models.CertificateUpdateParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1743,7 +1739,7 @@ async def update_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1773,7 +1769,7 @@ async def update_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1797,10 +1793,10 @@ async def update_certificate( :type certificate_version: str :param parameters: The parameters for certificate update. Is one of the following types: CertificateUpdateParameters, JSON, IO[bytes] Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateUpdateParameters or JSON or + :type parameters: ~azure.keyvault.certificates.models.CertificateUpdateParameters or JSON or IO[bytes] :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -1882,7 +1878,7 @@ async def get_certificate( not specified, the latest version of the certificate is returned. Required. :type certificate_version: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -1957,12 +1953,12 @@ async def update_certificate_operation( :type certificate_name: str :param certificate_operation: The certificate operation response. Required. :type certificate_operation: - ~azure.keyvault.certificates._generated.models.CertificateOperationUpdateParameter + ~azure.keyvault.certificates.models.CertificateOperationUpdateParameter :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ @@ -1988,7 +1984,7 @@ async def update_certificate_operation( Default value is "application/json". :paramtype content_type: str :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2014,7 +2010,7 @@ async def update_certificate_operation( Default value is "application/json". :paramtype content_type: str :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2035,9 +2031,9 @@ async def update_certificate_operation( :param certificate_operation: The certificate operation response. Is one of the following types: CertificateOperationUpdateParameter, JSON, IO[bytes] Required. :type certificate_operation: - ~azure.keyvault.certificates._generated.models.CertificateOperationUpdateParameter or JSON or IO[bytes] + ~azure.keyvault.certificates.models.CertificateOperationUpdateParameter or JSON or IO[bytes] :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -2113,7 +2109,7 @@ async def get_certificate_operation(self, certificate_name: str, **kwargs: Any) :param certificate_name: The name of the certificate. Required. :type certificate_name: str :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -2180,7 +2176,7 @@ async def delete_certificate_operation(self, certificate_name: str, **kwargs: An :param certificate_name: The name of the certificate. Required. :type certificate_name: str :return: CertificateOperation. The CertificateOperation is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateOperation + :rtype: ~azure.keyvault.certificates.models.CertificateOperation :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -2254,12 +2250,12 @@ async def merge_certificate( :param certificate_name: The name of the certificate. Required. :type certificate_name: str :param parameters: The parameters to merge certificate. Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateMergeParameters + :type parameters: ~azure.keyvault.certificates.models.CertificateMergeParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2281,7 +2277,7 @@ async def merge_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2303,7 +2299,7 @@ async def merge_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2324,10 +2320,10 @@ async def merge_certificate( :type certificate_name: str :param parameters: The parameters to merge certificate. Is one of the following types: CertificateMergeParameters, JSON, IO[bytes] Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateMergeParameters or JSON or + :type parameters: ~azure.keyvault.certificates.models.CertificateMergeParameters or JSON or IO[bytes] :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -2404,7 +2400,7 @@ async def backup_certificate(self, certificate_name: str, **kwargs: Any) -> _mod :param certificate_name: The name of the certificate. Required. :type certificate_name: str :return: BackupCertificateResult. The BackupCertificateResult is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.BackupCertificateResult + :rtype: ~azure.keyvault.certificates.models.BackupCertificateResult :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -2470,12 +2466,12 @@ async def restore_certificate( certificates/restore permission. :param parameters: The parameters to restore the certificate. Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateRestoreParameters + :type parameters: ~azure.keyvault.certificates.models.CertificateRestoreParameters :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2494,7 +2490,7 @@ async def restore_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2513,7 +2509,7 @@ async def restore_certificate( Default value is "application/json". :paramtype content_type: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2528,10 +2524,10 @@ async def restore_certificate( :param parameters: The parameters to restore the certificate. Is one of the following types: CertificateRestoreParameters, JSON, IO[bytes] Required. - :type parameters: ~azure.keyvault.certificates._generated.models.CertificateRestoreParameters or JSON or + :type parameters: ~azure.keyvault.certificates.models.CertificateRestoreParameters or JSON or IO[bytes] :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -2615,7 +2611,7 @@ def get_deleted_certificates( :paramtype include_pending: bool :return: An iterator like instance of DeletedCertificateItem :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.certificates._generated.models.DeletedCertificateItem] + ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.certificates.models.DeletedCertificateItem] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} @@ -2672,7 +2668,7 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.DeletedCertificateItem], deserialized["value"]) + list_of_elem = _deserialize(List[_models.DeletedCertificateItem], deserialized.get("value", [])) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -2707,7 +2703,7 @@ async def get_deleted_certificate(self, certificate_name: str, **kwargs: Any) -> :type certificate_name: str :return: DeletedCertificateBundle. The DeletedCertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.DeletedCertificateBundle + :rtype: ~azure.keyvault.certificates.models.DeletedCertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -2830,7 +2826,7 @@ async def recover_deleted_certificate(self, certificate_name: str, **kwargs: Any :param certificate_name: The name of the deleted certificate. Required. :type certificate_name: str :return: CertificateBundle. The CertificateBundle is compatible with MutableMapping - :rtype: ~azure.keyvault.certificates._generated.models.CertificateBundle + :rtype: ~azure.keyvault.certificates.models.CertificateBundle :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_patch.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_operations/_patch.py similarity index 61% rename from sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_patch.py rename to sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_operations/_patch.py index f7dd32510333..8bcb627aa475 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/_patch.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_operations/_patch.py @@ -1,7 +1,8 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ +# 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. +# -------------------------------------------------------------------------- """Customize generated code here. Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_patch.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_patch.py similarity index 61% rename from sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_patch.py rename to sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_patch.py index f7dd32510333..8bcb627aa475 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_patch.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_patch.py @@ -1,7 +1,8 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ +# 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. +# -------------------------------------------------------------------------- """Customize generated code here. Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_polling_async.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_polling_async.py deleted file mode 100644 index 7204464c9230..000000000000 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_polling_async.py +++ /dev/null @@ -1,63 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -import logging -from typing import Any, Callable, cast, Optional, Union - -from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import AsyncHttpTransport -from azure.core.polling import AsyncPollingMethod - -from .._models import KeyVaultCertificate, CertificateOperation - - -logger = logging.getLogger(__name__) - - -class CreateCertificatePollerAsync(AsyncPollingMethod): - def __init__( - self, pipeline_response: PipelineResponse, get_certificate_command: Callable, interval: int = 5 - ) -> None: - self._pipeline_response = pipeline_response - self._command: Optional[Callable] = None - self._resource: Optional[Union[CertificateOperation, KeyVaultCertificate]] = None - self._pending_certificate_op: Optional[CertificateOperation] = None - self._get_certificate_command = get_certificate_command - self._polling_interval = interval - - async def _update_status(self) -> None: - self._pending_certificate_op = await self._command() if self._command else None - - def initialize(self, client: Any, initial_response: Any, _: Callable) -> None: - self._command = client - self._pending_certificate_op = initial_response - - async def run(self) -> None: - try: - while not self.finished(): - await self._update_status() - if not self.finished(): - # We should always ask the client's transport to sleep, instead of sleeping directly - transport: AsyncHttpTransport = cast(AsyncHttpTransport, self._pipeline_response.context.transport) - await transport.sleep(self._polling_interval) - operation = self._pending_certificate_op - if operation and operation.status and operation.status.lower() == "completed": - self._resource = await self._get_certificate_command() - else: - self._resource = self._pending_certificate_op - except Exception as e: - logger.warning(str(e)) - raise - - def finished(self) -> bool: - operation = self._pending_certificate_op - if operation and operation.issuer_name and operation.issuer_name.lower() == "unknown": - return True - return self._pending_certificate_op.status.lower() != "inprogress" # type: ignore - - def resource(self) -> Union[KeyVaultCertificate, CertificateOperation]: - return self._resource # type: ignore - - def status(self) -> str: - return self._pending_certificate_op.status.lower() # type: ignore diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_vendor.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_vendor.py similarity index 100% rename from sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/aio/_vendor.py rename to sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/aio/_vendor.py diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/models/__init__.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/models/__init__.py similarity index 98% rename from sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/models/__init__.py rename to sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/models/__init__.py index 1f8f05ec4716..90eebaf5ec4b 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/models/__init__.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/models/__init__.py @@ -35,13 +35,13 @@ Contacts, DeletedCertificateBundle, DeletedCertificateItem, + Error, IssuerAttributes, IssuerBundle, IssuerCredentials, IssuerParameters, KeyProperties, KeyVaultError, - KeyVaultErrorError, LifetimeAction, OrganizationDetails, SecretProperties, @@ -83,13 +83,13 @@ "Contacts", "DeletedCertificateBundle", "DeletedCertificateItem", + "Error", "IssuerAttributes", "IssuerBundle", "IssuerCredentials", "IssuerParameters", "KeyProperties", "KeyVaultError", - "KeyVaultErrorError", "LifetimeAction", "OrganizationDetails", "SecretProperties", diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/models/_enums.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/models/_enums.py similarity index 98% rename from sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/models/_enums.py rename to sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/models/_enums.py index fb12ea02410b..d202d777d81e 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/models/_enums.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/models/_enums.py @@ -84,7 +84,7 @@ class JsonWebKeyType(str, Enum, metaclass=CaseInsensitiveEnumMeta): EC_HSM = "EC-HSM" """Elliptic Curve with a private key which is not exportable from the HSM.""" RSA = "RSA" - """RSA (https://tools.ietf.org/html/rfc3447).""" + """RSA (`https://tools.ietf.org/html/rfc3447 `_).""" RSA_HSM = "RSA-HSM" """RSA with a private key which is not exportable from the HSM.""" OCT = "oct" diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/models/_models.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/models/_models.py similarity index 77% rename from sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/models/_models.py rename to sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/models/_models.py index a4f84c772c47..6699abc4ee56 100644 --- a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/_generated/models/_models.py +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/models/_models.py @@ -22,10 +22,12 @@ class Action(_model_base.Model): """The action that will be executed. :ivar action_type: The type of the action. Known values are: "EmailContacts" and "AutoRenew". - :vartype action_type: str or ~azure.keyvault.certificates._generated.models.CertificatePolicyAction + :vartype action_type: str or ~azure.keyvault.certificates.models.CertificatePolicyAction """ - action_type: Optional[Union[str, "_models.CertificatePolicyAction"]] = rest_field() + action_type: Optional[Union[str, "_models.CertificatePolicyAction"]] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) """The type of the action. Known values are: \"EmailContacts\" and \"AutoRenew\".""" @overload @@ -59,13 +61,13 @@ class AdministratorDetails(_model_base.Model): :vartype phone: str """ - first_name: Optional[str] = rest_field() + first_name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """First name.""" - last_name: Optional[str] = rest_field() + last_name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Last name.""" - email_address: Optional[str] = rest_field(name="email") + email_address: Optional[str] = rest_field(name="email", visibility=["read", "create", "update", "delete", "query"]) """Email address.""" - phone: Optional[str] = rest_field() + phone: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Phone number.""" @overload @@ -92,8 +94,6 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: class BackupCertificateResult(_model_base.Model): """The backup certificate result, containing the backup blob. - Readonly variables are only populated by the server, and will be ignored when sending a request. - :ivar value: The backup blob containing the backed up certificate. :vartype value: bytes """ @@ -105,8 +105,6 @@ class BackupCertificateResult(_model_base.Model): class CertificateAttributes(_model_base.Model): """The certificate management attributes. - Readonly variables are only populated by the server, and will be ignored when sending a request. - :ivar enabled: Determines whether the object is enabled. :vartype enabled: bool :ivar not_before: Not before date in UTC. @@ -126,14 +124,18 @@ class CertificateAttributes(_model_base.Model): retention interval. Known values are: "Purgeable", "Recoverable+Purgeable", "Recoverable", "Recoverable+ProtectedSubscription", "CustomizedRecoverable+Purgeable", "CustomizedRecoverable", and "CustomizedRecoverable+ProtectedSubscription". - :vartype recovery_level: str or ~azure.keyvault.certificates._generated.models.DeletionRecoveryLevel + :vartype recovery_level: str or ~azure.keyvault.certificates.models.DeletionRecoveryLevel """ - enabled: Optional[bool] = rest_field() + enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Determines whether the object is enabled.""" - not_before: Optional[datetime.datetime] = rest_field(name="nbf", format="unix-timestamp") + not_before: Optional[datetime.datetime] = rest_field( + name="nbf", visibility=["read", "create", "update", "delete", "query"], format="unix-timestamp" + ) """Not before date in UTC.""" - expires: Optional[datetime.datetime] = rest_field(name="exp", format="unix-timestamp") + expires: Optional[datetime.datetime] = rest_field( + name="exp", visibility=["read", "create", "update", "delete", "query"], format="unix-timestamp" + ) """Expiry date in UTC.""" created: Optional[datetime.datetime] = rest_field(visibility=["read"], format="unix-timestamp") """Creation time in UTC.""" @@ -175,8 +177,6 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: class CertificateBundle(_model_base.Model): """A certificate bundle consists of a certificate (X509) plus its attributes. - Readonly variables are only populated by the server, and will be ignored when sending a request. - :ivar id: The certificate id. :vartype id: str :ivar kid: The key id. @@ -186,14 +186,14 @@ class CertificateBundle(_model_base.Model): :ivar x509_thumbprint: Thumbprint of the certificate. :vartype x509_thumbprint: bytes :ivar policy: The management policy. - :vartype policy: ~azure.keyvault.certificates._generated.models.CertificatePolicy + :vartype policy: ~azure.keyvault.certificates.models.CertificatePolicy :ivar cer: CER contents of x509 certificate. :vartype cer: bytes :ivar content_type: The content type of the secret. eg. 'application/x-pem-file' or 'application/x-pkcs12',. :vartype content_type: str :ivar attributes: The certificate attributes. - :vartype attributes: ~azure.keyvault.certificates._generated.models.CertificateAttributes + :vartype attributes: ~azure.keyvault.certificates.models.CertificateAttributes :ivar tags: Application specific metadata in the form of key-value pairs. :vartype tags: dict[str, str] :ivar preserve_cert_order: Specifies whether the certificate chain preserves its original @@ -211,15 +211,21 @@ class CertificateBundle(_model_base.Model): """Thumbprint of the certificate.""" policy: Optional["_models.CertificatePolicy"] = rest_field(visibility=["read"]) """The management policy.""" - cer: Optional[bytes] = rest_field(format="base64") + cer: Optional[bytes] = rest_field(visibility=["read", "create", "update", "delete", "query"], format="base64") """CER contents of x509 certificate.""" - content_type: Optional[str] = rest_field(name="contentType") + content_type: Optional[str] = rest_field( + name="contentType", visibility=["read", "create", "update", "delete", "query"] + ) """The content type of the secret. eg. 'application/x-pem-file' or 'application/x-pkcs12',.""" - attributes: Optional["_models.CertificateAttributes"] = rest_field() + attributes: Optional["_models.CertificateAttributes"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) """The certificate attributes.""" - tags: Optional[Dict[str, str]] = rest_field() + tags: Optional[Dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Application specific metadata in the form of key-value pairs.""" - preserve_cert_order: Optional[bool] = rest_field(name="preserveCertOrder") + preserve_cert_order: Optional[bool] = rest_field( + name="preserveCertOrder", visibility=["read", "create", "update", "delete", "query"] + ) """Specifies whether the certificate chain preserves its original order. The default value is false, which sets the leaf certificate at index 0.""" @@ -249,9 +255,9 @@ class CertificateCreateParameters(_model_base.Model): """The certificate create parameters. :ivar certificate_policy: The management policy for the certificate. - :vartype certificate_policy: ~azure.keyvault.certificates._generated.models.CertificatePolicy + :vartype certificate_policy: ~azure.keyvault.certificates.models.CertificatePolicy :ivar certificate_attributes: The attributes of the certificate (optional). - :vartype certificate_attributes: ~azure.keyvault.certificates._generated.models.CertificateAttributes + :vartype certificate_attributes: ~azure.keyvault.certificates.models.CertificateAttributes :ivar tags: Application specific metadata in the form of key-value pairs. :vartype tags: dict[str, str] :ivar preserve_cert_order: Specifies whether the certificate chain preserves its original @@ -259,13 +265,19 @@ class CertificateCreateParameters(_model_base.Model): :vartype preserve_cert_order: bool """ - certificate_policy: Optional["_models.CertificatePolicy"] = rest_field(name="policy") + certificate_policy: Optional["_models.CertificatePolicy"] = rest_field( + name="policy", visibility=["read", "create", "update", "delete", "query"] + ) """The management policy for the certificate.""" - certificate_attributes: Optional["_models.CertificateAttributes"] = rest_field(name="attributes") + certificate_attributes: Optional["_models.CertificateAttributes"] = rest_field( + name="attributes", visibility=["read", "create", "update", "delete", "query"] + ) """The attributes of the certificate (optional).""" - tags: Optional[Dict[str, str]] = rest_field() + tags: Optional[Dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Application specific metadata in the form of key-value pairs.""" - preserve_cert_order: Optional[bool] = rest_field(name="preserveCertOrder") + preserve_cert_order: Optional[bool] = rest_field( + name="preserveCertOrder", visibility=["read", "create", "update", "delete", "query"] + ) """Specifies whether the certificate chain preserves its original order. The default value is false, which sets the leaf certificate at index 0.""" @@ -293,8 +305,6 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: class CertificateImportParameters(_model_base.Model): """The certificate import parameters. - All required parameters must be populated in order to send to server. - :ivar base64_encoded_certificate: Base64 encoded representation of the certificate object to import. This certificate needs to contain the private key. Required. :vartype base64_encoded_certificate: str @@ -302,9 +312,9 @@ class CertificateImportParameters(_model_base.Model): for encryption. :vartype password: str :ivar certificate_policy: The management policy for the certificate. - :vartype certificate_policy: ~azure.keyvault.certificates._generated.models.CertificatePolicy + :vartype certificate_policy: ~azure.keyvault.certificates.models.CertificatePolicy :ivar certificate_attributes: The attributes of the certificate (optional). - :vartype certificate_attributes: ~azure.keyvault.certificates._generated.models.CertificateAttributes + :vartype certificate_attributes: ~azure.keyvault.certificates.models.CertificateAttributes :ivar tags: Application specific metadata in the form of key-value pairs. :vartype tags: dict[str, str] :ivar preserve_cert_order: Specifies whether the certificate chain preserves its original @@ -312,18 +322,26 @@ class CertificateImportParameters(_model_base.Model): :vartype preserve_cert_order: bool """ - base64_encoded_certificate: str = rest_field(name="value") + base64_encoded_certificate: str = rest_field( + name="value", visibility=["read", "create", "update", "delete", "query"] + ) """Base64 encoded representation of the certificate object to import. This certificate needs to contain the private key. Required.""" - password: Optional[str] = rest_field(name="pwd") + password: Optional[str] = rest_field(name="pwd", visibility=["read", "create", "update", "delete", "query"]) """If the private key in base64EncodedCertificate is encrypted, the password used for encryption.""" - certificate_policy: Optional["_models.CertificatePolicy"] = rest_field(name="policy") + certificate_policy: Optional["_models.CertificatePolicy"] = rest_field( + name="policy", visibility=["read", "create", "update", "delete", "query"] + ) """The management policy for the certificate.""" - certificate_attributes: Optional["_models.CertificateAttributes"] = rest_field(name="attributes") + certificate_attributes: Optional["_models.CertificateAttributes"] = rest_field( + name="attributes", visibility=["read", "create", "update", "delete", "query"] + ) """The attributes of the certificate (optional).""" - tags: Optional[Dict[str, str]] = rest_field() + tags: Optional[Dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Application specific metadata in the form of key-value pairs.""" - preserve_cert_order: Optional[bool] = rest_field(name="preserveCertOrder") + preserve_cert_order: Optional[bool] = rest_field( + name="preserveCertOrder", visibility=["read", "create", "update", "delete", "query"] + ) """Specifies whether the certificate chain preserves its original order. The default value is false, which sets the leaf certificate at index 0.""" @@ -359,9 +377,9 @@ class CertificateIssuerItem(_model_base.Model): :vartype provider: str """ - id: Optional[str] = rest_field() + id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Certificate Identifier.""" - provider: Optional[str] = rest_field() + provider: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """The issuer provider.""" @overload @@ -386,25 +404,29 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: class CertificateIssuerSetParameters(_model_base.Model): """The certificate issuer set parameters. - All required parameters must be populated in order to send to server. - :ivar provider: The issuer provider. Required. :vartype provider: str :ivar credentials: The credentials to be used for the issuer. - :vartype credentials: ~azure.keyvault.certificates._generated.models.IssuerCredentials + :vartype credentials: ~azure.keyvault.certificates.models.IssuerCredentials :ivar organization_details: Details of the organization as provided to the issuer. - :vartype organization_details: ~azure.keyvault.certificates._generated.models.OrganizationDetails + :vartype organization_details: ~azure.keyvault.certificates.models.OrganizationDetails :ivar attributes: Attributes of the issuer object. - :vartype attributes: ~azure.keyvault.certificates._generated.models.IssuerAttributes + :vartype attributes: ~azure.keyvault.certificates.models.IssuerAttributes """ - provider: str = rest_field() + provider: str = rest_field(visibility=["read", "create", "update", "delete", "query"]) """The issuer provider. Required.""" - credentials: Optional["_models.IssuerCredentials"] = rest_field() + credentials: Optional["_models.IssuerCredentials"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) """The credentials to be used for the issuer.""" - organization_details: Optional["_models.OrganizationDetails"] = rest_field(name="org_details") + organization_details: Optional["_models.OrganizationDetails"] = rest_field( + name="org_details", visibility=["read", "create", "update", "delete", "query"] + ) """Details of the organization as provided to the issuer.""" - attributes: Optional["_models.IssuerAttributes"] = rest_field() + attributes: Optional["_models.IssuerAttributes"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) """Attributes of the issuer object.""" @overload @@ -434,20 +456,26 @@ class CertificateIssuerUpdateParameters(_model_base.Model): :ivar provider: The issuer provider. :vartype provider: str :ivar credentials: The credentials to be used for the issuer. - :vartype credentials: ~azure.keyvault.certificates._generated.models.IssuerCredentials + :vartype credentials: ~azure.keyvault.certificates.models.IssuerCredentials :ivar organization_details: Details of the organization as provided to the issuer. - :vartype organization_details: ~azure.keyvault.certificates._generated.models.OrganizationDetails + :vartype organization_details: ~azure.keyvault.certificates.models.OrganizationDetails :ivar attributes: Attributes of the issuer object. - :vartype attributes: ~azure.keyvault.certificates._generated.models.IssuerAttributes + :vartype attributes: ~azure.keyvault.certificates.models.IssuerAttributes """ - provider: Optional[str] = rest_field() + provider: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """The issuer provider.""" - credentials: Optional["_models.IssuerCredentials"] = rest_field() + credentials: Optional["_models.IssuerCredentials"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) """The credentials to be used for the issuer.""" - organization_details: Optional["_models.OrganizationDetails"] = rest_field(name="org_details") + organization_details: Optional["_models.OrganizationDetails"] = rest_field( + name="org_details", visibility=["read", "create", "update", "delete", "query"] + ) """Details of the organization as provided to the issuer.""" - attributes: Optional["_models.IssuerAttributes"] = rest_field() + attributes: Optional["_models.IssuerAttributes"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) """Attributes of the issuer object.""" @overload @@ -477,20 +505,24 @@ class CertificateItem(_model_base.Model): :ivar id: Certificate identifier. :vartype id: str :ivar attributes: The certificate management attributes. - :vartype attributes: ~azure.keyvault.certificates._generated.models.CertificateAttributes + :vartype attributes: ~azure.keyvault.certificates.models.CertificateAttributes :ivar tags: Application specific metadata in the form of key-value pairs. :vartype tags: dict[str, str] :ivar x509_thumbprint: Thumbprint of the certificate. :vartype x509_thumbprint: bytes """ - id: Optional[str] = rest_field() + id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Certificate identifier.""" - attributes: Optional["_models.CertificateAttributes"] = rest_field() + attributes: Optional["_models.CertificateAttributes"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) """The certificate management attributes.""" - tags: Optional[Dict[str, str]] = rest_field() + tags: Optional[Dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Application specific metadata in the form of key-value pairs.""" - x509_thumbprint: Optional[bytes] = rest_field(name="x5t", format="base64url") + x509_thumbprint: Optional[bytes] = rest_field( + name="x5t", visibility=["read", "create", "update", "delete", "query"], format="base64url" + ) """Thumbprint of the certificate.""" @overload @@ -517,21 +549,23 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: class CertificateMergeParameters(_model_base.Model): """The certificate merge parameters. - All required parameters must be populated in order to send to server. - :ivar x509_certificates: The certificate or the certificate chain to merge. Required. :vartype x509_certificates: list[bytes] :ivar certificate_attributes: The attributes of the certificate (optional). - :vartype certificate_attributes: ~azure.keyvault.certificates._generated.models.CertificateAttributes + :vartype certificate_attributes: ~azure.keyvault.certificates.models.CertificateAttributes :ivar tags: Application specific metadata in the form of key-value pairs. :vartype tags: dict[str, str] """ - x509_certificates: List[bytes] = rest_field(name="x5c", format="base64") + x509_certificates: List[bytes] = rest_field( + name="x5c", visibility=["read", "create", "update", "delete", "query"], format="base64" + ) """The certificate or the certificate chain to merge. Required.""" - certificate_attributes: Optional["_models.CertificateAttributes"] = rest_field(name="attributes") + certificate_attributes: Optional["_models.CertificateAttributes"] = rest_field( + name="attributes", visibility=["read", "create", "update", "delete", "query"] + ) """The attributes of the certificate (optional).""" - tags: Optional[Dict[str, str]] = rest_field() + tags: Optional[Dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Application specific metadata in the form of key-value pairs.""" @overload @@ -557,12 +591,10 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: class CertificateOperation(_model_base.Model): """A certificate operation is returned in case of asynchronous requests. - Readonly variables are only populated by the server, and will be ignored when sending a request. - :ivar id: The certificate id. :vartype id: str :ivar issuer_parameters: Parameters for the issuer of the X509 component of a certificate. - :vartype issuer_parameters: ~azure.keyvault.certificates._generated.models.IssuerParameters + :vartype issuer_parameters: ~azure.keyvault.certificates.models.IssuerParameters :ivar csr: The certificate signing request (CSR) that is being used in the certificate operation. :vartype csr: bytes @@ -574,7 +606,7 @@ class CertificateOperation(_model_base.Model): :ivar status_details: The status details of the certificate operation. :vartype status_details: str :ivar error: Error encountered, if any, during the certificate operation. - :vartype error: ~azure.keyvault.certificates._generated.models.KeyVaultErrorError + :vartype error: ~azure.keyvault.certificates.models.Error :ivar target: Location which contains the result of the certificate operation. :vartype target: str :ivar preserve_cert_order: Specifies whether the certificate chain preserves its original @@ -586,24 +618,28 @@ class CertificateOperation(_model_base.Model): id: Optional[str] = rest_field(visibility=["read"]) """The certificate id.""" - issuer_parameters: Optional["_models.IssuerParameters"] = rest_field(name="issuer") + issuer_parameters: Optional["_models.IssuerParameters"] = rest_field( + name="issuer", visibility=["read", "create", "update", "delete", "query"] + ) """Parameters for the issuer of the X509 component of a certificate.""" - csr: Optional[bytes] = rest_field(format="base64") + csr: Optional[bytes] = rest_field(visibility=["read", "create", "update", "delete", "query"], format="base64") """The certificate signing request (CSR) that is being used in the certificate operation.""" - cancellation_requested: Optional[bool] = rest_field() + cancellation_requested: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Indicates if cancellation was requested on the certificate operation.""" - status: Optional[str] = rest_field() + status: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Status of the certificate operation.""" - status_details: Optional[str] = rest_field() + status_details: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """The status details of the certificate operation.""" - error: Optional["_models.KeyVaultErrorError"] = rest_field() + error: Optional["_models.Error"] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Error encountered, if any, during the certificate operation.""" - target: Optional[str] = rest_field() + target: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Location which contains the result of the certificate operation.""" - preserve_cert_order: Optional[bool] = rest_field(name="preserveCertOrder") + preserve_cert_order: Optional[bool] = rest_field( + name="preserveCertOrder", visibility=["read", "create", "update", "delete", "query"] + ) """Specifies whether the certificate chain preserves its original order. The default value is false, which sets the leaf certificate at index 0.""" - request_id: Optional[str] = rest_field() + request_id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Identifier for the certificate operation.""" @overload @@ -615,7 +651,7 @@ def __init__( cancellation_requested: Optional[bool] = None, status: Optional[str] = None, status_details: Optional[str] = None, - error: Optional["_models.KeyVaultErrorError"] = None, + error: Optional["_models.Error"] = None, target: Optional[str] = None, preserve_cert_order: Optional[bool] = None, request_id: Optional[str] = None, @@ -635,14 +671,12 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: class CertificateOperationUpdateParameter(_model_base.Model): """The certificate operation update parameters. - All required parameters must be populated in order to send to server. - :ivar cancellation_requested: Indicates if cancellation was requested on the certificate operation. Required. :vartype cancellation_requested: bool """ - cancellation_requested: bool = rest_field() + cancellation_requested: bool = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Indicates if cancellation was requested on the certificate operation. Required.""" @overload @@ -666,39 +700,49 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: class CertificatePolicy(_model_base.Model): """Management policy for a certificate. - Readonly variables are only populated by the server, and will be ignored when sending a request. - :ivar id: The certificate id. :vartype id: str :ivar key_properties: Properties of the key backing a certificate. - :vartype key_properties: ~azure.keyvault.certificates._generated.models.KeyProperties + :vartype key_properties: ~azure.keyvault.certificates.models.KeyProperties :ivar secret_properties: Properties of the secret backing a certificate. - :vartype secret_properties: ~azure.keyvault.certificates._generated.models.SecretProperties + :vartype secret_properties: ~azure.keyvault.certificates.models.SecretProperties :ivar x509_certificate_properties: Properties of the X509 component of a certificate. :vartype x509_certificate_properties: - ~azure.keyvault.certificates._generated.models.X509CertificateProperties + ~azure.keyvault.certificates.models.X509CertificateProperties :ivar lifetime_actions: Actions that will be performed by Key Vault over the lifetime of a certificate. - :vartype lifetime_actions: list[~azure.keyvault.certificates._generated.models.LifetimeAction] + :vartype lifetime_actions: list[~azure.keyvault.certificates.models.LifetimeAction] :ivar issuer_parameters: Parameters for the issuer of the X509 component of a certificate. - :vartype issuer_parameters: ~azure.keyvault.certificates._generated.models.IssuerParameters + :vartype issuer_parameters: ~azure.keyvault.certificates.models.IssuerParameters :ivar attributes: The certificate attributes. - :vartype attributes: ~azure.keyvault.certificates._generated.models.CertificateAttributes + :vartype attributes: ~azure.keyvault.certificates.models.CertificateAttributes """ id: Optional[str] = rest_field(visibility=["read"]) """The certificate id.""" - key_properties: Optional["_models.KeyProperties"] = rest_field(name="key_props") + key_properties: Optional["_models.KeyProperties"] = rest_field( + name="key_props", visibility=["read", "create", "update", "delete", "query"] + ) """Properties of the key backing a certificate.""" - secret_properties: Optional["_models.SecretProperties"] = rest_field(name="secret_props") + secret_properties: Optional["_models.SecretProperties"] = rest_field( + name="secret_props", visibility=["read", "create", "update", "delete", "query"] + ) """Properties of the secret backing a certificate.""" - x509_certificate_properties: Optional["_models.X509CertificateProperties"] = rest_field(name="x509_props") + x509_certificate_properties: Optional["_models.X509CertificateProperties"] = rest_field( + name="x509_props", visibility=["read", "create", "update", "delete", "query"] + ) """Properties of the X509 component of a certificate.""" - lifetime_actions: Optional[List["_models.LifetimeAction"]] = rest_field() + lifetime_actions: Optional[List["_models.LifetimeAction"]] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) """Actions that will be performed by Key Vault over the lifetime of a certificate.""" - issuer_parameters: Optional["_models.IssuerParameters"] = rest_field(name="issuer") + issuer_parameters: Optional["_models.IssuerParameters"] = rest_field( + name="issuer", visibility=["read", "create", "update", "delete", "query"] + ) """Parameters for the issuer of the X509 component of a certificate.""" - attributes: Optional["_models.CertificateAttributes"] = rest_field() + attributes: Optional["_models.CertificateAttributes"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) """The certificate attributes.""" @overload @@ -727,14 +771,14 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: class CertificateRestoreParameters(_model_base.Model): """The certificate restore parameters. - All required parameters must be populated in order to send to server. - :ivar certificate_bundle_backup: The backup blob associated with a certificate bundle. Required. :vartype certificate_bundle_backup: bytes """ - certificate_bundle_backup: bytes = rest_field(name="value", format="base64url") + certificate_bundle_backup: bytes = rest_field( + name="value", visibility=["read", "create", "update", "delete", "query"], format="base64url" + ) """The backup blob associated with a certificate bundle. Required.""" @overload @@ -759,18 +803,22 @@ class CertificateUpdateParameters(_model_base.Model): """The certificate update parameters. :ivar certificate_policy: The management policy for the certificate. - :vartype certificate_policy: ~azure.keyvault.certificates._generated.models.CertificatePolicy + :vartype certificate_policy: ~azure.keyvault.certificates.models.CertificatePolicy :ivar certificate_attributes: The attributes of the certificate (optional). - :vartype certificate_attributes: ~azure.keyvault.certificates._generated.models.CertificateAttributes + :vartype certificate_attributes: ~azure.keyvault.certificates.models.CertificateAttributes :ivar tags: Application specific metadata in the form of key-value pairs. :vartype tags: dict[str, str] """ - certificate_policy: Optional["_models.CertificatePolicy"] = rest_field(name="policy") + certificate_policy: Optional["_models.CertificatePolicy"] = rest_field( + name="policy", visibility=["read", "create", "update", "delete", "query"] + ) """The management policy for the certificate.""" - certificate_attributes: Optional["_models.CertificateAttributes"] = rest_field(name="attributes") + certificate_attributes: Optional["_models.CertificateAttributes"] = rest_field( + name="attributes", visibility=["read", "create", "update", "delete", "query"] + ) """The attributes of the certificate (optional).""" - tags: Optional[Dict[str, str]] = rest_field() + tags: Optional[Dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Application specific metadata in the form of key-value pairs.""" @overload @@ -804,11 +852,11 @@ class Contact(_model_base.Model): :vartype phone: str """ - email_address: Optional[str] = rest_field(name="email") + email_address: Optional[str] = rest_field(name="email", visibility=["read", "create", "update", "delete", "query"]) """Email address.""" - name: Optional[str] = rest_field() + name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Name.""" - phone: Optional[str] = rest_field() + phone: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Phone number.""" @overload @@ -834,17 +882,17 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: class Contacts(_model_base.Model): """The contacts for the vault certificates. - Readonly variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Identifier for the contacts collection. :vartype id: str :ivar contact_list: The contact list for the vault certificates. - :vartype contact_list: list[~azure.keyvault.certificates._generated.models.Contact] + :vartype contact_list: list[~azure.keyvault.certificates.models.Contact] """ id: Optional[str] = rest_field(visibility=["read"]) """Identifier for the contacts collection.""" - contact_list: Optional[List["_models.Contact"]] = rest_field(name="contacts") + contact_list: Optional[List["_models.Contact"]] = rest_field( + name="contacts", visibility=["read", "create", "update", "delete", "query"] + ) """The contact list for the vault certificates.""" @overload @@ -869,8 +917,6 @@ class DeletedCertificateBundle(_model_base.Model): """A Deleted Certificate consisting of its previous id, attributes and its tags, as well as information on when it will be purged. - Readonly variables are only populated by the server, and will be ignored when sending a request. - :ivar id: The certificate id. :vartype id: str :ivar kid: The key id. @@ -880,14 +926,14 @@ class DeletedCertificateBundle(_model_base.Model): :ivar x509_thumbprint: Thumbprint of the certificate. :vartype x509_thumbprint: bytes :ivar policy: The management policy. - :vartype policy: ~azure.keyvault.certificates._generated.models.CertificatePolicy + :vartype policy: ~azure.keyvault.certificates.models.CertificatePolicy :ivar cer: CER contents of x509 certificate. :vartype cer: bytes :ivar content_type: The content type of the secret. eg. 'application/x-pem-file' or 'application/x-pkcs12',. :vartype content_type: str :ivar attributes: The certificate attributes. - :vartype attributes: ~azure.keyvault.certificates._generated.models.CertificateAttributes + :vartype attributes: ~azure.keyvault.certificates.models.CertificateAttributes :ivar tags: Application specific metadata in the form of key-value pairs. :vartype tags: dict[str, str] :ivar preserve_cert_order: Specifies whether the certificate chain preserves its original @@ -912,18 +958,26 @@ class DeletedCertificateBundle(_model_base.Model): """Thumbprint of the certificate.""" policy: Optional["_models.CertificatePolicy"] = rest_field(visibility=["read"]) """The management policy.""" - cer: Optional[bytes] = rest_field(format="base64") + cer: Optional[bytes] = rest_field(visibility=["read", "create", "update", "delete", "query"], format="base64") """CER contents of x509 certificate.""" - content_type: Optional[str] = rest_field(name="contentType") + content_type: Optional[str] = rest_field( + name="contentType", visibility=["read", "create", "update", "delete", "query"] + ) """The content type of the secret. eg. 'application/x-pem-file' or 'application/x-pkcs12',.""" - attributes: Optional["_models.CertificateAttributes"] = rest_field() + attributes: Optional["_models.CertificateAttributes"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) """The certificate attributes.""" - tags: Optional[Dict[str, str]] = rest_field() + tags: Optional[Dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Application specific metadata in the form of key-value pairs.""" - preserve_cert_order: Optional[bool] = rest_field(name="preserveCertOrder") + preserve_cert_order: Optional[bool] = rest_field( + name="preserveCertOrder", visibility=["read", "create", "update", "delete", "query"] + ) """Specifies whether the certificate chain preserves its original order. The default value is false, which sets the leaf certificate at index 0.""" - recovery_id: Optional[str] = rest_field(name="recoveryId") + recovery_id: Optional[str] = rest_field( + name="recoveryId", visibility=["read", "create", "update", "delete", "query"] + ) """The url of the recovery object, used to identify and recover the deleted certificate.""" scheduled_purge_date: Optional[datetime.datetime] = rest_field( name="scheduledPurgeDate", visibility=["read"], format="unix-timestamp" @@ -960,12 +1014,10 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: class DeletedCertificateItem(_model_base.Model): """The deleted certificate item containing metadata about the deleted certificate. - Readonly variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Certificate identifier. :vartype id: str :ivar attributes: The certificate management attributes. - :vartype attributes: ~azure.keyvault.certificates._generated.models.CertificateAttributes + :vartype attributes: ~azure.keyvault.certificates.models.CertificateAttributes :ivar tags: Application specific metadata in the form of key-value pairs. :vartype tags: dict[str, str] :ivar x509_thumbprint: Thumbprint of the certificate. @@ -979,15 +1031,21 @@ class DeletedCertificateItem(_model_base.Model): :vartype deleted_date: ~datetime.datetime """ - id: Optional[str] = rest_field() + id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Certificate identifier.""" - attributes: Optional["_models.CertificateAttributes"] = rest_field() + attributes: Optional["_models.CertificateAttributes"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) """The certificate management attributes.""" - tags: Optional[Dict[str, str]] = rest_field() + tags: Optional[Dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Application specific metadata in the form of key-value pairs.""" - x509_thumbprint: Optional[bytes] = rest_field(name="x5t", format="base64url") + x509_thumbprint: Optional[bytes] = rest_field( + name="x5t", visibility=["read", "create", "update", "delete", "query"], format="base64url" + ) """Thumbprint of the certificate.""" - recovery_id: Optional[str] = rest_field(name="recoveryId") + recovery_id: Optional[str] = rest_field( + name="recoveryId", visibility=["read", "create", "update", "delete", "query"] + ) """The url of the recovery object, used to identify and recover the deleted certificate.""" scheduled_purge_date: Optional[datetime.datetime] = rest_field( name="scheduledPurgeDate", visibility=["read"], format="unix-timestamp" @@ -1020,11 +1078,28 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: super().__init__(*args, **kwargs) +class Error(_model_base.Model): + """The key vault server error. + + :ivar code: The error code. + :vartype code: str + :ivar message: The error message. + :vartype message: str + :ivar inner_error: The key vault server error. + :vartype inner_error: ~azure.keyvault.certificates.models.Error + """ + + code: Optional[str] = rest_field(visibility=["read"]) + """The error code.""" + message: Optional[str] = rest_field(visibility=["read"]) + """The error message.""" + inner_error: Optional["_models.Error"] = rest_field(name="innererror", visibility=["read"]) + """The key vault server error.""" + + class IssuerAttributes(_model_base.Model): """The attributes of an issuer managed by the Key Vault service. - Readonly variables are only populated by the server, and will be ignored when sending a request. - :ivar enabled: Determines whether the issuer is enabled. :vartype enabled: bool :ivar created: Creation time in UTC. @@ -1033,7 +1108,7 @@ class IssuerAttributes(_model_base.Model): :vartype updated: ~datetime.datetime """ - enabled: Optional[bool] = rest_field() + enabled: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Determines whether the issuer is enabled.""" created: Optional[datetime.datetime] = rest_field(visibility=["read"], format="unix-timestamp") """Creation time in UTC.""" @@ -1061,29 +1136,33 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: class IssuerBundle(_model_base.Model): """The issuer for Key Vault certificate. - Readonly variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Identifier for the issuer object. :vartype id: str :ivar provider: The issuer provider. :vartype provider: str :ivar credentials: The credentials to be used for the issuer. - :vartype credentials: ~azure.keyvault.certificates._generated.models.IssuerCredentials + :vartype credentials: ~azure.keyvault.certificates.models.IssuerCredentials :ivar organization_details: Details of the organization as provided to the issuer. - :vartype organization_details: ~azure.keyvault.certificates._generated.models.OrganizationDetails + :vartype organization_details: ~azure.keyvault.certificates.models.OrganizationDetails :ivar attributes: Attributes of the issuer object. - :vartype attributes: ~azure.keyvault.certificates._generated.models.IssuerAttributes + :vartype attributes: ~azure.keyvault.certificates.models.IssuerAttributes """ id: Optional[str] = rest_field(visibility=["read"]) """Identifier for the issuer object.""" - provider: Optional[str] = rest_field() + provider: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """The issuer provider.""" - credentials: Optional["_models.IssuerCredentials"] = rest_field() + credentials: Optional["_models.IssuerCredentials"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) """The credentials to be used for the issuer.""" - organization_details: Optional["_models.OrganizationDetails"] = rest_field(name="org_details") + organization_details: Optional["_models.OrganizationDetails"] = rest_field( + name="org_details", visibility=["read", "create", "update", "delete", "query"] + ) """Details of the organization as provided to the issuer.""" - attributes: Optional["_models.IssuerAttributes"] = rest_field() + attributes: Optional["_models.IssuerAttributes"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) """Attributes of the issuer object.""" @overload @@ -1116,9 +1195,9 @@ class IssuerCredentials(_model_base.Model): :vartype password: str """ - account_id: Optional[str] = rest_field() + account_id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """The user name/account name/account id.""" - password: Optional[str] = rest_field(name="pwd") + password: Optional[str] = rest_field(name="pwd", visibility=["read", "create", "update", "delete", "query"]) """The password/secret/account key.""" @overload @@ -1154,11 +1233,13 @@ class IssuerParameters(_model_base.Model): :vartype certificate_transparency: bool """ - name: Optional[str] = rest_field() + name: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Name of the referenced issuer object or reserved names; for example, 'Self' or 'Unknown'.""" - certificate_type: Optional[str] = rest_field(name="cty") + certificate_type: Optional[str] = rest_field(name="cty", visibility=["read", "create", "update", "delete", "query"]) """Certificate type as supported by the provider (optional); for example 'OV-SSL', 'EV-SSL'.""" - certificate_transparency: Optional[bool] = rest_field(name="cert_transparency") + certificate_transparency: Optional[bool] = rest_field( + name="cert_transparency", visibility=["read", "create", "update", "delete", "query"] + ) """Indicates if the certificates generated under this policy should be published to certificate transparency logs.""" @@ -1190,27 +1271,31 @@ class KeyProperties(_model_base.Model): :vartype exportable: bool :ivar key_type: The type of key pair to be used for the certificate. Known values are: "EC", "EC-HSM", "RSA", "RSA-HSM", "oct", and "oct-HSM". - :vartype key_type: str or ~azure.keyvault.certificates._generated.models.JsonWebKeyType + :vartype key_type: str or ~azure.keyvault.certificates.models.JsonWebKeyType :ivar key_size: The key size in bits. For example: 2048, 3072, or 4096 for RSA. :vartype key_size: int :ivar reuse_key: Indicates if the same key pair will be used on certificate renewal. :vartype reuse_key: bool :ivar curve: Elliptic curve name. For valid values, see JsonWebKeyCurveName. Known values are: "P-256", "P-384", "P-521", and "P-256K". - :vartype curve: str or ~azure.keyvault.certificates._generated.models.JsonWebKeyCurveName + :vartype curve: str or ~azure.keyvault.certificates.models.JsonWebKeyCurveName """ - exportable: Optional[bool] = rest_field() + exportable: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Indicates if the private key can be exported. Release policy must be provided when creating the first version of an exportable key.""" - key_type: Optional[Union[str, "_models.JsonWebKeyType"]] = rest_field(name="kty") + key_type: Optional[Union[str, "_models.JsonWebKeyType"]] = rest_field( + name="kty", visibility=["read", "create", "update", "delete", "query"] + ) """The type of key pair to be used for the certificate. Known values are: \"EC\", \"EC-HSM\", \"RSA\", \"RSA-HSM\", \"oct\", and \"oct-HSM\".""" - key_size: Optional[int] = rest_field() + key_size: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """The key size in bits. For example: 2048, 3072, or 4096 for RSA.""" - reuse_key: Optional[bool] = rest_field() + reuse_key: Optional[bool] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Indicates if the same key pair will be used on certificate renewal.""" - curve: Optional[Union[str, "_models.JsonWebKeyCurveName"]] = rest_field(name="crv") + curve: Optional[Union[str, "_models.JsonWebKeyCurveName"]] = rest_field( + name="crv", visibility=["read", "create", "update", "delete", "query"] + ) """Elliptic curve name. For valid values, see JsonWebKeyCurveName. Known values are: \"P-256\", \"P-384\", \"P-521\", and \"P-256K\".""" @@ -1239,34 +1324,11 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: class KeyVaultError(_model_base.Model): """The key vault error exception. - Readonly variables are only populated by the server, and will be ignored when sending a request. - :ivar error: The key vault server error. - :vartype error: ~azure.keyvault.certificates._generated.models.KeyVaultErrorError + :vartype error: ~azure.keyvault.certificates.models.Error """ - error: Optional["_models.KeyVaultErrorError"] = rest_field(visibility=["read"]) - """The key vault server error.""" - - -class KeyVaultErrorError(_model_base.Model): - """KeyVaultErrorError. - - Readonly variables are only populated by the server, and will be ignored when sending a request. - - :ivar code: The error code. - :vartype code: str - :ivar message: The error message. - :vartype message: str - :ivar inner_error: The key vault server error. - :vartype inner_error: ~azure.keyvault.certificates._generated.models.KeyVaultErrorError - """ - - code: Optional[str] = rest_field(visibility=["read"]) - """The error code.""" - message: Optional[str] = rest_field(visibility=["read"]) - """The error message.""" - inner_error: Optional["_models.KeyVaultErrorError"] = rest_field(name="innererror", visibility=["read"]) + error: Optional["_models.Error"] = rest_field(visibility=["read"]) """The key vault server error.""" @@ -1274,14 +1336,14 @@ class LifetimeAction(_model_base.Model): """Action and its trigger that will be performed by Key Vault over the lifetime of a certificate. :ivar trigger: The condition that will execute the action. - :vartype trigger: ~azure.keyvault.certificates._generated.models.Trigger + :vartype trigger: ~azure.keyvault.certificates.models.Trigger :ivar action: The action that will be executed. - :vartype action: ~azure.keyvault.certificates._generated.models.Action + :vartype action: ~azure.keyvault.certificates.models.Action """ - trigger: Optional["_models.Trigger"] = rest_field() + trigger: Optional["_models.Trigger"] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """The condition that will execute the action.""" - action: Optional["_models.Action"] = rest_field() + action: Optional["_models.Action"] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """The action that will be executed.""" @overload @@ -1309,12 +1371,14 @@ class OrganizationDetails(_model_base.Model): :ivar id: Id of the organization. :vartype id: str :ivar admin_details: Details of the organization administrator. - :vartype admin_details: list[~azure.keyvault.certificates._generated.models.AdministratorDetails] + :vartype admin_details: list[~azure.keyvault.certificates.models.AdministratorDetails] """ - id: Optional[str] = rest_field() + id: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Id of the organization.""" - admin_details: Optional[List["_models.AdministratorDetails"]] = rest_field() + admin_details: Optional[List["_models.AdministratorDetails"]] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) """Details of the organization administrator.""" @overload @@ -1343,7 +1407,9 @@ class SecretProperties(_model_base.Model): :vartype content_type: str """ - content_type: Optional[str] = rest_field(name="contentType") + content_type: Optional[str] = rest_field( + name="contentType", visibility=["read", "create", "update", "delete", "query"] + ) """The media type (MIME type).""" @overload @@ -1375,11 +1441,11 @@ class SubjectAlternativeNames(_model_base.Model): :vartype upns: list[str] """ - emails: Optional[List[str]] = rest_field() + emails: Optional[List[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Email addresses.""" - dns_names: Optional[List[str]] = rest_field() + dns_names: Optional[List[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Domain names.""" - upns: Optional[List[str]] = rest_field() + upns: Optional[List[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """User principal names.""" @overload @@ -1414,9 +1480,9 @@ class Trigger(_model_base.Model): :vartype days_before_expiry: int """ - lifetime_percentage: Optional[int] = rest_field() + lifetime_percentage: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Percentage of lifetime at which to trigger. Value should be between 1 and 99.""" - days_before_expiry: Optional[int] = rest_field() + days_before_expiry: Optional[int] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Days before expiry to attempt renewal. Value should be between 1 and validity_in_months multiplied by 27. If validity_in_months is 36, then value should be between 1 and 972 (36 * 27).""" @@ -1448,22 +1514,28 @@ class X509CertificateProperties(_model_base.Model): :ivar ekus: The enhanced key usage. :vartype ekus: list[str] :ivar subject_alternative_names: The subject alternative names. - :vartype subject_alternative_names: ~azure.keyvault.certificates._generated.models.SubjectAlternativeNames + :vartype subject_alternative_names: ~azure.keyvault.certificates.models.SubjectAlternativeNames :ivar key_usage: Defines how the certificate's key may be used. - :vartype key_usage: list[str or ~azure.keyvault.certificates._generated.models.KeyUsageType] + :vartype key_usage: list[str or ~azure.keyvault.certificates.models.KeyUsageType] :ivar validity_in_months: The duration that the certificate is valid in months. :vartype validity_in_months: int """ - subject: Optional[str] = rest_field() + subject: Optional[str] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """The subject name. Should be a valid X509 distinguished Name.""" - ekus: Optional[List[str]] = rest_field() + ekus: Optional[List[str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """The enhanced key usage.""" - subject_alternative_names: Optional["_models.SubjectAlternativeNames"] = rest_field(name="sans") + subject_alternative_names: Optional["_models.SubjectAlternativeNames"] = rest_field( + name="sans", visibility=["read", "create", "update", "delete", "query"] + ) """The subject alternative names.""" - key_usage: Optional[List[Union[str, "_models.KeyUsageType"]]] = rest_field() + key_usage: Optional[List[Union[str, "_models.KeyUsageType"]]] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) """Defines how the certificate's key may be used.""" - validity_in_months: Optional[int] = rest_field(name="validity_months") + validity_in_months: Optional[int] = rest_field( + name="validity_months", visibility=["read", "create", "update", "delete", "query"] + ) """The duration that the certificate is valid in months.""" @overload diff --git a/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/models/_patch.py b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/models/_patch.py new file mode 100644 index 000000000000..8bcb627aa475 --- /dev/null +++ b/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates/models/_patch.py @@ -0,0 +1,21 @@ +# 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. +# -------------------------------------------------------------------------- +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" +from typing import List + +__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/sdk/keyvault/azure-keyvault-certificates/samples/backup_restore_operations.py b/sdk/keyvault/azure-keyvault-certificates/samples/backup_restore_operations.py index c6e83e410383..5f9eff53f9ef 100644 --- a/sdk/keyvault/azure-keyvault-certificates/samples/backup_restore_operations.py +++ b/sdk/keyvault/azure-keyvault-certificates/samples/backup_restore_operations.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/samples/backup_restore_operations_async.py b/sdk/keyvault/azure-keyvault-certificates/samples/backup_restore_operations_async.py index 8ed40e3b8210..e85cd9d5967c 100644 --- a/sdk/keyvault/azure-keyvault-certificates/samples/backup_restore_operations_async.py +++ b/sdk/keyvault/azure-keyvault-certificates/samples/backup_restore_operations_async.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/samples/contacts.py b/sdk/keyvault/azure-keyvault-certificates/samples/contacts.py index 0c518e230ecf..2cb45aa52862 100644 --- a/sdk/keyvault/azure-keyvault-certificates/samples/contacts.py +++ b/sdk/keyvault/azure-keyvault-certificates/samples/contacts.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/samples/contacts_async.py b/sdk/keyvault/azure-keyvault-certificates/samples/contacts_async.py index 994b7db23004..fc05c0f3ebe4 100644 --- a/sdk/keyvault/azure-keyvault-certificates/samples/contacts_async.py +++ b/sdk/keyvault/azure-keyvault-certificates/samples/contacts_async.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/samples/hello_world.py b/sdk/keyvault/azure-keyvault-certificates/samples/hello_world.py index b2df23b1a491..baeaabff1e42 100644 --- a/sdk/keyvault/azure-keyvault-certificates/samples/hello_world.py +++ b/sdk/keyvault/azure-keyvault-certificates/samples/hello_world.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/samples/hello_world_async.py b/sdk/keyvault/azure-keyvault-certificates/samples/hello_world_async.py index d712b51e5b82..826fbba557d3 100644 --- a/sdk/keyvault/azure-keyvault-certificates/samples/hello_world_async.py +++ b/sdk/keyvault/azure-keyvault-certificates/samples/hello_world_async.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/samples/import_certificate.py b/sdk/keyvault/azure-keyvault-certificates/samples/import_certificate.py index 3819b769b131..a886ba8f099f 100644 --- a/sdk/keyvault/azure-keyvault-certificates/samples/import_certificate.py +++ b/sdk/keyvault/azure-keyvault-certificates/samples/import_certificate.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/samples/import_certificate_async.py b/sdk/keyvault/azure-keyvault-certificates/samples/import_certificate_async.py index 150d071788d1..de8b3619d08b 100644 --- a/sdk/keyvault/azure-keyvault-certificates/samples/import_certificate_async.py +++ b/sdk/keyvault/azure-keyvault-certificates/samples/import_certificate_async.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/samples/issuers.py b/sdk/keyvault/azure-keyvault-certificates/samples/issuers.py index 57936e4f917f..e7babf5e0658 100644 --- a/sdk/keyvault/azure-keyvault-certificates/samples/issuers.py +++ b/sdk/keyvault/azure-keyvault-certificates/samples/issuers.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/samples/issuers_async.py b/sdk/keyvault/azure-keyvault-certificates/samples/issuers_async.py index 9aed2e1af2fe..393c1ffbcaef 100644 --- a/sdk/keyvault/azure-keyvault-certificates/samples/issuers_async.py +++ b/sdk/keyvault/azure-keyvault-certificates/samples/issuers_async.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/samples/list_operations.py b/sdk/keyvault/azure-keyvault-certificates/samples/list_operations.py index 8345036baedc..21ac303178e6 100644 --- a/sdk/keyvault/azure-keyvault-certificates/samples/list_operations.py +++ b/sdk/keyvault/azure-keyvault-certificates/samples/list_operations.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/samples/list_operations_async.py b/sdk/keyvault/azure-keyvault-certificates/samples/list_operations_async.py index 54d21eb47342..21d92d58ed7b 100644 --- a/sdk/keyvault/azure-keyvault-certificates/samples/list_operations_async.py +++ b/sdk/keyvault/azure-keyvault-certificates/samples/list_operations_async.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/samples/parse_certificate.py b/sdk/keyvault/azure-keyvault-certificates/samples/parse_certificate.py index 1834734056ba..14d4d9ced7c9 100644 --- a/sdk/keyvault/azure-keyvault-certificates/samples/parse_certificate.py +++ b/sdk/keyvault/azure-keyvault-certificates/samples/parse_certificate.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/samples/parse_certificate_async.py b/sdk/keyvault/azure-keyvault-certificates/samples/parse_certificate_async.py index 3d8f2e69382a..a24a9dbf6f39 100644 --- a/sdk/keyvault/azure-keyvault-certificates/samples/parse_certificate_async.py +++ b/sdk/keyvault/azure-keyvault-certificates/samples/parse_certificate_async.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/samples/recover_purge_operations.py b/sdk/keyvault/azure-keyvault-certificates/samples/recover_purge_operations.py index ae17348dbdd7..6750e7695282 100644 --- a/sdk/keyvault/azure-keyvault-certificates/samples/recover_purge_operations.py +++ b/sdk/keyvault/azure-keyvault-certificates/samples/recover_purge_operations.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/samples/recover_purge_operations_async.py b/sdk/keyvault/azure-keyvault-certificates/samples/recover_purge_operations_async.py index 9c8ceb14ccb4..edd06b98d307 100644 --- a/sdk/keyvault/azure-keyvault-certificates/samples/recover_purge_operations_async.py +++ b/sdk/keyvault/azure-keyvault-certificates/samples/recover_purge_operations_async.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/setup.py b/sdk/keyvault/azure-keyvault-certificates/setup.py index 8b7229c4f922..547f70d03353 100644 --- a/sdk/keyvault/azure-keyvault-certificates/setup.py +++ b/sdk/keyvault/azure-keyvault-certificates/setup.py @@ -1,55 +1,47 @@ -#!/usr/bin/env python +# 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) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -# pylint:disable=missing-docstring +import os import re -import os.path -from io import open -from setuptools import find_packages, setup +from setuptools import setup, find_packages + -# Change the PACKAGE_NAME only to change folder and different name PACKAGE_NAME = "azure-keyvault-certificates" -PACKAGE_PPRINT_NAME = "Key Vault Certificates" +PACKAGE_PPRINT_NAME = "Azure Keyvault Certificates" # a-b-c => a/b/c -PACKAGE_FOLDER_PATH = PACKAGE_NAME.replace("-", "/") -# a-b-c => a.b.c -NAMESPACE_NAME = PACKAGE_NAME.replace("-", ".") +package_folder_path = PACKAGE_NAME.replace("-", "/") # Version extraction inspired from 'requests' -with open(os.path.join(PACKAGE_FOLDER_PATH, "_version.py"), "r") as fd: - VERSION = re.search(r'^VERSION\s*=\s*[\'"]([^\'"]*)[\'"]', fd.read(), re.MULTILINE).group(1) +with open(os.path.join(package_folder_path, "_version.py"), "r") as fd: + version = re.search(r'^VERSION\s*=\s*[\'"]([^\'"]*)[\'"]', fd.read(), re.MULTILINE).group(1) -if not VERSION: +if not version: raise RuntimeError("Cannot find version information") -with open("README.md", encoding="utf-8") as f: - README = f.read() -with open("CHANGELOG.md", encoding="utf-8") as f: - CHANGELOG = f.read() setup( name=PACKAGE_NAME, - version=VERSION, - include_package_data=True, - description=f"Microsoft Azure {PACKAGE_PPRINT_NAME} Client Library for Python", - long_description=README + "\n\n" + CHANGELOG, + version=version, + description="Microsoft Corporation {} Client Library for Python".format(PACKAGE_PPRINT_NAME), + long_description=open("README.md", "r").read(), long_description_content_type="text/markdown", license="MIT License", author="Microsoft Corporation", - author_email="azurekeyvault@microsoft.com", - url="https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/keyvault/azure-keyvault-certificates", + author_email="azpysdkhelp@microsoft.com", + url="https://github.com/Azure/azure-sdk-for-python/tree/main/sdk", keywords="azure, azure sdk", classifiers=[ "Development Status :: 4 - Beta", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", @@ -59,17 +51,20 @@ zip_safe=False, packages=find_packages( exclude=[ - "samples", "tests", # Exclude packages that will be covered by PEP420 or nspkg "azure", "azure.keyvault", ] ), - python_requires=">=3.8", + include_package_data=True, + package_data={ + "azure.keyvault.certificates": ["py.typed"], + }, install_requires=[ - "azure-core>=1.31.0", "isodate>=0.6.1", + "azure-core>=1.30.0", "typing-extensions>=4.6.0", ], + python_requires=">=3.9", ) diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/certs.py b/sdk/keyvault/azure-keyvault-certificates/tests/certs.py index b369590befcc..c94546338d86 100644 --- a/sdk/keyvault/azure-keyvault-certificates/tests/certs.py +++ b/sdk/keyvault/azure-keyvault-certificates/tests/certs.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/test_certificates_client.py b/sdk/keyvault/azure-keyvault-certificates/tests/test_certificates_client.py index 48c81cbf6c0e..f7afbf46321e 100644 --- a/sdk/keyvault/azure-keyvault-certificates/tests/test_certificates_client.py +++ b/sdk/keyvault/azure-keyvault-certificates/tests/test_certificates_client.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/tests/test_certificates_client_async.py b/sdk/keyvault/azure-keyvault-certificates/tests/test_certificates_client_async.py index 6c9470e6bd30..07f2dd9a7906 100644 --- a/sdk/keyvault/azure-keyvault-certificates/tests/test_certificates_client_async.py +++ b/sdk/keyvault/azure-keyvault-certificates/tests/test_certificates_client_async.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # ------------------------------------ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. diff --git a/sdk/keyvault/azure-keyvault-certificates/tsp-location.yaml b/sdk/keyvault/azure-keyvault-certificates/tsp-location.yaml new file mode 100644 index 000000000000..ff36ee0b1604 --- /dev/null +++ b/sdk/keyvault/azure-keyvault-certificates/tsp-location.yaml @@ -0,0 +1,5 @@ +directory: specification/keyvault/Security.KeyVault.Certificates +commit: 4465f2aaefeb75e8a088c7e0950979e03430a234 +repo: Azure/azure-rest-api-specs +additionalDirectories: +- specification/keyvault/Security.KeyVault.Common