From 00b35fcbbf413764c5baf38666356ec1184eea1c Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Sat, 26 Nov 2022 18:33:43 -0500 Subject: [PATCH] feat: add SHA-2 import methods (#354) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: update to gapic-generator-python 1.5.0 feat: add support for `google.cloud..__version__` PiperOrigin-RevId: 484665853 Source-Link: https://github.com/googleapis/googleapis/commit/8eb249a19db926c2fbc4ecf1dc09c0e521a88b22 Source-Link: https://github.com/googleapis/googleapis-gen/commit/c8aa327b5f478865fc3fd91e3c2768e54e26ad44 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYzhhYTMyN2I1ZjQ3ODg2NWZjM2ZkOTFlM2MyNzY4ZTU0ZTI2YWQ0NCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * update version in gapic_version.py * add .release-please-manifest.json with correct version * set manifest to true in .github/release-please.yml * add release-please-config.json * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * chore: Update to gapic-generator-python 1.6.0 feat(python): Add typing to proto.Message based class attributes feat(python): Snippetgen handling of repeated enum field PiperOrigin-RevId: 487326846 Source-Link: https://github.com/googleapis/googleapis/commit/da380c77bb87ba0f752baf07605dd1db30e1f7e1 Source-Link: https://github.com/googleapis/googleapis-gen/commit/61ef5762ee6731a0cbbfea22fd0eecee51ab1c8e Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNjFlZjU3NjJlZTY3MzFhMGNiYmZlYTIyZmQwZWVjZWU1MWFiMWM4ZSJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * feat: new APIs added to reflect updates to the filestore service - Add ENTERPRISE Tier - Add snapshot APIs: RevertInstance, ListSnapshots, CreateSnapshot, DeleteSnapshot, UpdateSnapshot - Add multi-share APIs: ListShares, GetShare, CreateShare, DeleteShare, UpdateShare - Add ConnectMode to NetworkConfig (for Private Service Access support) - New status codes (SUSPENDED/SUSPENDING, REVERTING/RESUMING) - Add SuspensionReason (for KMS related suspension) - Add new fields to Instance information: max_capacity_gb, capacity_step_size_gb, max_share_count, capacity_gb, multi_share_enabled PiperOrigin-RevId: 487492758 Source-Link: https://github.com/googleapis/googleapis/commit/5be5981f50322cf0c7388595e0f31ac5d0693469 Source-Link: https://github.com/googleapis/googleapis-gen/commit/ab0e217f560cc2c1afc11441c2eab6b6950efd2b Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYWIwZTIxN2Y1NjBjYzJjMWFmYzExNDQxYzJlYWI2YjY5NTBlZmQyYiJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * update path to snippet metadata json * chore: Update gapic-generator-python to v1.6.1 PiperOrigin-RevId: 488036204 Source-Link: https://github.com/googleapis/googleapis/commit/08f275f5c1c0d99056e1cb68376323414459ee19 Source-Link: https://github.com/googleapis/googleapis-gen/commit/555c0945e60649e38739ae64bc45719cdf72178f Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiNTU1YzA5NDVlNjA2NDllMzg3MzlhZTY0YmM0NTcxOWNkZjcyMTc4ZiJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * feat: add support for additional HMAC algorithms PiperOrigin-RevId: 488651504 Source-Link: https://github.com/googleapis/googleapis/commit/dde2e5c02c45299621b5a2e625a3eef101ff3a7e Source-Link: https://github.com/googleapis/googleapis-gen/commit/07b28d916b490e926d49f413b0dece67bb43c17f Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMDdiMjhkOTE2YjQ5MGU5MjZkNDlmNDEzYjBkZWNlNjdiYjQzYzE3ZiJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * feat: add SHA-2 import methods PiperOrigin-RevId: 490250391 Source-Link: https://github.com/googleapis/googleapis/commit/4713c109a984e88155c7b0f6ba47739a05234d69 Source-Link: https://github.com/googleapis/googleapis-gen/commit/23c40fd800946befcc760f472e998db6b3b65d64 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiMjNjNDBmZDgwMDk0NmJlZmNjNzYwZjQ3MmU5OThkYjZiM2I2NWQ2NCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * use templated owlbot.py and setup.py * run nox format session Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../.github/release-please.yml | 1 + .../.release-please-manifest.json | 3 + packages/google-cloud-kms/docs/conf.py | 2 +- packages/google-cloud-kms/docs/index.rst | 15 +- .../google-cloud-kms/docs/kms_v1/types.rst | 1 - .../google/cloud/kms/__init__.py | 127 ++++--- .../google/cloud/kms/gapic_version.py | 16 + .../google/cloud/kms_v1/__init__.py | 128 ++++--- .../kms_v1/services/ekm_service/__init__.py | 2 +- .../services/ekm_service/async_client.py | 90 +++-- .../kms_v1/services/ekm_service/client.py | 86 +++-- .../kms_v1/services/ekm_service/pagers.py | 4 +- .../ekm_service/transports/__init__.py | 1 - .../services/ekm_service/transports/base.py | 10 +- .../services/ekm_service/transports/grpc.py | 33 +- .../ekm_service/transports/grpc_asyncio.py | 29 +- .../key_management_service/__init__.py | 2 +- .../key_management_service/async_client.py | 296 ++++++++------- .../services/key_management_service/client.py | 248 +++++++------ .../services/key_management_service/pagers.py | 7 +- .../transports/__init__.py | 1 - .../key_management_service/transports/base.py | 13 +- .../key_management_service/transports/grpc.py | 36 +- .../transports/grpc_asyncio.py | 32 +- .../google/cloud/kms_v1/types/__init__.py | 2 +- .../google/cloud/kms_v1/types/ekm_service.py | 102 ++--- .../google/cloud/kms_v1/types/resources.py | 126 ++++--- .../google/cloud/kms_v1/types/service.py | 347 ++++++++++-------- packages/google-cloud-kms/kms-v1-py.tar.gz | Bin 0 -> 65536 bytes packages/google-cloud-kms/noxfile.py | 1 + packages/google-cloud-kms/owlbot.py | 43 ++- .../release-please-config.json | 23 ++ ...agement_service_create_import_job_async.py | 2 +- ...nagement_service_create_import_job_sync.py | 2 +- ...snippet_metadata_google.cloud.kms.v1.json} | 3 +- .../scripts/fixup_kms_v1_keywords.py | 2 +- packages/google-cloud-kms/setup.py | 44 ++- .../testing/constraints-3.10.txt | 7 + .../testing/constraints-3.11.txt | 7 + .../testing/constraints-3.7.txt | 12 +- .../testing/constraints-3.8.txt | 9 +- .../testing/constraints-3.9.txt | 9 +- .../unit/gapic/kms_v1/test_ekm_service.py | 30 +- .../kms_v1/test_key_management_service.py | 35 +- 44 files changed, 1091 insertions(+), 898 deletions(-) create mode 100644 packages/google-cloud-kms/.release-please-manifest.json create mode 100644 packages/google-cloud-kms/google/cloud/kms/gapic_version.py create mode 100644 packages/google-cloud-kms/kms-v1-py.tar.gz create mode 100644 packages/google-cloud-kms/release-please-config.json rename packages/google-cloud-kms/samples/generated_samples/{snippet_metadata_kms_v1.json => snippet_metadata_google.cloud.kms.v1.json} (99%) diff --git a/packages/google-cloud-kms/.github/release-please.yml b/packages/google-cloud-kms/.github/release-please.yml index 29601ad4692c..fe749ff6b15d 100644 --- a/packages/google-cloud-kms/.github/release-please.yml +++ b/packages/google-cloud-kms/.github/release-please.yml @@ -1,5 +1,6 @@ releaseType: python handleGHRelease: true +manifest: true # NOTE: this section is generated by synthtool.languages.python # See https://github.com/googleapis/synthtool/blob/master/synthtool/languages/python.py branches: diff --git a/packages/google-cloud-kms/.release-please-manifest.json b/packages/google-cloud-kms/.release-please-manifest.json new file mode 100644 index 000000000000..10d7e57d21c7 --- /dev/null +++ b/packages/google-cloud-kms/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "2.12.3" +} diff --git a/packages/google-cloud-kms/docs/conf.py b/packages/google-cloud-kms/docs/conf.py index 39f1d289f159..41519f870b50 100644 --- a/packages/google-cloud-kms/docs/conf.py +++ b/packages/google-cloud-kms/docs/conf.py @@ -24,9 +24,9 @@ # All configuration values have a default; values that are commented out # serve to show the default. -import sys import os import shlex +import sys # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the diff --git a/packages/google-cloud-kms/docs/index.rst b/packages/google-cloud-kms/docs/index.rst index 8fc633c2fe45..393c884c76a1 100644 --- a/packages/google-cloud-kms/docs/index.rst +++ b/packages/google-cloud-kms/docs/index.rst @@ -2,24 +2,25 @@ .. include:: multiprocessing.rst + API Reference ------------- .. toctree:: - :maxdepth: 2 + :maxdepth: 2 - kms_v1/services - kms_v1/types + kms_v1/services + kms_v1/types Migration Guide --------------- -See the guide below for instructions on migrating to the 2.x release of this library. +See the guide below for instructions on migrating to the latest version. .. toctree:: :maxdepth: 2 - UPGRADING +  UPGRADING Changelog @@ -28,6 +29,6 @@ Changelog For a list of all ``google-cloud-kms`` releases: .. toctree:: - :maxdepth: 2 + :maxdepth: 2 - changelog + changelog diff --git a/packages/google-cloud-kms/docs/kms_v1/types.rst b/packages/google-cloud-kms/docs/kms_v1/types.rst index fe1026e9254b..c78ef915f3a0 100644 --- a/packages/google-cloud-kms/docs/kms_v1/types.rst +++ b/packages/google-cloud-kms/docs/kms_v1/types.rst @@ -3,5 +3,4 @@ Types for Google Cloud Kms v1 API .. automodule:: google.cloud.kms_v1.types :members: - :undoc-members: :show-inheritance: diff --git a/packages/google-cloud-kms/google/cloud/kms/__init__.py b/packages/google-cloud-kms/google/cloud/kms/__init__.py index 2cfad94b6ffa..c3ccdbacc338 100644 --- a/packages/google-cloud-kms/google/cloud/kms/__init__.py +++ b/packages/google-cloud-kms/google/cloud/kms/__init__.py @@ -13,71 +13,80 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from google.cloud.kms import gapic_version as package_version + +__version__ = package_version.__version__ + -from google.cloud.kms_v1.services.ekm_service.client import EkmServiceClient from google.cloud.kms_v1.services.ekm_service.async_client import EkmServiceAsyncClient +from google.cloud.kms_v1.services.ekm_service.client import EkmServiceClient +from google.cloud.kms_v1.services.key_management_service.async_client import ( + KeyManagementServiceAsyncClient, +) from google.cloud.kms_v1.services.key_management_service.client import ( KeyManagementServiceClient, ) -from google.cloud.kms_v1.services.key_management_service.async_client import ( - KeyManagementServiceAsyncClient, +from google.cloud.kms_v1.types.ekm_service import ( + Certificate, + CreateEkmConnectionRequest, + EkmConnection, + GetEkmConnectionRequest, + ListEkmConnectionsRequest, + ListEkmConnectionsResponse, + UpdateEkmConnectionRequest, +) +from google.cloud.kms_v1.types.resources import ( + CryptoKey, + CryptoKeyVersion, + CryptoKeyVersionTemplate, + ExternalProtectionLevelOptions, + ImportJob, + KeyOperationAttestation, + KeyRing, + ProtectionLevel, + PublicKey, +) +from google.cloud.kms_v1.types.service import ( + AsymmetricDecryptRequest, + AsymmetricDecryptResponse, + AsymmetricSignRequest, + AsymmetricSignResponse, + CreateCryptoKeyRequest, + CreateCryptoKeyVersionRequest, + CreateImportJobRequest, + CreateKeyRingRequest, + DecryptRequest, + DecryptResponse, + DestroyCryptoKeyVersionRequest, + Digest, + EncryptRequest, + EncryptResponse, + GenerateRandomBytesRequest, + GenerateRandomBytesResponse, + GetCryptoKeyRequest, + GetCryptoKeyVersionRequest, + GetImportJobRequest, + GetKeyRingRequest, + GetPublicKeyRequest, + ImportCryptoKeyVersionRequest, + ListCryptoKeysRequest, + ListCryptoKeysResponse, + ListCryptoKeyVersionsRequest, + ListCryptoKeyVersionsResponse, + ListImportJobsRequest, + ListImportJobsResponse, + ListKeyRingsRequest, + ListKeyRingsResponse, + LocationMetadata, + MacSignRequest, + MacSignResponse, + MacVerifyRequest, + MacVerifyResponse, + RestoreCryptoKeyVersionRequest, + UpdateCryptoKeyPrimaryVersionRequest, + UpdateCryptoKeyRequest, + UpdateCryptoKeyVersionRequest, ) - -from google.cloud.kms_v1.types.ekm_service import Certificate -from google.cloud.kms_v1.types.ekm_service import CreateEkmConnectionRequest -from google.cloud.kms_v1.types.ekm_service import EkmConnection -from google.cloud.kms_v1.types.ekm_service import GetEkmConnectionRequest -from google.cloud.kms_v1.types.ekm_service import ListEkmConnectionsRequest -from google.cloud.kms_v1.types.ekm_service import ListEkmConnectionsResponse -from google.cloud.kms_v1.types.ekm_service import UpdateEkmConnectionRequest -from google.cloud.kms_v1.types.resources import CryptoKey -from google.cloud.kms_v1.types.resources import CryptoKeyVersion -from google.cloud.kms_v1.types.resources import CryptoKeyVersionTemplate -from google.cloud.kms_v1.types.resources import ExternalProtectionLevelOptions -from google.cloud.kms_v1.types.resources import ImportJob -from google.cloud.kms_v1.types.resources import KeyOperationAttestation -from google.cloud.kms_v1.types.resources import KeyRing -from google.cloud.kms_v1.types.resources import PublicKey -from google.cloud.kms_v1.types.resources import ProtectionLevel -from google.cloud.kms_v1.types.service import AsymmetricDecryptRequest -from google.cloud.kms_v1.types.service import AsymmetricDecryptResponse -from google.cloud.kms_v1.types.service import AsymmetricSignRequest -from google.cloud.kms_v1.types.service import AsymmetricSignResponse -from google.cloud.kms_v1.types.service import CreateCryptoKeyRequest -from google.cloud.kms_v1.types.service import CreateCryptoKeyVersionRequest -from google.cloud.kms_v1.types.service import CreateImportJobRequest -from google.cloud.kms_v1.types.service import CreateKeyRingRequest -from google.cloud.kms_v1.types.service import DecryptRequest -from google.cloud.kms_v1.types.service import DecryptResponse -from google.cloud.kms_v1.types.service import DestroyCryptoKeyVersionRequest -from google.cloud.kms_v1.types.service import Digest -from google.cloud.kms_v1.types.service import EncryptRequest -from google.cloud.kms_v1.types.service import EncryptResponse -from google.cloud.kms_v1.types.service import GenerateRandomBytesRequest -from google.cloud.kms_v1.types.service import GenerateRandomBytesResponse -from google.cloud.kms_v1.types.service import GetCryptoKeyRequest -from google.cloud.kms_v1.types.service import GetCryptoKeyVersionRequest -from google.cloud.kms_v1.types.service import GetImportJobRequest -from google.cloud.kms_v1.types.service import GetKeyRingRequest -from google.cloud.kms_v1.types.service import GetPublicKeyRequest -from google.cloud.kms_v1.types.service import ImportCryptoKeyVersionRequest -from google.cloud.kms_v1.types.service import ListCryptoKeysRequest -from google.cloud.kms_v1.types.service import ListCryptoKeysResponse -from google.cloud.kms_v1.types.service import ListCryptoKeyVersionsRequest -from google.cloud.kms_v1.types.service import ListCryptoKeyVersionsResponse -from google.cloud.kms_v1.types.service import ListImportJobsRequest -from google.cloud.kms_v1.types.service import ListImportJobsResponse -from google.cloud.kms_v1.types.service import ListKeyRingsRequest -from google.cloud.kms_v1.types.service import ListKeyRingsResponse -from google.cloud.kms_v1.types.service import LocationMetadata -from google.cloud.kms_v1.types.service import MacSignRequest -from google.cloud.kms_v1.types.service import MacSignResponse -from google.cloud.kms_v1.types.service import MacVerifyRequest -from google.cloud.kms_v1.types.service import MacVerifyResponse -from google.cloud.kms_v1.types.service import RestoreCryptoKeyVersionRequest -from google.cloud.kms_v1.types.service import UpdateCryptoKeyPrimaryVersionRequest -from google.cloud.kms_v1.types.service import UpdateCryptoKeyRequest -from google.cloud.kms_v1.types.service import UpdateCryptoKeyVersionRequest __all__ = ( "EkmServiceClient", diff --git a/packages/google-cloud-kms/google/cloud/kms/gapic_version.py b/packages/google-cloud-kms/google/cloud/kms/gapic_version.py new file mode 100644 index 000000000000..e0546e8c0324 --- /dev/null +++ b/packages/google-cloud-kms/google/cloud/kms/gapic_version.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +__version__ = "2.12.3" # {x-release-please-version} diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/__init__.py b/packages/google-cloud-kms/google/cloud/kms_v1/__init__.py index c8f91d26d16e..cb4277e1d171 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/__init__.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/__init__.py @@ -13,67 +13,77 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from google.cloud.kms import gapic_version as package_version -from .services.ekm_service import EkmServiceClient -from .services.ekm_service import EkmServiceAsyncClient -from .services.key_management_service import KeyManagementServiceClient -from .services.key_management_service import KeyManagementServiceAsyncClient +__version__ = package_version.__version__ -from .types.ekm_service import Certificate -from .types.ekm_service import CreateEkmConnectionRequest -from .types.ekm_service import EkmConnection -from .types.ekm_service import GetEkmConnectionRequest -from .types.ekm_service import ListEkmConnectionsRequest -from .types.ekm_service import ListEkmConnectionsResponse -from .types.ekm_service import UpdateEkmConnectionRequest -from .types.resources import CryptoKey -from .types.resources import CryptoKeyVersion -from .types.resources import CryptoKeyVersionTemplate -from .types.resources import ExternalProtectionLevelOptions -from .types.resources import ImportJob -from .types.resources import KeyOperationAttestation -from .types.resources import KeyRing -from .types.resources import PublicKey -from .types.resources import ProtectionLevel -from .types.service import AsymmetricDecryptRequest -from .types.service import AsymmetricDecryptResponse -from .types.service import AsymmetricSignRequest -from .types.service import AsymmetricSignResponse -from .types.service import CreateCryptoKeyRequest -from .types.service import CreateCryptoKeyVersionRequest -from .types.service import CreateImportJobRequest -from .types.service import CreateKeyRingRequest -from .types.service import DecryptRequest -from .types.service import DecryptResponse -from .types.service import DestroyCryptoKeyVersionRequest -from .types.service import Digest -from .types.service import EncryptRequest -from .types.service import EncryptResponse -from .types.service import GenerateRandomBytesRequest -from .types.service import GenerateRandomBytesResponse -from .types.service import GetCryptoKeyRequest -from .types.service import GetCryptoKeyVersionRequest -from .types.service import GetImportJobRequest -from .types.service import GetKeyRingRequest -from .types.service import GetPublicKeyRequest -from .types.service import ImportCryptoKeyVersionRequest -from .types.service import ListCryptoKeysRequest -from .types.service import ListCryptoKeysResponse -from .types.service import ListCryptoKeyVersionsRequest -from .types.service import ListCryptoKeyVersionsResponse -from .types.service import ListImportJobsRequest -from .types.service import ListImportJobsResponse -from .types.service import ListKeyRingsRequest -from .types.service import ListKeyRingsResponse -from .types.service import LocationMetadata -from .types.service import MacSignRequest -from .types.service import MacSignResponse -from .types.service import MacVerifyRequest -from .types.service import MacVerifyResponse -from .types.service import RestoreCryptoKeyVersionRequest -from .types.service import UpdateCryptoKeyPrimaryVersionRequest -from .types.service import UpdateCryptoKeyRequest -from .types.service import UpdateCryptoKeyVersionRequest + +from .services.ekm_service import EkmServiceAsyncClient, EkmServiceClient +from .services.key_management_service import ( + KeyManagementServiceAsyncClient, + KeyManagementServiceClient, +) +from .types.ekm_service import ( + Certificate, + CreateEkmConnectionRequest, + EkmConnection, + GetEkmConnectionRequest, + ListEkmConnectionsRequest, + ListEkmConnectionsResponse, + UpdateEkmConnectionRequest, +) +from .types.resources import ( + CryptoKey, + CryptoKeyVersion, + CryptoKeyVersionTemplate, + ExternalProtectionLevelOptions, + ImportJob, + KeyOperationAttestation, + KeyRing, + ProtectionLevel, + PublicKey, +) +from .types.service import ( + AsymmetricDecryptRequest, + AsymmetricDecryptResponse, + AsymmetricSignRequest, + AsymmetricSignResponse, + CreateCryptoKeyRequest, + CreateCryptoKeyVersionRequest, + CreateImportJobRequest, + CreateKeyRingRequest, + DecryptRequest, + DecryptResponse, + DestroyCryptoKeyVersionRequest, + Digest, + EncryptRequest, + EncryptResponse, + GenerateRandomBytesRequest, + GenerateRandomBytesResponse, + GetCryptoKeyRequest, + GetCryptoKeyVersionRequest, + GetImportJobRequest, + GetKeyRingRequest, + GetPublicKeyRequest, + ImportCryptoKeyVersionRequest, + ListCryptoKeysRequest, + ListCryptoKeysResponse, + ListCryptoKeyVersionsRequest, + ListCryptoKeyVersionsResponse, + ListImportJobsRequest, + ListImportJobsResponse, + ListKeyRingsRequest, + ListKeyRingsResponse, + LocationMetadata, + MacSignRequest, + MacSignResponse, + MacVerifyRequest, + MacVerifyResponse, + RestoreCryptoKeyVersionRequest, + UpdateCryptoKeyPrimaryVersionRequest, + UpdateCryptoKeyRequest, + UpdateCryptoKeyVersionRequest, +) __all__ = ( "EkmServiceAsyncClient", diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/__init__.py b/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/__init__.py index 07dab11727d1..31c5038a7b76 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/__init__.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/__init__.py @@ -13,8 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # -from .client import EkmServiceClient from .async_client import EkmServiceAsyncClient +from .client import EkmServiceClient __all__ = ( "EkmServiceClient", diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/async_client.py b/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/async_client.py index a143184ecfe7..7c6e47ea008f 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/async_client.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/async_client.py @@ -16,30 +16,42 @@ from collections import OrderedDict import functools import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union -import pkg_resources +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, +) -from google.api_core.client_options import ClientOptions from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 from google.api_core import retry as retries +from google.api_core.client_options import ClientOptions from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore +import pkg_resources try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore -from google.cloud.kms_v1.services.ekm_service import pagers -from google.cloud.kms_v1.types import ekm_service from google.iam.v1 import iam_policy_pb2 # type: ignore from google.iam.v1 import policy_pb2 # type: ignore from google.protobuf import field_mask_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore -from .transports.base import EkmServiceTransport, DEFAULT_CLIENT_INFO -from .transports.grpc_asyncio import EkmServiceGrpcAsyncIOTransport + +from google.cloud.kms_v1.services.ekm_service import pagers +from google.cloud.kms_v1.types import ekm_service + from .client import EkmServiceClient +from .transports.base import DEFAULT_CLIENT_INFO, EkmServiceTransport +from .transports.grpc_asyncio import EkmServiceGrpcAsyncIOTransport class EkmServiceAsyncClient: @@ -164,9 +176,9 @@ def transport(self) -> EkmServiceTransport: def __init__( self, *, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, transport: Union[str, EkmServiceTransport] = "grpc_asyncio", - client_options: ClientOptions = None, + client_options: Optional[ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the ekm service client. @@ -210,11 +222,11 @@ def __init__( async def list_ekm_connections( self, - request: Union[ekm_service.ListEkmConnectionsRequest, dict] = None, + request: Optional[Union[ekm_service.ListEkmConnectionsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListEkmConnectionsAsyncPager: r"""Lists [EkmConnections][google.cloud.kms.v1.EkmConnection]. @@ -247,9 +259,9 @@ async def sample_list_ekm_connections(): print(response) Args: - request (Union[google.cloud.kms_v1.types.ListEkmConnectionsRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.ListEkmConnectionsRequest, dict]]): The request object. Request message for - [KeyManagementService.ListEkmConnections][]. + [EkmService.ListEkmConnections][google.cloud.kms.v1.EkmService.ListEkmConnections]. parent (:class:`str`): Required. The resource name of the location associated with the @@ -268,7 +280,7 @@ async def sample_list_ekm_connections(): Returns: google.cloud.kms_v1.services.ekm_service.pagers.ListEkmConnectionsAsyncPager: Response message for - [KeyManagementService.ListEkmConnections][]. + [EkmService.ListEkmConnections][google.cloud.kms.v1.EkmService.ListEkmConnections]. Iterating over this object will yield results and resolve additional pages automatically. @@ -337,11 +349,11 @@ async def sample_list_ekm_connections(): async def get_ekm_connection( self, - request: Union[ekm_service.GetEkmConnectionRequest, dict] = None, + request: Optional[Union[ekm_service.GetEkmConnectionRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> ekm_service.EkmConnection: r"""Returns metadata for a given @@ -374,9 +386,9 @@ async def sample_get_ekm_connection(): print(response) Args: - request (Union[google.cloud.kms_v1.types.GetEkmConnectionRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.GetEkmConnectionRequest, dict]]): The request object. Request message for - [KeyManagementService.GetEkmConnection][]. + [EkmService.GetEkmConnection][google.cloud.kms.v1.EkmService.GetEkmConnection]. name (:class:`str`): Required. The [name][google.cloud.kms.v1.EkmConnection.name] of the @@ -462,13 +474,13 @@ async def sample_get_ekm_connection(): async def create_ekm_connection( self, - request: Union[ekm_service.CreateEkmConnectionRequest, dict] = None, + request: Optional[Union[ekm_service.CreateEkmConnectionRequest, dict]] = None, *, - parent: str = None, - ekm_connection_id: str = None, - ekm_connection: ekm_service.EkmConnection = None, + parent: Optional[str] = None, + ekm_connection_id: Optional[str] = None, + ekm_connection: Optional[ekm_service.EkmConnection] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> ekm_service.EkmConnection: r"""Creates a new [EkmConnection][google.cloud.kms.v1.EkmConnection] @@ -502,9 +514,9 @@ async def sample_create_ekm_connection(): print(response) Args: - request (Union[google.cloud.kms_v1.types.CreateEkmConnectionRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.CreateEkmConnectionRequest, dict]]): The request object. Request message for - [KeyManagementService.CreateEkmConnection][]. + [EkmService.CreateEkmConnection][google.cloud.kms.v1.EkmService.CreateEkmConnection]. parent (:class:`str`): Required. The resource name of the location associated with the @@ -609,12 +621,12 @@ async def sample_create_ekm_connection(): async def update_ekm_connection( self, - request: Union[ekm_service.UpdateEkmConnectionRequest, dict] = None, + request: Optional[Union[ekm_service.UpdateEkmConnectionRequest, dict]] = None, *, - ekm_connection: ekm_service.EkmConnection = None, - update_mask: field_mask_pb2.FieldMask = None, + ekm_connection: Optional[ekm_service.EkmConnection] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> ekm_service.EkmConnection: r"""Updates an [EkmConnection][google.cloud.kms.v1.EkmConnection]'s @@ -646,9 +658,9 @@ async def sample_update_ekm_connection(): print(response) Args: - request (Union[google.cloud.kms_v1.types.UpdateEkmConnectionRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.UpdateEkmConnectionRequest, dict]]): The request object. Request message for - [KeyManagementService.UpdateEkmConnection][]. + [EkmService.UpdateEkmConnection][google.cloud.kms.v1.EkmService.UpdateEkmConnection]. ekm_connection (:class:`google.cloud.kms_v1.types.EkmConnection`): Required. [EkmConnection][google.cloud.kms.v1.EkmConnection] with @@ -744,10 +756,10 @@ async def sample_update_ekm_connection(): async def set_iam_policy( self, - request: iam_policy_pb2.SetIamPolicyRequest = None, + request: Optional[iam_policy_pb2.SetIamPolicyRequest] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> policy_pb2.Policy: r"""Sets the IAM access control policy on the specified function. @@ -863,10 +875,10 @@ async def set_iam_policy( async def get_iam_policy( self, - request: iam_policy_pb2.GetIamPolicyRequest = None, + request: Optional[iam_policy_pb2.GetIamPolicyRequest] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> policy_pb2.Policy: r"""Gets the IAM access control policy for a function. @@ -984,10 +996,10 @@ async def get_iam_policy( async def test_iam_permissions( self, - request: iam_policy_pb2.TestIamPermissionsRequest = None, + request: Optional[iam_policy_pb2.TestIamPermissionsRequest] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> iam_policy_pb2.TestIamPermissionsResponse: r"""Tests the specified permissions against the IAM access control diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/client.py b/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/client.py index 0be3e2a94161..ff18696ab140 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/client.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/client.py @@ -16,31 +16,44 @@ from collections import OrderedDict import os import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union -import pkg_resources +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, + cast, +) from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore +from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.auth.transport import mtls # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore -from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore +import pkg_resources try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore -from google.cloud.kms_v1.services.ekm_service import pagers -from google.cloud.kms_v1.types import ekm_service from google.iam.v1 import iam_policy_pb2 # type: ignore from google.iam.v1 import policy_pb2 # type: ignore from google.protobuf import field_mask_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore -from .transports.base import EkmServiceTransport, DEFAULT_CLIENT_INFO + +from google.cloud.kms_v1.services.ekm_service import pagers +from google.cloud.kms_v1.types import ekm_service + +from .transports.base import DEFAULT_CLIENT_INFO, EkmServiceTransport from .transports.grpc import EkmServiceGrpcTransport from .transports.grpc_asyncio import EkmServiceGrpcAsyncIOTransport @@ -59,7 +72,7 @@ class EkmServiceClientMeta(type): def get_transport_class( cls, - label: str = None, + label: Optional[str] = None, ) -> Type[EkmServiceTransport]: """Returns an appropriate transport class. @@ -364,8 +377,8 @@ def __init__( self, *, credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, EkmServiceTransport, None] = None, - client_options: Optional[client_options_lib.ClientOptions] = None, + transport: Optional[Union[str, EkmServiceTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the ekm service client. @@ -379,7 +392,7 @@ def __init__( transport (Union[str, EkmServiceTransport]): The transport to use. If set to None, a transport is chosen automatically. - client_options (google.api_core.client_options.ClientOptions): Custom options for the + client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the client. It won't take effect if a ``transport`` instance is provided. (1) The ``api_endpoint`` property can be used to override the default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT @@ -409,6 +422,7 @@ def __init__( client_options = client_options_lib.from_dict(client_options) if client_options is None: client_options = client_options_lib.ClientOptions() + client_options = cast(client_options_lib.ClientOptions, client_options) api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( client_options @@ -461,11 +475,11 @@ def __init__( def list_ekm_connections( self, - request: Union[ekm_service.ListEkmConnectionsRequest, dict] = None, + request: Optional[Union[ekm_service.ListEkmConnectionsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListEkmConnectionsPager: r"""Lists [EkmConnections][google.cloud.kms.v1.EkmConnection]. @@ -500,7 +514,7 @@ def sample_list_ekm_connections(): Args: request (Union[google.cloud.kms_v1.types.ListEkmConnectionsRequest, dict]): The request object. Request message for - [KeyManagementService.ListEkmConnections][]. + [EkmService.ListEkmConnections][google.cloud.kms.v1.EkmService.ListEkmConnections]. parent (str): Required. The resource name of the location associated with the @@ -519,7 +533,7 @@ def sample_list_ekm_connections(): Returns: google.cloud.kms_v1.services.ekm_service.pagers.ListEkmConnectionsPager: Response message for - [KeyManagementService.ListEkmConnections][]. + [EkmService.ListEkmConnections][google.cloud.kms.v1.EkmService.ListEkmConnections]. Iterating over this object will yield results and resolve additional pages automatically. @@ -578,11 +592,11 @@ def sample_list_ekm_connections(): def get_ekm_connection( self, - request: Union[ekm_service.GetEkmConnectionRequest, dict] = None, + request: Optional[Union[ekm_service.GetEkmConnectionRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> ekm_service.EkmConnection: r"""Returns metadata for a given @@ -617,7 +631,7 @@ def sample_get_ekm_connection(): Args: request (Union[google.cloud.kms_v1.types.GetEkmConnectionRequest, dict]): The request object. Request message for - [KeyManagementService.GetEkmConnection][]. + [EkmService.GetEkmConnection][google.cloud.kms.v1.EkmService.GetEkmConnection]. name (str): Required. The [name][google.cloud.kms.v1.EkmConnection.name] of the @@ -693,13 +707,13 @@ def sample_get_ekm_connection(): def create_ekm_connection( self, - request: Union[ekm_service.CreateEkmConnectionRequest, dict] = None, + request: Optional[Union[ekm_service.CreateEkmConnectionRequest, dict]] = None, *, - parent: str = None, - ekm_connection_id: str = None, - ekm_connection: ekm_service.EkmConnection = None, + parent: Optional[str] = None, + ekm_connection_id: Optional[str] = None, + ekm_connection: Optional[ekm_service.EkmConnection] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> ekm_service.EkmConnection: r"""Creates a new [EkmConnection][google.cloud.kms.v1.EkmConnection] @@ -735,7 +749,7 @@ def sample_create_ekm_connection(): Args: request (Union[google.cloud.kms_v1.types.CreateEkmConnectionRequest, dict]): The request object. Request message for - [KeyManagementService.CreateEkmConnection][]. + [EkmService.CreateEkmConnection][google.cloud.kms.v1.EkmService.CreateEkmConnection]. parent (str): Required. The resource name of the location associated with the @@ -830,12 +844,12 @@ def sample_create_ekm_connection(): def update_ekm_connection( self, - request: Union[ekm_service.UpdateEkmConnectionRequest, dict] = None, + request: Optional[Union[ekm_service.UpdateEkmConnectionRequest, dict]] = None, *, - ekm_connection: ekm_service.EkmConnection = None, - update_mask: field_mask_pb2.FieldMask = None, + ekm_connection: Optional[ekm_service.EkmConnection] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> ekm_service.EkmConnection: r"""Updates an [EkmConnection][google.cloud.kms.v1.EkmConnection]'s @@ -869,7 +883,7 @@ def sample_update_ekm_connection(): Args: request (Union[google.cloud.kms_v1.types.UpdateEkmConnectionRequest, dict]): The request object. Request message for - [KeyManagementService.UpdateEkmConnection][]. + [EkmService.UpdateEkmConnection][google.cloud.kms.v1.EkmService.UpdateEkmConnection]. ekm_connection (google.cloud.kms_v1.types.EkmConnection): Required. [EkmConnection][google.cloud.kms.v1.EkmConnection] with @@ -968,10 +982,10 @@ def __exit__(self, type, value, traceback): def set_iam_policy( self, - request: iam_policy_pb2.SetIamPolicyRequest = None, + request: Optional[iam_policy_pb2.SetIamPolicyRequest] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> policy_pb2.Policy: r"""Sets the IAM access control policy on the specified function. @@ -1088,10 +1102,10 @@ def set_iam_policy( def get_iam_policy( self, - request: iam_policy_pb2.GetIamPolicyRequest = None, + request: Optional[iam_policy_pb2.GetIamPolicyRequest] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> policy_pb2.Policy: r"""Gets the IAM access control policy for a function. @@ -1209,10 +1223,10 @@ def get_iam_policy( def test_iam_permissions( self, - request: iam_policy_pb2.TestIamPermissionsRequest = None, + request: Optional[iam_policy_pb2.TestIamPermissionsRequest] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> iam_policy_pb2.TestIamPermissionsResponse: r"""Tests the specified IAM permissions against the IAM access control diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/pagers.py b/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/pagers.py index 73d62299055a..ba4e9860521e 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/pagers.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/pagers.py @@ -18,10 +18,10 @@ AsyncIterator, Awaitable, Callable, + Iterator, + Optional, Sequence, Tuple, - Optional, - Iterator, ) from google.cloud.kms_v1.types import ekm_service diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/transports/__init__.py b/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/transports/__init__.py index 9022e8af52fc..06053977c6ca 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/transports/__init__.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/transports/__init__.py @@ -20,7 +20,6 @@ from .grpc import EkmServiceGrpcTransport from .grpc_asyncio import EkmServiceGrpcAsyncIOTransport - # Compile a registry of transports. _transport_registry = OrderedDict() # type: Dict[str, Type[EkmServiceTransport]] _transport_registry["grpc"] = EkmServiceGrpcTransport diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/transports/base.py b/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/transports/base.py index 9c1fdbbc6f5b..343282cc26c7 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/transports/base.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/transports/base.py @@ -15,19 +15,19 @@ # import abc from typing import Awaitable, Callable, Dict, Optional, Sequence, Union -import pkg_resources -import google.auth # type: ignore import google.api_core from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 from google.api_core import retry as retries +import google.auth # type: ignore from google.auth import credentials as ga_credentials # type: ignore +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore from google.oauth2 import service_account # type: ignore +import pkg_resources from google.cloud.kms_v1.types import ekm_service -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -53,7 +53,7 @@ def __init__( self, *, host: str = DEFAULT_HOST, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/transports/grpc.py b/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/transports/grpc.py index 96c47e7a0452..7baa20ca7c89 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/transports/grpc.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/transports/grpc.py @@ -13,21 +13,20 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import warnings from typing import Callable, Dict, Optional, Sequence, Tuple, Union +import warnings -from google.api_core import grpc_helpers -from google.api_core import gapic_v1 +from google.api_core import gapic_v1, grpc_helpers import google.auth # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore - +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore import grpc # type: ignore from google.cloud.kms_v1.types import ekm_service -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from .base import EkmServiceTransport, DEFAULT_CLIENT_INFO + +from .base import DEFAULT_CLIENT_INFO, EkmServiceTransport class EkmServiceGrpcTransport(EkmServiceTransport): @@ -54,14 +53,14 @@ def __init__( self, *, host: str = "cloudkms.googleapis.com", - credentials: ga_credentials.Credentials = None, - credentials_file: str = None, - scopes: Sequence[str] = None, - channel: grpc.Channel = None, - api_mtls_endpoint: str = None, - client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, - ssl_channel_credentials: grpc.ChannelCredentials = None, - client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[grpc.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, @@ -188,8 +187,8 @@ def __init__( def create_channel( cls, host: str = "cloudkms.googleapis.com", - credentials: ga_credentials.Credentials = None, - credentials_file: str = None, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, **kwargs, diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/transports/grpc_asyncio.py b/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/transports/grpc_asyncio.py index 637b366153ad..d4a4932fab27 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/services/ekm_service/transports/grpc_asyncio.py @@ -13,21 +13,20 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import warnings from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union +import warnings -from google.api_core import gapic_v1 -from google.api_core import grpc_helpers_async +from google.api_core import gapic_v1, grpc_helpers_async from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore - +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore import grpc # type: ignore from grpc.experimental import aio # type: ignore from google.cloud.kms_v1.types import ekm_service -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from .base import EkmServiceTransport, DEFAULT_CLIENT_INFO + +from .base import DEFAULT_CLIENT_INFO, EkmServiceTransport from .grpc import EkmServiceGrpcTransport @@ -56,7 +55,7 @@ class EkmServiceGrpcAsyncIOTransport(EkmServiceTransport): def create_channel( cls, host: str = "cloudkms.googleapis.com", - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, @@ -99,15 +98,15 @@ def __init__( self, *, host: str = "cloudkms.googleapis.com", - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, - channel: aio.Channel = None, - api_mtls_endpoint: str = None, - client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, - ssl_channel_credentials: grpc.ChannelCredentials = None, - client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, - quota_project_id=None, + channel: Optional[aio.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, api_audience: Optional[str] = None, diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/__init__.py b/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/__init__.py index 11795c84cd04..06a8a147f7fb 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/__init__.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/__init__.py @@ -13,8 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # -from .client import KeyManagementServiceClient from .async_client import KeyManagementServiceAsyncClient +from .client import KeyManagementServiceClient __all__ = ( "KeyManagementServiceClient", diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/async_client.py b/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/async_client.py index da6016c336ef..59fa59464211 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/async_client.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/async_client.py @@ -16,33 +16,44 @@ from collections import OrderedDict import functools import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union -import pkg_resources +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, +) -from google.api_core.client_options import ClientOptions from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 from google.api_core import retry as retries +from google.api_core.client_options import ClientOptions from google.auth import credentials as ga_credentials # type: ignore from google.oauth2 import service_account # type: ignore +import pkg_resources try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore -from google.cloud.kms_v1.services.key_management_service import pagers -from google.cloud.kms_v1.types import resources -from google.cloud.kms_v1.types import service from google.iam.v1 import iam_policy_pb2 # type: ignore from google.iam.v1 import policy_pb2 # type: ignore from google.protobuf import duration_pb2 # type: ignore from google.protobuf import field_mask_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore from google.protobuf import wrappers_pb2 # type: ignore -from .transports.base import KeyManagementServiceTransport, DEFAULT_CLIENT_INFO -from .transports.grpc_asyncio import KeyManagementServiceGrpcAsyncIOTransport + +from google.cloud.kms_v1.services.key_management_service import pagers +from google.cloud.kms_v1.types import resources, service + from .client import KeyManagementServiceClient +from .transports.base import DEFAULT_CLIENT_INFO, KeyManagementServiceTransport +from .transports.grpc_asyncio import KeyManagementServiceGrpcAsyncIOTransport class KeyManagementServiceAsyncClient: @@ -196,9 +207,9 @@ def transport(self) -> KeyManagementServiceTransport: def __init__( self, *, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, transport: Union[str, KeyManagementServiceTransport] = "grpc_asyncio", - client_options: ClientOptions = None, + client_options: Optional[ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the key management service client. @@ -242,11 +253,11 @@ def __init__( async def list_key_rings( self, - request: Union[service.ListKeyRingsRequest, dict] = None, + request: Optional[Union[service.ListKeyRingsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListKeyRingsAsyncPager: r"""Lists [KeyRings][google.cloud.kms.v1.KeyRing]. @@ -279,7 +290,7 @@ async def sample_list_key_rings(): print(response) Args: - request (Union[google.cloud.kms_v1.types.ListKeyRingsRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.ListKeyRingsRequest, dict]]): The request object. Request message for [KeyManagementService.ListKeyRings][google.cloud.kms.v1.KeyManagementService.ListKeyRings]. parent (:class:`str`): @@ -368,11 +379,11 @@ async def sample_list_key_rings(): async def list_crypto_keys( self, - request: Union[service.ListCryptoKeysRequest, dict] = None, + request: Optional[Union[service.ListCryptoKeysRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListCryptoKeysAsyncPager: r"""Lists [CryptoKeys][google.cloud.kms.v1.CryptoKey]. @@ -405,7 +416,7 @@ async def sample_list_crypto_keys(): print(response) Args: - request (Union[google.cloud.kms_v1.types.ListCryptoKeysRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.ListCryptoKeysRequest, dict]]): The request object. Request message for [KeyManagementService.ListCryptoKeys][google.cloud.kms.v1.KeyManagementService.ListCryptoKeys]. parent (:class:`str`): @@ -494,11 +505,11 @@ async def sample_list_crypto_keys(): async def list_crypto_key_versions( self, - request: Union[service.ListCryptoKeyVersionsRequest, dict] = None, + request: Optional[Union[service.ListCryptoKeyVersionsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListCryptoKeyVersionsAsyncPager: r"""Lists [CryptoKeyVersions][google.cloud.kms.v1.CryptoKeyVersion]. @@ -531,7 +542,7 @@ async def sample_list_crypto_key_versions(): print(response) Args: - request (Union[google.cloud.kms_v1.types.ListCryptoKeyVersionsRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.ListCryptoKeyVersionsRequest, dict]]): The request object. Request message for [KeyManagementService.ListCryptoKeyVersions][google.cloud.kms.v1.KeyManagementService.ListCryptoKeyVersions]. parent (:class:`str`): @@ -621,11 +632,11 @@ async def sample_list_crypto_key_versions(): async def list_import_jobs( self, - request: Union[service.ListImportJobsRequest, dict] = None, + request: Optional[Union[service.ListImportJobsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListImportJobsAsyncPager: r"""Lists [ImportJobs][google.cloud.kms.v1.ImportJob]. @@ -658,7 +669,7 @@ async def sample_list_import_jobs(): print(response) Args: - request (Union[google.cloud.kms_v1.types.ListImportJobsRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.ListImportJobsRequest, dict]]): The request object. Request message for [KeyManagementService.ListImportJobs][google.cloud.kms.v1.KeyManagementService.ListImportJobs]. parent (:class:`str`): @@ -747,11 +758,11 @@ async def sample_list_import_jobs(): async def get_key_ring( self, - request: Union[service.GetKeyRingRequest, dict] = None, + request: Optional[Union[service.GetKeyRingRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.KeyRing: r"""Returns metadata for a given @@ -784,7 +795,7 @@ async def sample_get_key_ring(): print(response) Args: - request (Union[google.cloud.kms_v1.types.GetKeyRingRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.GetKeyRingRequest, dict]]): The request object. Request message for [KeyManagementService.GetKeyRing][google.cloud.kms.v1.KeyManagementService.GetKeyRing]. name (:class:`str`): @@ -860,11 +871,11 @@ async def sample_get_key_ring(): async def get_crypto_key( self, - request: Union[service.GetCryptoKeyRequest, dict] = None, + request: Optional[Union[service.GetCryptoKeyRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKey: r"""Returns metadata for a given @@ -899,7 +910,7 @@ async def sample_get_crypto_key(): print(response) Args: - request (Union[google.cloud.kms_v1.types.GetCryptoKeyRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.GetCryptoKeyRequest, dict]]): The request object. Request message for [KeyManagementService.GetCryptoKey][google.cloud.kms.v1.KeyManagementService.GetCryptoKey]. name (:class:`str`): @@ -982,11 +993,11 @@ async def sample_get_crypto_key(): async def get_crypto_key_version( self, - request: Union[service.GetCryptoKeyVersionRequest, dict] = None, + request: Optional[Union[service.GetCryptoKeyVersionRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKeyVersion: r"""Returns metadata for a given @@ -1019,7 +1030,7 @@ async def sample_get_crypto_key_version(): print(response) Args: - request (Union[google.cloud.kms_v1.types.GetCryptoKeyVersionRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.GetCryptoKeyVersionRequest, dict]]): The request object. Request message for [KeyManagementService.GetCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.GetCryptoKeyVersion]. name (:class:`str`): @@ -1109,11 +1120,11 @@ async def sample_get_crypto_key_version(): async def get_public_key( self, - request: Union[service.GetPublicKeyRequest, dict] = None, + request: Optional[Union[service.GetPublicKeyRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.PublicKey: r"""Returns the public key for the given @@ -1151,7 +1162,7 @@ async def sample_get_public_key(): print(response) Args: - request (Union[google.cloud.kms_v1.types.GetPublicKeyRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.GetPublicKeyRequest, dict]]): The request object. Request message for [KeyManagementService.GetPublicKey][google.cloud.kms.v1.KeyManagementService.GetPublicKey]. name (:class:`str`): @@ -1231,11 +1242,11 @@ async def sample_get_public_key(): async def get_import_job( self, - request: Union[service.GetImportJobRequest, dict] = None, + request: Optional[Union[service.GetImportJobRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.ImportJob: r"""Returns metadata for a given @@ -1268,7 +1279,7 @@ async def sample_get_import_job(): print(response) Args: - request (Union[google.cloud.kms_v1.types.GetImportJobRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.GetImportJobRequest, dict]]): The request object. Request message for [KeyManagementService.GetImportJob][google.cloud.kms.v1.KeyManagementService.GetImportJob]. name (:class:`str`): @@ -1389,13 +1400,13 @@ async def sample_get_import_job(): async def create_key_ring( self, - request: Union[service.CreateKeyRingRequest, dict] = None, + request: Optional[Union[service.CreateKeyRingRequest, dict]] = None, *, - parent: str = None, - key_ring_id: str = None, - key_ring: resources.KeyRing = None, + parent: Optional[str] = None, + key_ring_id: Optional[str] = None, + key_ring: Optional[resources.KeyRing] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.KeyRing: r"""Create a new [KeyRing][google.cloud.kms.v1.KeyRing] in a given @@ -1429,7 +1440,7 @@ async def sample_create_key_ring(): print(response) Args: - request (Union[google.cloud.kms_v1.types.CreateKeyRingRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.CreateKeyRingRequest, dict]]): The request object. Request message for [KeyManagementService.CreateKeyRing][google.cloud.kms.v1.KeyManagementService.CreateKeyRing]. parent (:class:`str`): @@ -1524,13 +1535,13 @@ async def sample_create_key_ring(): async def create_crypto_key( self, - request: Union[service.CreateCryptoKeyRequest, dict] = None, + request: Optional[Union[service.CreateCryptoKeyRequest, dict]] = None, *, - parent: str = None, - crypto_key_id: str = None, - crypto_key: resources.CryptoKey = None, + parent: Optional[str] = None, + crypto_key_id: Optional[str] = None, + crypto_key: Optional[resources.CryptoKey] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKey: r"""Create a new [CryptoKey][google.cloud.kms.v1.CryptoKey] within a @@ -1568,7 +1579,7 @@ async def sample_create_crypto_key(): print(response) Args: - request (Union[google.cloud.kms_v1.types.CreateCryptoKeyRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.CreateCryptoKeyRequest, dict]]): The request object. Request message for [KeyManagementService.CreateCryptoKey][google.cloud.kms.v1.KeyManagementService.CreateCryptoKey]. parent (:class:`str`): @@ -1669,12 +1680,12 @@ async def sample_create_crypto_key(): async def create_crypto_key_version( self, - request: Union[service.CreateCryptoKeyVersionRequest, dict] = None, + request: Optional[Union[service.CreateCryptoKeyVersionRequest, dict]] = None, *, - parent: str = None, - crypto_key_version: resources.CryptoKeyVersion = None, + parent: Optional[str] = None, + crypto_key_version: Optional[resources.CryptoKeyVersion] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKeyVersion: r"""Create a new @@ -1713,7 +1724,7 @@ async def sample_create_crypto_key_version(): print(response) Args: - request (Union[google.cloud.kms_v1.types.CreateCryptoKeyVersionRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.CreateCryptoKeyVersionRequest, dict]]): The request object. Request message for [KeyManagementService.CreateCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.CreateCryptoKeyVersion]. parent (:class:`str`): @@ -1803,10 +1814,10 @@ async def sample_create_crypto_key_version(): async def import_crypto_key_version( self, - request: Union[service.ImportCryptoKeyVersionRequest, dict] = None, + request: Optional[Union[service.ImportCryptoKeyVersionRequest, dict]] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKeyVersion: r"""Import wrapped key material into a @@ -1850,7 +1861,7 @@ async def sample_import_crypto_key_version(): print(response) Args: - request (Union[google.cloud.kms_v1.types.ImportCryptoKeyVersionRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.ImportCryptoKeyVersionRequest, dict]]): The request object. Request message for [KeyManagementService.ImportCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.ImportCryptoKeyVersion]. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1907,13 +1918,13 @@ async def sample_import_crypto_key_version(): async def create_import_job( self, - request: Union[service.CreateImportJobRequest, dict] = None, + request: Optional[Union[service.CreateImportJobRequest, dict]] = None, *, - parent: str = None, - import_job_id: str = None, - import_job: resources.ImportJob = None, + parent: Optional[str] = None, + import_job_id: Optional[str] = None, + import_job: Optional[resources.ImportJob] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.ImportJob: r"""Create a new [ImportJob][google.cloud.kms.v1.ImportJob] within a @@ -1939,7 +1950,7 @@ async def sample_create_import_job(): # Initialize request argument(s) import_job = kms_v1.ImportJob() - import_job.import_method = "RSA_OAEP_4096_SHA1_AES_256" + import_job.import_method = "RSA_OAEP_4096_SHA256" import_job.protection_level = "EXTERNAL_VPC" request = kms_v1.CreateImportJobRequest( @@ -1955,7 +1966,7 @@ async def sample_create_import_job(): print(response) Args: - request (Union[google.cloud.kms_v1.types.CreateImportJobRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.CreateImportJobRequest, dict]]): The request object. Request message for [KeyManagementService.CreateImportJob][google.cloud.kms.v1.KeyManagementService.CreateImportJob]. parent (:class:`str`): @@ -2094,12 +2105,12 @@ async def sample_create_import_job(): async def update_crypto_key( self, - request: Union[service.UpdateCryptoKeyRequest, dict] = None, + request: Optional[Union[service.UpdateCryptoKeyRequest, dict]] = None, *, - crypto_key: resources.CryptoKey = None, - update_mask: field_mask_pb2.FieldMask = None, + crypto_key: Optional[resources.CryptoKey] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKey: r"""Update a [CryptoKey][google.cloud.kms.v1.CryptoKey]. @@ -2130,7 +2141,7 @@ async def sample_update_crypto_key(): print(response) Args: - request (Union[google.cloud.kms_v1.types.UpdateCryptoKeyRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.UpdateCryptoKeyRequest, dict]]): The request object. Request message for [KeyManagementService.UpdateCryptoKey][google.cloud.kms.v1.KeyManagementService.UpdateCryptoKey]. crypto_key (:class:`google.cloud.kms_v1.types.CryptoKey`): @@ -2223,12 +2234,12 @@ async def sample_update_crypto_key(): async def update_crypto_key_version( self, - request: Union[service.UpdateCryptoKeyVersionRequest, dict] = None, + request: Optional[Union[service.UpdateCryptoKeyVersionRequest, dict]] = None, *, - crypto_key_version: resources.CryptoKeyVersion = None, - update_mask: field_mask_pb2.FieldMask = None, + crypto_key_version: Optional[resources.CryptoKeyVersion] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKeyVersion: r"""Update a @@ -2272,7 +2283,7 @@ async def sample_update_crypto_key_version(): print(response) Args: - request (Union[google.cloud.kms_v1.types.UpdateCryptoKeyVersionRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.UpdateCryptoKeyVersionRequest, dict]]): The request object. Request message for [KeyManagementService.UpdateCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.UpdateCryptoKeyVersion]. crypto_key_version (:class:`google.cloud.kms_v1.types.CryptoKeyVersion`): @@ -2372,12 +2383,14 @@ async def sample_update_crypto_key_version(): async def update_crypto_key_primary_version( self, - request: Union[service.UpdateCryptoKeyPrimaryVersionRequest, dict] = None, + request: Optional[ + Union[service.UpdateCryptoKeyPrimaryVersionRequest, dict] + ] = None, *, - name: str = None, - crypto_key_version_id: str = None, + name: Optional[str] = None, + crypto_key_version_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKey: r"""Update the version of a @@ -2415,7 +2428,7 @@ async def sample_update_crypto_key_primary_version(): print(response) Args: - request (Union[google.cloud.kms_v1.types.UpdateCryptoKeyPrimaryVersionRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.UpdateCryptoKeyPrimaryVersionRequest, dict]]): The request object. Request message for [KeyManagementService.UpdateCryptoKeyPrimaryVersion][google.cloud.kms.v1.KeyManagementService.UpdateCryptoKeyPrimaryVersion]. name (:class:`str`): @@ -2507,11 +2520,11 @@ async def sample_update_crypto_key_primary_version(): async def destroy_crypto_key_version( self, - request: Union[service.DestroyCryptoKeyVersionRequest, dict] = None, + request: Optional[Union[service.DestroyCryptoKeyVersionRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKeyVersion: r"""Schedule a @@ -2565,7 +2578,7 @@ async def sample_destroy_crypto_key_version(): print(response) Args: - request (Union[google.cloud.kms_v1.types.DestroyCryptoKeyVersionRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.DestroyCryptoKeyVersionRequest, dict]]): The request object. Request message for [KeyManagementService.DestroyCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.DestroyCryptoKeyVersion]. name (:class:`str`): @@ -2654,11 +2667,11 @@ async def sample_destroy_crypto_key_version(): async def restore_crypto_key_version( self, - request: Union[service.RestoreCryptoKeyVersionRequest, dict] = None, + request: Optional[Union[service.RestoreCryptoKeyVersionRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKeyVersion: r"""Restore a @@ -2701,7 +2714,7 @@ async def sample_restore_crypto_key_version(): print(response) Args: - request (Union[google.cloud.kms_v1.types.RestoreCryptoKeyVersionRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.RestoreCryptoKeyVersionRequest, dict]]): The request object. Request message for [KeyManagementService.RestoreCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.RestoreCryptoKeyVersion]. name (:class:`str`): @@ -2790,12 +2803,12 @@ async def sample_restore_crypto_key_version(): async def encrypt( self, - request: Union[service.EncryptRequest, dict] = None, + request: Optional[Union[service.EncryptRequest, dict]] = None, *, - name: str = None, - plaintext: bytes = None, + name: Optional[str] = None, + plaintext: Optional[bytes] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.EncryptResponse: r"""Encrypts data, so that it can only be recovered by a call to @@ -2832,7 +2845,7 @@ async def sample_encrypt(): print(response) Args: - request (Union[google.cloud.kms_v1.types.EncryptRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.EncryptRequest, dict]]): The request object. Request message for [KeyManagementService.Encrypt][google.cloud.kms.v1.KeyManagementService.Encrypt]. name (:class:`str`): @@ -2855,7 +2868,10 @@ async def sample_encrypt(): The maximum size depends on the key version's [protection_level][google.cloud.kms.v1.CryptoKeyVersionTemplate.protection_level]. For - [SOFTWARE][google.cloud.kms.v1.ProtectionLevel.SOFTWARE] + [SOFTWARE][google.cloud.kms.v1.ProtectionLevel.SOFTWARE], + [EXTERNAL][google.cloud.kms.v1.ProtectionLevel.EXTERNAL], + and + [EXTERNAL_VPC][google.cloud.kms.v1.ProtectionLevel.EXTERNAL_VPC] keys, the plaintext must be no larger than 64KiB. For [HSM][google.cloud.kms.v1.ProtectionLevel.HSM] keys, the combined length of the plaintext and @@ -2933,12 +2949,12 @@ async def sample_encrypt(): async def decrypt( self, - request: Union[service.DecryptRequest, dict] = None, + request: Optional[Union[service.DecryptRequest, dict]] = None, *, - name: str = None, - ciphertext: bytes = None, + name: Optional[str] = None, + ciphertext: Optional[bytes] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.DecryptResponse: r"""Decrypts data that was protected by @@ -2975,7 +2991,7 @@ async def sample_decrypt(): print(response) Args: - request (Union[google.cloud.kms_v1.types.DecryptRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.DecryptRequest, dict]]): The request object. Request message for [KeyManagementService.Decrypt][google.cloud.kms.v1.KeyManagementService.Decrypt]. name (:class:`str`): @@ -3062,12 +3078,12 @@ async def sample_decrypt(): async def asymmetric_sign( self, - request: Union[service.AsymmetricSignRequest, dict] = None, + request: Optional[Union[service.AsymmetricSignRequest, dict]] = None, *, - name: str = None, - digest: service.Digest = None, + name: Optional[str] = None, + digest: Optional[service.Digest] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.AsymmetricSignResponse: r"""Signs data using a @@ -3104,7 +3120,7 @@ async def sample_asymmetric_sign(): print(response) Args: - request (Union[google.cloud.kms_v1.types.AsymmetricSignRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.AsymmetricSignRequest, dict]]): The request object. Request message for [KeyManagementService.AsymmetricSign][google.cloud.kms.v1.KeyManagementService.AsymmetricSign]. name (:class:`str`): @@ -3196,12 +3212,12 @@ async def sample_asymmetric_sign(): async def asymmetric_decrypt( self, - request: Union[service.AsymmetricDecryptRequest, dict] = None, + request: Optional[Union[service.AsymmetricDecryptRequest, dict]] = None, *, - name: str = None, - ciphertext: bytes = None, + name: Optional[str] = None, + ciphertext: Optional[bytes] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.AsymmetricDecryptResponse: r"""Decrypts data that was encrypted with a public key retrieved @@ -3240,7 +3256,7 @@ async def sample_asymmetric_decrypt(): print(response) Args: - request (Union[google.cloud.kms_v1.types.AsymmetricDecryptRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.AsymmetricDecryptRequest, dict]]): The request object. Request message for [KeyManagementService.AsymmetricDecrypt][google.cloud.kms.v1.KeyManagementService.AsymmetricDecrypt]. name (:class:`str`): @@ -3327,12 +3343,12 @@ async def sample_asymmetric_decrypt(): async def mac_sign( self, - request: Union[service.MacSignRequest, dict] = None, + request: Optional[Union[service.MacSignRequest, dict]] = None, *, - name: str = None, - data: bytes = None, + name: Optional[str] = None, + data: Optional[bytes] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.MacSignResponse: r"""Signs data using a @@ -3369,7 +3385,7 @@ async def sample_mac_sign(): print(response) Args: - request (Union[google.cloud.kms_v1.types.MacSignRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.MacSignRequest, dict]]): The request object. Request message for [KeyManagementService.MacSign][google.cloud.kms.v1.KeyManagementService.MacSign]. name (:class:`str`): @@ -3456,13 +3472,13 @@ async def sample_mac_sign(): async def mac_verify( self, - request: Union[service.MacVerifyRequest, dict] = None, + request: Optional[Union[service.MacVerifyRequest, dict]] = None, *, - name: str = None, - data: bytes = None, - mac: bytes = None, + name: Optional[str] = None, + data: Optional[bytes] = None, + mac: Optional[bytes] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.MacVerifyResponse: r"""Verifies MAC tag using a @@ -3500,7 +3516,7 @@ async def sample_mac_verify(): print(response) Args: - request (Union[google.cloud.kms_v1.types.MacVerifyRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.MacVerifyRequest, dict]]): The request object. Request message for [KeyManagementService.MacVerify][google.cloud.kms.v1.KeyManagementService.MacVerify]. name (:class:`str`): @@ -3594,13 +3610,13 @@ async def sample_mac_verify(): async def generate_random_bytes( self, - request: Union[service.GenerateRandomBytesRequest, dict] = None, + request: Optional[Union[service.GenerateRandomBytesRequest, dict]] = None, *, - location: str = None, - length_bytes: int = None, - protection_level: resources.ProtectionLevel = None, + location: Optional[str] = None, + length_bytes: Optional[int] = None, + protection_level: Optional[resources.ProtectionLevel] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.GenerateRandomBytesResponse: r"""Generate random bytes using the Cloud KMS randomness @@ -3632,7 +3648,7 @@ async def sample_generate_random_bytes(): print(response) Args: - request (Union[google.cloud.kms_v1.types.GenerateRandomBytesRequest, dict]): + request (Optional[Union[google.cloud.kms_v1.types.GenerateRandomBytesRequest, dict]]): The request object. Request message for [KeyManagementService.GenerateRandomBytes][google.cloud.kms.v1.KeyManagementService.GenerateRandomBytes]. location (:class:`str`): @@ -3732,10 +3748,10 @@ async def sample_generate_random_bytes(): async def set_iam_policy( self, - request: iam_policy_pb2.SetIamPolicyRequest = None, + request: Optional[iam_policy_pb2.SetIamPolicyRequest] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> policy_pb2.Policy: r"""Sets the IAM access control policy on the specified function. @@ -3851,10 +3867,10 @@ async def set_iam_policy( async def get_iam_policy( self, - request: iam_policy_pb2.GetIamPolicyRequest = None, + request: Optional[iam_policy_pb2.GetIamPolicyRequest] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> policy_pb2.Policy: r"""Gets the IAM access control policy for a function. @@ -3972,10 +3988,10 @@ async def get_iam_policy( async def test_iam_permissions( self, - request: iam_policy_pb2.TestIamPermissionsRequest = None, + request: Optional[iam_policy_pb2.TestIamPermissionsRequest] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> iam_policy_pb2.TestIamPermissionsResponse: r"""Tests the specified permissions against the IAM access control diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/client.py b/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/client.py index 8bc362bca85a..be04691fb688 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/client.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/client.py @@ -16,34 +16,46 @@ from collections import OrderedDict import os import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union -import pkg_resources +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, + cast, +) from google.api_core import client_options as client_options_lib from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore +from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.auth.transport import mtls # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore -from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.oauth2 import service_account # type: ignore +import pkg_resources try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.Retry, object] # type: ignore -from google.cloud.kms_v1.services.key_management_service import pagers -from google.cloud.kms_v1.types import resources -from google.cloud.kms_v1.types import service from google.iam.v1 import iam_policy_pb2 # type: ignore from google.iam.v1 import policy_pb2 # type: ignore from google.protobuf import duration_pb2 # type: ignore from google.protobuf import field_mask_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore from google.protobuf import wrappers_pb2 # type: ignore -from .transports.base import KeyManagementServiceTransport, DEFAULT_CLIENT_INFO + +from google.cloud.kms_v1.services.key_management_service import pagers +from google.cloud.kms_v1.types import resources, service + +from .transports.base import DEFAULT_CLIENT_INFO, KeyManagementServiceTransport from .transports.grpc import KeyManagementServiceGrpcTransport from .transports.grpc_asyncio import KeyManagementServiceGrpcAsyncIOTransport @@ -64,7 +76,7 @@ class KeyManagementServiceClientMeta(type): def get_transport_class( cls, - label: str = None, + label: Optional[str] = None, ) -> Type[KeyManagementServiceTransport]: """Returns an appropriate transport class. @@ -451,8 +463,8 @@ def __init__( self, *, credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, KeyManagementServiceTransport, None] = None, - client_options: Optional[client_options_lib.ClientOptions] = None, + transport: Optional[Union[str, KeyManagementServiceTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the key management service client. @@ -466,7 +478,7 @@ def __init__( transport (Union[str, KeyManagementServiceTransport]): The transport to use. If set to None, a transport is chosen automatically. - client_options (google.api_core.client_options.ClientOptions): Custom options for the + client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the client. It won't take effect if a ``transport`` instance is provided. (1) The ``api_endpoint`` property can be used to override the default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT @@ -496,6 +508,7 @@ def __init__( client_options = client_options_lib.from_dict(client_options) if client_options is None: client_options = client_options_lib.ClientOptions() + client_options = cast(client_options_lib.ClientOptions, client_options) api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( client_options @@ -548,11 +561,11 @@ def __init__( def list_key_rings( self, - request: Union[service.ListKeyRingsRequest, dict] = None, + request: Optional[Union[service.ListKeyRingsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListKeyRingsPager: r"""Lists [KeyRings][google.cloud.kms.v1.KeyRing]. @@ -664,11 +677,11 @@ def sample_list_key_rings(): def list_crypto_keys( self, - request: Union[service.ListCryptoKeysRequest, dict] = None, + request: Optional[Union[service.ListCryptoKeysRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListCryptoKeysPager: r"""Lists [CryptoKeys][google.cloud.kms.v1.CryptoKey]. @@ -780,11 +793,11 @@ def sample_list_crypto_keys(): def list_crypto_key_versions( self, - request: Union[service.ListCryptoKeyVersionsRequest, dict] = None, + request: Optional[Union[service.ListCryptoKeyVersionsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListCryptoKeyVersionsPager: r"""Lists [CryptoKeyVersions][google.cloud.kms.v1.CryptoKeyVersion]. @@ -897,11 +910,11 @@ def sample_list_crypto_key_versions(): def list_import_jobs( self, - request: Union[service.ListImportJobsRequest, dict] = None, + request: Optional[Union[service.ListImportJobsRequest, dict]] = None, *, - parent: str = None, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> pagers.ListImportJobsPager: r"""Lists [ImportJobs][google.cloud.kms.v1.ImportJob]. @@ -1013,11 +1026,11 @@ def sample_list_import_jobs(): def get_key_ring( self, - request: Union[service.GetKeyRingRequest, dict] = None, + request: Optional[Union[service.GetKeyRingRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.KeyRing: r"""Returns metadata for a given @@ -1116,11 +1129,11 @@ def sample_get_key_ring(): def get_crypto_key( self, - request: Union[service.GetCryptoKeyRequest, dict] = None, + request: Optional[Union[service.GetCryptoKeyRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKey: r"""Returns metadata for a given @@ -1228,11 +1241,11 @@ def sample_get_crypto_key(): def get_crypto_key_version( self, - request: Union[service.GetCryptoKeyVersionRequest, dict] = None, + request: Optional[Union[service.GetCryptoKeyVersionRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKeyVersion: r"""Returns metadata for a given @@ -1345,11 +1358,11 @@ def sample_get_crypto_key_version(): def get_public_key( self, - request: Union[service.GetPublicKeyRequest, dict] = None, + request: Optional[Union[service.GetPublicKeyRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.PublicKey: r"""Returns the public key for the given @@ -1457,11 +1470,11 @@ def sample_get_public_key(): def get_import_job( self, - request: Union[service.GetImportJobRequest, dict] = None, + request: Optional[Union[service.GetImportJobRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.ImportJob: r"""Returns metadata for a given @@ -1605,13 +1618,13 @@ def sample_get_import_job(): def create_key_ring( self, - request: Union[service.CreateKeyRingRequest, dict] = None, + request: Optional[Union[service.CreateKeyRingRequest, dict]] = None, *, - parent: str = None, - key_ring_id: str = None, - key_ring: resources.KeyRing = None, + parent: Optional[str] = None, + key_ring_id: Optional[str] = None, + key_ring: Optional[resources.KeyRing] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.KeyRing: r"""Create a new [KeyRing][google.cloud.kms.v1.KeyRing] in a given @@ -1730,13 +1743,13 @@ def sample_create_key_ring(): def create_crypto_key( self, - request: Union[service.CreateCryptoKeyRequest, dict] = None, + request: Optional[Union[service.CreateCryptoKeyRequest, dict]] = None, *, - parent: str = None, - crypto_key_id: str = None, - crypto_key: resources.CryptoKey = None, + parent: Optional[str] = None, + crypto_key_id: Optional[str] = None, + crypto_key: Optional[resources.CryptoKey] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKey: r"""Create a new [CryptoKey][google.cloud.kms.v1.CryptoKey] within a @@ -1865,12 +1878,12 @@ def sample_create_crypto_key(): def create_crypto_key_version( self, - request: Union[service.CreateCryptoKeyVersionRequest, dict] = None, + request: Optional[Union[service.CreateCryptoKeyVersionRequest, dict]] = None, *, - parent: str = None, - crypto_key_version: resources.CryptoKeyVersion = None, + parent: Optional[str] = None, + crypto_key_version: Optional[resources.CryptoKeyVersion] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKeyVersion: r"""Create a new @@ -2001,10 +2014,10 @@ def sample_create_crypto_key_version(): def import_crypto_key_version( self, - request: Union[service.ImportCryptoKeyVersionRequest, dict] = None, + request: Optional[Union[service.ImportCryptoKeyVersionRequest, dict]] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKeyVersion: r"""Import wrapped key material into a @@ -2108,13 +2121,13 @@ def sample_import_crypto_key_version(): def create_import_job( self, - request: Union[service.CreateImportJobRequest, dict] = None, + request: Optional[Union[service.CreateImportJobRequest, dict]] = None, *, - parent: str = None, - import_job_id: str = None, - import_job: resources.ImportJob = None, + parent: Optional[str] = None, + import_job_id: Optional[str] = None, + import_job: Optional[resources.ImportJob] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.ImportJob: r"""Create a new [ImportJob][google.cloud.kms.v1.ImportJob] within a @@ -2140,7 +2153,7 @@ def sample_create_import_job(): # Initialize request argument(s) import_job = kms_v1.ImportJob() - import_job.import_method = "RSA_OAEP_4096_SHA1_AES_256" + import_job.import_method = "RSA_OAEP_4096_SHA256" import_job.protection_level = "EXTERNAL_VPC" request = kms_v1.CreateImportJobRequest( @@ -2285,12 +2298,12 @@ def sample_create_import_job(): def update_crypto_key( self, - request: Union[service.UpdateCryptoKeyRequest, dict] = None, + request: Optional[Union[service.UpdateCryptoKeyRequest, dict]] = None, *, - crypto_key: resources.CryptoKey = None, - update_mask: field_mask_pb2.FieldMask = None, + crypto_key: Optional[resources.CryptoKey] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKey: r"""Update a [CryptoKey][google.cloud.kms.v1.CryptoKey]. @@ -2404,12 +2417,12 @@ def sample_update_crypto_key(): def update_crypto_key_version( self, - request: Union[service.UpdateCryptoKeyVersionRequest, dict] = None, + request: Optional[Union[service.UpdateCryptoKeyVersionRequest, dict]] = None, *, - crypto_key_version: resources.CryptoKeyVersion = None, - update_mask: field_mask_pb2.FieldMask = None, + crypto_key_version: Optional[resources.CryptoKeyVersion] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKeyVersion: r"""Update a @@ -2545,12 +2558,14 @@ def sample_update_crypto_key_version(): def update_crypto_key_primary_version( self, - request: Union[service.UpdateCryptoKeyPrimaryVersionRequest, dict] = None, + request: Optional[ + Union[service.UpdateCryptoKeyPrimaryVersionRequest, dict] + ] = None, *, - name: str = None, - crypto_key_version_id: str = None, + name: Optional[str] = None, + crypto_key_version_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKey: r"""Update the version of a @@ -2672,11 +2687,11 @@ def sample_update_crypto_key_primary_version(): def destroy_crypto_key_version( self, - request: Union[service.DestroyCryptoKeyVersionRequest, dict] = None, + request: Optional[Union[service.DestroyCryptoKeyVersionRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKeyVersion: r"""Schedule a @@ -2811,11 +2826,11 @@ def sample_destroy_crypto_key_version(): def restore_crypto_key_version( self, - request: Union[service.RestoreCryptoKeyVersionRequest, dict] = None, + request: Optional[Union[service.RestoreCryptoKeyVersionRequest, dict]] = None, *, - name: str = None, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> resources.CryptoKeyVersion: r"""Restore a @@ -2939,12 +2954,12 @@ def sample_restore_crypto_key_version(): def encrypt( self, - request: Union[service.EncryptRequest, dict] = None, + request: Optional[Union[service.EncryptRequest, dict]] = None, *, - name: str = None, - plaintext: bytes = None, + name: Optional[str] = None, + plaintext: Optional[bytes] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.EncryptResponse: r"""Encrypts data, so that it can only be recovered by a call to @@ -3004,7 +3019,10 @@ def sample_encrypt(): The maximum size depends on the key version's [protection_level][google.cloud.kms.v1.CryptoKeyVersionTemplate.protection_level]. For - [SOFTWARE][google.cloud.kms.v1.ProtectionLevel.SOFTWARE] + [SOFTWARE][google.cloud.kms.v1.ProtectionLevel.SOFTWARE], + [EXTERNAL][google.cloud.kms.v1.ProtectionLevel.EXTERNAL], + and + [EXTERNAL_VPC][google.cloud.kms.v1.ProtectionLevel.EXTERNAL_VPC] keys, the plaintext must be no larger than 64KiB. For [HSM][google.cloud.kms.v1.ProtectionLevel.HSM] keys, the combined length of the plaintext and @@ -3072,12 +3090,12 @@ def sample_encrypt(): def decrypt( self, - request: Union[service.DecryptRequest, dict] = None, + request: Optional[Union[service.DecryptRequest, dict]] = None, *, - name: str = None, - ciphertext: bytes = None, + name: Optional[str] = None, + ciphertext: Optional[bytes] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.DecryptResponse: r"""Decrypts data that was protected by @@ -3191,12 +3209,12 @@ def sample_decrypt(): def asymmetric_sign( self, - request: Union[service.AsymmetricSignRequest, dict] = None, + request: Optional[Union[service.AsymmetricSignRequest, dict]] = None, *, - name: str = None, - digest: service.Digest = None, + name: Optional[str] = None, + digest: Optional[service.Digest] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.AsymmetricSignResponse: r"""Signs data using a @@ -3315,12 +3333,12 @@ def sample_asymmetric_sign(): def asymmetric_decrypt( self, - request: Union[service.AsymmetricDecryptRequest, dict] = None, + request: Optional[Union[service.AsymmetricDecryptRequest, dict]] = None, *, - name: str = None, - ciphertext: bytes = None, + name: Optional[str] = None, + ciphertext: Optional[bytes] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.AsymmetricDecryptResponse: r"""Decrypts data that was encrypted with a public key retrieved @@ -3436,12 +3454,12 @@ def sample_asymmetric_decrypt(): def mac_sign( self, - request: Union[service.MacSignRequest, dict] = None, + request: Optional[Union[service.MacSignRequest, dict]] = None, *, - name: str = None, - data: bytes = None, + name: Optional[str] = None, + data: Optional[bytes] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.MacSignResponse: r"""Signs data using a @@ -3555,13 +3573,13 @@ def sample_mac_sign(): def mac_verify( self, - request: Union[service.MacVerifyRequest, dict] = None, + request: Optional[Union[service.MacVerifyRequest, dict]] = None, *, - name: str = None, - data: bytes = None, - mac: bytes = None, + name: Optional[str] = None, + data: Optional[bytes] = None, + mac: Optional[bytes] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.MacVerifyResponse: r"""Verifies MAC tag using a @@ -3683,13 +3701,13 @@ def sample_mac_verify(): def generate_random_bytes( self, - request: Union[service.GenerateRandomBytesRequest, dict] = None, + request: Optional[Union[service.GenerateRandomBytesRequest, dict]] = None, *, - location: str = None, - length_bytes: int = None, - protection_level: resources.ProtectionLevel = None, + location: Optional[str] = None, + length_bytes: Optional[int] = None, + protection_level: Optional[resources.ProtectionLevel] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> service.GenerateRandomBytesResponse: r"""Generate random bytes using the Cloud KMS randomness @@ -3824,10 +3842,10 @@ def __exit__(self, type, value, traceback): def set_iam_policy( self, - request: iam_policy_pb2.SetIamPolicyRequest = None, + request: Optional[iam_policy_pb2.SetIamPolicyRequest] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> policy_pb2.Policy: r"""Sets the IAM access control policy on the specified function. @@ -3944,10 +3962,10 @@ def set_iam_policy( def get_iam_policy( self, - request: iam_policy_pb2.GetIamPolicyRequest = None, + request: Optional[iam_policy_pb2.GetIamPolicyRequest] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> policy_pb2.Policy: r"""Gets the IAM access control policy for a function. @@ -4065,10 +4083,10 @@ def get_iam_policy( def test_iam_permissions( self, - request: iam_policy_pb2.TestIamPermissionsRequest = None, + request: Optional[iam_policy_pb2.TestIamPermissionsRequest] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> iam_policy_pb2.TestIamPermissionsResponse: r"""Tests the specified IAM permissions against the IAM access control diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/pagers.py b/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/pagers.py index 6cf46b240a64..abc9c563a217 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/pagers.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/pagers.py @@ -18,14 +18,13 @@ AsyncIterator, Awaitable, Callable, + Iterator, + Optional, Sequence, Tuple, - Optional, - Iterator, ) -from google.cloud.kms_v1.types import resources -from google.cloud.kms_v1.types import service +from google.cloud.kms_v1.types import resources, service class ListKeyRingsPager: diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/transports/__init__.py b/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/transports/__init__.py index 617a1f356ed2..46fb60193b58 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/transports/__init__.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/transports/__init__.py @@ -20,7 +20,6 @@ from .grpc import KeyManagementServiceGrpcTransport from .grpc_asyncio import KeyManagementServiceGrpcAsyncIOTransport - # Compile a registry of transports. _transport_registry = ( OrderedDict() diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/transports/base.py b/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/transports/base.py index 3208387be01c..ec29d8e0bb89 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/transports/base.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/transports/base.py @@ -15,20 +15,19 @@ # import abc from typing import Awaitable, Callable, Dict, Optional, Sequence, Union -import pkg_resources -import google.auth # type: ignore import google.api_core from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 from google.api_core import retry as retries +import google.auth # type: ignore from google.auth import credentials as ga_credentials # type: ignore -from google.oauth2 import service_account # type: ignore - -from google.cloud.kms_v1.types import resources -from google.cloud.kms_v1.types import service from google.iam.v1 import iam_policy_pb2 # type: ignore from google.iam.v1 import policy_pb2 # type: ignore +from google.oauth2 import service_account # type: ignore +import pkg_resources + +from google.cloud.kms_v1.types import resources, service try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( @@ -54,7 +53,7 @@ def __init__( self, *, host: str = DEFAULT_HOST, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/transports/grpc.py b/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/transports/grpc.py index 65b1af097a85..a03566d18635 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/transports/grpc.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/transports/grpc.py @@ -13,22 +13,20 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import warnings from typing import Callable, Dict, Optional, Sequence, Tuple, Union +import warnings -from google.api_core import grpc_helpers -from google.api_core import gapic_v1 +from google.api_core import gapic_v1, grpc_helpers import google.auth # type: ignore from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore - -import grpc # type: ignore - -from google.cloud.kms_v1.types import resources -from google.cloud.kms_v1.types import service from google.iam.v1 import iam_policy_pb2 # type: ignore from google.iam.v1 import policy_pb2 # type: ignore -from .base import KeyManagementServiceTransport, DEFAULT_CLIENT_INFO +import grpc # type: ignore + +from google.cloud.kms_v1.types import resources, service + +from .base import DEFAULT_CLIENT_INFO, KeyManagementServiceTransport class KeyManagementServiceGrpcTransport(KeyManagementServiceTransport): @@ -61,14 +59,14 @@ def __init__( self, *, host: str = "cloudkms.googleapis.com", - credentials: ga_credentials.Credentials = None, - credentials_file: str = None, - scopes: Sequence[str] = None, - channel: grpc.Channel = None, - api_mtls_endpoint: str = None, - client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, - ssl_channel_credentials: grpc.ChannelCredentials = None, - client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[grpc.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, @@ -195,8 +193,8 @@ def __init__( def create_channel( cls, host: str = "cloudkms.googleapis.com", - credentials: ga_credentials.Credentials = None, - credentials_file: str = None, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, **kwargs, diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/transports/grpc_asyncio.py b/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/transports/grpc_asyncio.py index b863dea963a0..da343d08c3be 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/transports/grpc_asyncio.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/services/key_management_service/transports/grpc_asyncio.py @@ -13,22 +13,20 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import warnings from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union +import warnings -from google.api_core import gapic_v1 -from google.api_core import grpc_helpers_async +from google.api_core import gapic_v1, grpc_helpers_async from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore - +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore import grpc # type: ignore from grpc.experimental import aio # type: ignore -from google.cloud.kms_v1.types import resources -from google.cloud.kms_v1.types import service -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from .base import KeyManagementServiceTransport, DEFAULT_CLIENT_INFO +from google.cloud.kms_v1.types import resources, service + +from .base import DEFAULT_CLIENT_INFO, KeyManagementServiceTransport from .grpc import KeyManagementServiceGrpcTransport @@ -63,7 +61,7 @@ class KeyManagementServiceGrpcAsyncIOTransport(KeyManagementServiceTransport): def create_channel( cls, host: str = "cloudkms.googleapis.com", - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, quota_project_id: Optional[str] = None, @@ -106,15 +104,15 @@ def __init__( self, *, host: str = "cloudkms.googleapis.com", - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, credentials_file: Optional[str] = None, scopes: Optional[Sequence[str]] = None, - channel: aio.Channel = None, - api_mtls_endpoint: str = None, - client_cert_source: Callable[[], Tuple[bytes, bytes]] = None, - ssl_channel_credentials: grpc.ChannelCredentials = None, - client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, - quota_project_id=None, + channel: Optional[aio.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, always_use_jwt_access: Optional[bool] = False, api_audience: Optional[str] = None, diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/types/__init__.py b/packages/google-cloud-kms/google/cloud/kms_v1/types/__init__.py index e24ce649317b..a634be019b63 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/types/__init__.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/types/__init__.py @@ -30,8 +30,8 @@ ImportJob, KeyOperationAttestation, KeyRing, - PublicKey, ProtectionLevel, + PublicKey, ) from .service import ( AsymmetricDecryptRequest, diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/types/ekm_service.py b/packages/google-cloud-kms/google/cloud/kms_v1/types/ekm_service.py index 5215c8b459c0..7e7b3ac1baac 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/types/ekm_service.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/types/ekm_service.py @@ -13,11 +13,11 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import proto # type: ignore +from typing import MutableMapping, MutableSequence from google.protobuf import field_mask_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore - +import proto # type: ignore __protobuf__ = proto.module( package="google.cloud.kms.v1", @@ -34,7 +34,8 @@ class ListEkmConnectionsRequest(proto.Message): - r"""Request message for [KeyManagementService.ListEkmConnections][]. + r"""Request message for + [EkmService.ListEkmConnections][google.cloud.kms.v1.EkmService.ListEkmConnections]. Attributes: parent (str): @@ -65,33 +66,34 @@ class ListEkmConnectionsRequest(proto.Message): results `__. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - page_size = proto.Field( + page_size: int = proto.Field( proto.INT32, number=2, ) - page_token = proto.Field( + page_token: str = proto.Field( proto.STRING, number=3, ) - filter = proto.Field( + filter: str = proto.Field( proto.STRING, number=4, ) - order_by = proto.Field( + order_by: str = proto.Field( proto.STRING, number=5, ) class ListEkmConnectionsResponse(proto.Message): - r"""Response message for [KeyManagementService.ListEkmConnections][]. + r"""Response message for + [EkmService.ListEkmConnections][google.cloud.kms.v1.EkmService.ListEkmConnections]. Attributes: - ekm_connections (Sequence[google.cloud.kms_v1.types.EkmConnection]): + ekm_connections (MutableSequence[google.cloud.kms_v1.types.EkmConnection]): The list of [EkmConnections][google.cloud.kms.v1.EkmConnection]. next_page_token (str): @@ -108,23 +110,24 @@ class ListEkmConnectionsResponse(proto.Message): def raw_page(self): return self - ekm_connections = proto.RepeatedField( + ekm_connections: MutableSequence["EkmConnection"] = proto.RepeatedField( proto.MESSAGE, number=1, message="EkmConnection", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - total_size = proto.Field( + total_size: int = proto.Field( proto.INT32, number=3, ) class GetEkmConnectionRequest(proto.Message): - r"""Request message for [KeyManagementService.GetEkmConnection][]. + r"""Request message for + [EkmService.GetEkmConnection][google.cloud.kms.v1.EkmService.GetEkmConnection]. Attributes: name (str): @@ -133,14 +136,15 @@ class GetEkmConnectionRequest(proto.Message): get. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) class CreateEkmConnectionRequest(proto.Message): - r"""Request message for [KeyManagementService.CreateEkmConnection][]. + r"""Request message for + [EkmService.CreateEkmConnection][google.cloud.kms.v1.EkmService.CreateEkmConnection]. Attributes: parent (str): @@ -156,15 +160,15 @@ class CreateEkmConnectionRequest(proto.Message): initial field values. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - ekm_connection_id = proto.Field( + ekm_connection_id: str = proto.Field( proto.STRING, number=2, ) - ekm_connection = proto.Field( + ekm_connection: "EkmConnection" = proto.Field( proto.MESSAGE, number=3, message="EkmConnection", @@ -172,7 +176,8 @@ class CreateEkmConnectionRequest(proto.Message): class UpdateEkmConnectionRequest(proto.Message): - r"""Request message for [KeyManagementService.UpdateEkmConnection][]. + r"""Request message for + [EkmService.UpdateEkmConnection][google.cloud.kms.v1.EkmService.UpdateEkmConnection]. Attributes: ekm_connection (google.cloud.kms_v1.types.EkmConnection): @@ -183,12 +188,12 @@ class UpdateEkmConnectionRequest(proto.Message): this request. """ - ekm_connection = proto.Field( + ekm_connection: "EkmConnection" = proto.Field( proto.MESSAGE, number=1, message="EkmConnection", ) - update_mask = proto.Field( + update_mask: field_mask_pb2.FieldMask = proto.Field( proto.MESSAGE, number=2, message=field_mask_pb2.FieldMask, @@ -214,7 +219,7 @@ class Certificate(proto.Message): Output only. The subject distinguished name in RFC 2253 format. Only present if [parsed][google.cloud.kms.v1.Certificate.parsed] is true. - subject_alternative_dns_names (Sequence[str]): + subject_alternative_dns_names (MutableSequence[str]): Output only. The subject Alternative DNS names. Only present if [parsed][google.cloud.kms.v1.Certificate.parsed] is true. not_before_time (google.protobuf.timestamp_pb2.Timestamp): @@ -235,41 +240,41 @@ class Certificate(proto.Message): [parsed][google.cloud.kms.v1.Certificate.parsed] is true. """ - raw_der = proto.Field( + raw_der: bytes = proto.Field( proto.BYTES, number=1, ) - parsed = proto.Field( + parsed: bool = proto.Field( proto.BOOL, number=2, ) - issuer = proto.Field( + issuer: str = proto.Field( proto.STRING, number=3, ) - subject = proto.Field( + subject: str = proto.Field( proto.STRING, number=4, ) - subject_alternative_dns_names = proto.RepeatedField( + subject_alternative_dns_names: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=5, ) - not_before_time = proto.Field( + not_before_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=6, message=timestamp_pb2.Timestamp, ) - not_after_time = proto.Field( + not_after_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=7, message=timestamp_pb2.Timestamp, ) - serial_number = proto.Field( + serial_number: str = proto.Field( proto.STRING, number=8, ) - sha256_fingerprint = proto.Field( + sha256_fingerprint: str = proto.Field( proto.STRING, number=9, ) @@ -294,7 +299,7 @@ class EkmConnection(proto.Message): Output only. The time at which the [EkmConnection][google.cloud.kms.v1.EkmConnection] was created. - service_resolvers (Sequence[google.cloud.kms_v1.types.EkmConnection.ServiceResolver]): + service_resolvers (MutableSequence[google.cloud.kms_v1.types.EkmConnection.ServiceResolver]): A list of [ServiceResolvers][google.cloud.kms.v1.EkmConnection.ServiceResolver] where the EKM can be reached. There should be one @@ -302,10 +307,8 @@ class EkmConnection(proto.Message): [ServiceResolver][google.cloud.kms.v1.EkmConnection.ServiceResolver] is supported. etag (str): - This checksum is computed by the server based - on the value of other fields, and may be sent on - update requests to ensure the client has an - up-to-date value before proceeding. + Optional. Etag of the currently stored + [EkmConnection][google.cloud.kms.v1.EkmConnection]. """ class ServiceResolver(proto.Message): @@ -330,45 +333,46 @@ class ServiceResolver(proto.Message): hostname (str): Required. The hostname of the EKM replica used at TLS and HTTP layers. - server_certificates (Sequence[google.cloud.kms_v1.types.Certificate]): - Required. A list of leaf server certificates - used to authenticate HTTPS connections to the - EKM replica. + server_certificates (MutableSequence[google.cloud.kms_v1.types.Certificate]): + Required. A list of leaf server certificates used to + authenticate HTTPS connections to the EKM replica. + Currently, a maximum of 10 + [Certificate][google.cloud.kms.v1.Certificate] is supported. """ - service_directory_service = proto.Field( + service_directory_service: str = proto.Field( proto.STRING, number=1, ) - endpoint_filter = proto.Field( + endpoint_filter: str = proto.Field( proto.STRING, number=2, ) - hostname = proto.Field( + hostname: str = proto.Field( proto.STRING, number=3, ) - server_certificates = proto.RepeatedField( + server_certificates: MutableSequence["Certificate"] = proto.RepeatedField( proto.MESSAGE, number=4, message="Certificate", ) - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - service_resolvers = proto.RepeatedField( + service_resolvers: MutableSequence[ServiceResolver] = proto.RepeatedField( proto.MESSAGE, number=3, message=ServiceResolver, ) - etag = proto.Field( + etag: str = proto.Field( proto.STRING, number=5, ) diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/types/resources.py b/packages/google-cloud-kms/google/cloud/kms_v1/types/resources.py index cb81b66130fa..ce15b52705aa 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/types/resources.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/types/resources.py @@ -13,12 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import proto # type: ignore +from typing import MutableMapping, MutableSequence from google.protobuf import duration_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore from google.protobuf import wrappers_pb2 # type: ignore - +import proto # type: ignore __protobuf__ = proto.module( package="google.cloud.kms.v1", @@ -63,11 +63,11 @@ class KeyRing(proto.Message): [KeyRing][google.cloud.kms.v1.KeyRing] was created. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, @@ -159,7 +159,7 @@ class CryptoKey(proto.Message): instances created by either [CreateCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.CreateCryptoKeyVersion] or auto-rotation are controlled by this template. - labels (Mapping[str, str]): + labels (MutableMapping[str, str]): Labels with user-defined metadata. For more information, see `Labeling Keys `__. @@ -207,56 +207,56 @@ class CryptoKeyPurpose(proto.Enum): ASYMMETRIC_DECRYPT = 6 MAC = 9 - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - primary = proto.Field( + primary: "CryptoKeyVersion" = proto.Field( proto.MESSAGE, number=2, message="CryptoKeyVersion", ) - purpose = proto.Field( + purpose: CryptoKeyPurpose = proto.Field( proto.ENUM, number=3, enum=CryptoKeyPurpose, ) - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=5, message=timestamp_pb2.Timestamp, ) - next_rotation_time = proto.Field( + next_rotation_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=7, message=timestamp_pb2.Timestamp, ) - rotation_period = proto.Field( + rotation_period: duration_pb2.Duration = proto.Field( proto.MESSAGE, number=8, oneof="rotation_schedule", message=duration_pb2.Duration, ) - version_template = proto.Field( + version_template: "CryptoKeyVersionTemplate" = proto.Field( proto.MESSAGE, number=11, message="CryptoKeyVersionTemplate", ) - labels = proto.MapField( + labels: MutableMapping[str, str] = proto.MapField( proto.STRING, proto.STRING, number=10, ) - import_only = proto.Field( + import_only: bool = proto.Field( proto.BOOL, number=13, ) - destroy_scheduled_duration = proto.Field( + destroy_scheduled_duration: duration_pb2.Duration = proto.Field( proto.MESSAGE, number=14, message=duration_pb2.Duration, ) - crypto_key_backend = proto.Field( + crypto_key_backend: str = proto.Field( proto.STRING, number=15, ) @@ -292,12 +292,12 @@ class CryptoKeyVersionTemplate(proto.Message): [ENCRYPT_DECRYPT][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ENCRYPT_DECRYPT]. """ - protection_level = proto.Field( + protection_level: "ProtectionLevel" = proto.Field( proto.ENUM, number=1, enum="ProtectionLevel", ) - algorithm = proto.Field( + algorithm: "CryptoKeyVersion.CryptoKeyVersionAlgorithm" = proto.Field( proto.ENUM, number=3, enum="CryptoKeyVersion.CryptoKeyVersionAlgorithm", @@ -333,40 +333,40 @@ class CertificateChains(proto.Message): https://tools.ietf.org/html/rfc5246#section-7.4.2. Attributes: - cavium_certs (Sequence[str]): + cavium_certs (MutableSequence[str]): Cavium certificate chain corresponding to the attestation. - google_card_certs (Sequence[str]): + google_card_certs (MutableSequence[str]): Google card certificate chain corresponding to the attestation. - google_partition_certs (Sequence[str]): + google_partition_certs (MutableSequence[str]): Google partition certificate chain corresponding to the attestation. """ - cavium_certs = proto.RepeatedField( + cavium_certs: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=1, ) - google_card_certs = proto.RepeatedField( + google_card_certs: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=2, ) - google_partition_certs = proto.RepeatedField( + google_partition_certs: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) - format = proto.Field( + format: AttestationFormat = proto.Field( proto.ENUM, number=4, enum=AttestationFormat, ) - content = proto.Field( + content: bytes = proto.Field( proto.BYTES, number=5, ) - cert_chains = proto.Field( + cert_chains: CertificateChains = proto.Field( proto.MESSAGE, number=6, message=CertificateChains, @@ -537,6 +537,10 @@ class CryptoKeyVersionAlgorithm(proto.Enum): EC_SIGN_P384_SHA384 = 13 EC_SIGN_SECP256K1_SHA256 = 31 HMAC_SHA256 = 32 + HMAC_SHA1 = 33 + HMAC_SHA384 = 34 + HMAC_SHA512 = 35 + HMAC_SHA224 = 36 EXTERNAL_SYMMETRIC_ENCRYPTION = 18 class CryptoKeyVersionState(proto.Enum): @@ -565,69 +569,69 @@ class CryptoKeyVersionView(proto.Enum): CRYPTO_KEY_VERSION_VIEW_UNSPECIFIED = 0 FULL = 1 - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - state = proto.Field( + state: CryptoKeyVersionState = proto.Field( proto.ENUM, number=3, enum=CryptoKeyVersionState, ) - protection_level = proto.Field( + protection_level: "ProtectionLevel" = proto.Field( proto.ENUM, number=7, enum="ProtectionLevel", ) - algorithm = proto.Field( + algorithm: CryptoKeyVersionAlgorithm = proto.Field( proto.ENUM, number=10, enum=CryptoKeyVersionAlgorithm, ) - attestation = proto.Field( + attestation: "KeyOperationAttestation" = proto.Field( proto.MESSAGE, number=8, message="KeyOperationAttestation", ) - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=4, message=timestamp_pb2.Timestamp, ) - generate_time = proto.Field( + generate_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=11, message=timestamp_pb2.Timestamp, ) - destroy_time = proto.Field( + destroy_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=5, message=timestamp_pb2.Timestamp, ) - destroy_event_time = proto.Field( + destroy_event_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=6, message=timestamp_pb2.Timestamp, ) - import_job = proto.Field( + import_job: str = proto.Field( proto.STRING, number=14, ) - import_time = proto.Field( + import_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=15, message=timestamp_pb2.Timestamp, ) - import_failure_reason = proto.Field( + import_failure_reason: str = proto.Field( proto.STRING, number=16, ) - external_protection_level_options = proto.Field( + external_protection_level_options: "ExternalProtectionLevelOptions" = proto.Field( proto.MESSAGE, number=17, message="ExternalProtectionLevelOptions", ) - reimport_eligible = proto.Field( + reimport_eligible: bool = proto.Field( proto.BOOL, number=18, ) @@ -682,25 +686,25 @@ class PublicKey(proto.Message): public key. """ - pem = proto.Field( + pem: str = proto.Field( proto.STRING, number=1, ) - algorithm = proto.Field( + algorithm: "CryptoKeyVersion.CryptoKeyVersionAlgorithm" = proto.Field( proto.ENUM, number=2, enum="CryptoKeyVersion.CryptoKeyVersionAlgorithm", ) - pem_crc32c = proto.Field( + pem_crc32c: wrappers_pb2.Int64Value = proto.Field( proto.MESSAGE, number=3, message=wrappers_pb2.Int64Value, ) - name = proto.Field( + name: str = proto.Field( proto.STRING, number=4, ) - protection_level = proto.Field( + protection_level: "ProtectionLevel" = proto.Field( proto.ENUM, number=5, enum="ProtectionLevel", @@ -804,6 +808,10 @@ class ImportMethod(proto.Enum): IMPORT_METHOD_UNSPECIFIED = 0 RSA_OAEP_3072_SHA1_AES_256 = 1 RSA_OAEP_4096_SHA1_AES_256 = 2 + RSA_OAEP_3072_SHA256_AES_256 = 3 + RSA_OAEP_4096_SHA256_AES_256 = 4 + RSA_OAEP_3072_SHA256 = 5 + RSA_OAEP_4096_SHA256 = 6 class ImportJobState(proto.Enum): r"""The state of the [ImportJob][google.cloud.kms.v1.ImportJob], @@ -829,56 +837,56 @@ class WrappingPublicKey(proto.Message): (https://tools.ietf.org/html/rfc7468#section-13). """ - pem = proto.Field( + pem: str = proto.Field( proto.STRING, number=1, ) - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - import_method = proto.Field( + import_method: ImportMethod = proto.Field( proto.ENUM, number=2, enum=ImportMethod, ) - protection_level = proto.Field( + protection_level: "ProtectionLevel" = proto.Field( proto.ENUM, number=9, enum="ProtectionLevel", ) - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - generate_time = proto.Field( + generate_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=4, message=timestamp_pb2.Timestamp, ) - expire_time = proto.Field( + expire_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=5, message=timestamp_pb2.Timestamp, ) - expire_event_time = proto.Field( + expire_event_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=10, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: ImportJobState = proto.Field( proto.ENUM, number=6, enum=ImportJobState, ) - public_key = proto.Field( + public_key: WrappingPublicKey = proto.Field( proto.MESSAGE, number=7, message=WrappingPublicKey, ) - attestation = proto.Field( + attestation: "KeyOperationAttestation" = proto.Field( proto.MESSAGE, number=8, message="KeyOperationAttestation", @@ -907,11 +915,11 @@ class ExternalProtectionLevelOptions(proto.Message): using an [EkmConnection][google.cloud.kms.v1.EkmConnection]. """ - external_key_uri = proto.Field( + external_key_uri: str = proto.Field( proto.STRING, number=1, ) - ekm_connection_key_path = proto.Field( + ekm_connection_key_path: str = proto.Field( proto.STRING, number=2, ) diff --git a/packages/google-cloud-kms/google/cloud/kms_v1/types/service.py b/packages/google-cloud-kms/google/cloud/kms_v1/types/service.py index 9a4bdb72ab46..3db9367fc586 100644 --- a/packages/google-cloud-kms/google/cloud/kms_v1/types/service.py +++ b/packages/google-cloud-kms/google/cloud/kms_v1/types/service.py @@ -13,12 +13,13 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import proto # type: ignore +from typing import MutableMapping, MutableSequence -from google.cloud.kms_v1.types import resources from google.protobuf import field_mask_pb2 # type: ignore from google.protobuf import wrappers_pb2 # type: ignore +import proto # type: ignore +from google.cloud.kms_v1.types import resources __protobuf__ = proto.module( package="google.cloud.kms.v1", @@ -98,23 +99,23 @@ class ListKeyRingsRequest(proto.Message): results `__. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - page_size = proto.Field( + page_size: int = proto.Field( proto.INT32, number=2, ) - page_token = proto.Field( + page_token: str = proto.Field( proto.STRING, number=3, ) - filter = proto.Field( + filter: str = proto.Field( proto.STRING, number=4, ) - order_by = proto.Field( + order_by: str = proto.Field( proto.STRING, number=5, ) @@ -156,28 +157,28 @@ class ListCryptoKeysRequest(proto.Message): results `__. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - page_size = proto.Field( + page_size: int = proto.Field( proto.INT32, number=2, ) - page_token = proto.Field( + page_token: str = proto.Field( proto.STRING, number=3, ) - version_view = proto.Field( + version_view: resources.CryptoKeyVersion.CryptoKeyVersionView = proto.Field( proto.ENUM, number=4, enum=resources.CryptoKeyVersion.CryptoKeyVersionView, ) - filter = proto.Field( + filter: str = proto.Field( proto.STRING, number=5, ) - order_by = proto.Field( + order_by: str = proto.Field( proto.STRING, number=6, ) @@ -218,28 +219,28 @@ class ListCryptoKeyVersionsRequest(proto.Message): results `__. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - page_size = proto.Field( + page_size: int = proto.Field( proto.INT32, number=2, ) - page_token = proto.Field( + page_token: str = proto.Field( proto.STRING, number=3, ) - view = proto.Field( + view: resources.CryptoKeyVersion.CryptoKeyVersionView = proto.Field( proto.ENUM, number=4, enum=resources.CryptoKeyVersion.CryptoKeyVersionView, ) - filter = proto.Field( + filter: str = proto.Field( proto.STRING, number=5, ) - order_by = proto.Field( + order_by: str = proto.Field( proto.STRING, number=6, ) @@ -278,23 +279,23 @@ class ListImportJobsRequest(proto.Message): results `__. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - page_size = proto.Field( + page_size: int = proto.Field( proto.INT32, number=2, ) - page_token = proto.Field( + page_token: str = proto.Field( proto.STRING, number=3, ) - filter = proto.Field( + filter: str = proto.Field( proto.STRING, number=4, ) - order_by = proto.Field( + order_by: str = proto.Field( proto.STRING, number=5, ) @@ -305,7 +306,7 @@ class ListKeyRingsResponse(proto.Message): [KeyManagementService.ListKeyRings][google.cloud.kms.v1.KeyManagementService.ListKeyRings]. Attributes: - key_rings (Sequence[google.cloud.kms_v1.types.KeyRing]): + key_rings (MutableSequence[google.cloud.kms_v1.types.KeyRing]): The list of [KeyRings][google.cloud.kms.v1.KeyRing]. next_page_token (str): A token to retrieve next page of results. Pass this value in @@ -320,16 +321,16 @@ class ListKeyRingsResponse(proto.Message): def raw_page(self): return self - key_rings = proto.RepeatedField( + key_rings: MutableSequence[resources.KeyRing] = proto.RepeatedField( proto.MESSAGE, number=1, message=resources.KeyRing, ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - total_size = proto.Field( + total_size: int = proto.Field( proto.INT32, number=3, ) @@ -340,7 +341,7 @@ class ListCryptoKeysResponse(proto.Message): [KeyManagementService.ListCryptoKeys][google.cloud.kms.v1.KeyManagementService.ListCryptoKeys]. Attributes: - crypto_keys (Sequence[google.cloud.kms_v1.types.CryptoKey]): + crypto_keys (MutableSequence[google.cloud.kms_v1.types.CryptoKey]): The list of [CryptoKeys][google.cloud.kms.v1.CryptoKey]. next_page_token (str): A token to retrieve next page of results. Pass this value in @@ -356,16 +357,16 @@ class ListCryptoKeysResponse(proto.Message): def raw_page(self): return self - crypto_keys = proto.RepeatedField( + crypto_keys: MutableSequence[resources.CryptoKey] = proto.RepeatedField( proto.MESSAGE, number=1, message=resources.CryptoKey, ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - total_size = proto.Field( + total_size: int = proto.Field( proto.INT32, number=3, ) @@ -376,7 +377,7 @@ class ListCryptoKeyVersionsResponse(proto.Message): [KeyManagementService.ListCryptoKeyVersions][google.cloud.kms.v1.KeyManagementService.ListCryptoKeyVersions]. Attributes: - crypto_key_versions (Sequence[google.cloud.kms_v1.types.CryptoKeyVersion]): + crypto_key_versions (MutableSequence[google.cloud.kms_v1.types.CryptoKeyVersion]): The list of [CryptoKeyVersions][google.cloud.kms.v1.CryptoKeyVersion]. next_page_token (str): @@ -393,16 +394,18 @@ class ListCryptoKeyVersionsResponse(proto.Message): def raw_page(self): return self - crypto_key_versions = proto.RepeatedField( + crypto_key_versions: MutableSequence[ + resources.CryptoKeyVersion + ] = proto.RepeatedField( proto.MESSAGE, number=1, message=resources.CryptoKeyVersion, ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - total_size = proto.Field( + total_size: int = proto.Field( proto.INT32, number=3, ) @@ -413,7 +416,7 @@ class ListImportJobsResponse(proto.Message): [KeyManagementService.ListImportJobs][google.cloud.kms.v1.KeyManagementService.ListImportJobs]. Attributes: - import_jobs (Sequence[google.cloud.kms_v1.types.ImportJob]): + import_jobs (MutableSequence[google.cloud.kms_v1.types.ImportJob]): The list of [ImportJobs][google.cloud.kms.v1.ImportJob]. next_page_token (str): A token to retrieve next page of results. Pass this value in @@ -429,16 +432,16 @@ class ListImportJobsResponse(proto.Message): def raw_page(self): return self - import_jobs = proto.RepeatedField( + import_jobs: MutableSequence[resources.ImportJob] = proto.RepeatedField( proto.MESSAGE, number=1, message=resources.ImportJob, ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - total_size = proto.Field( + total_size: int = proto.Field( proto.INT32, number=3, ) @@ -454,7 +457,7 @@ class GetKeyRingRequest(proto.Message): the [KeyRing][google.cloud.kms.v1.KeyRing] to get. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -470,7 +473,7 @@ class GetCryptoKeyRequest(proto.Message): the [CryptoKey][google.cloud.kms.v1.CryptoKey] to get. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -488,7 +491,7 @@ class GetCryptoKeyVersionRequest(proto.Message): get. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -506,7 +509,7 @@ class GetPublicKeyRequest(proto.Message): public key to get. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -522,7 +525,7 @@ class GetImportJobRequest(proto.Message): the [ImportJob][google.cloud.kms.v1.ImportJob] to get. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -545,15 +548,15 @@ class CreateKeyRingRequest(proto.Message): initial field values. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - key_ring_id = proto.Field( + key_ring_id: str = proto.Field( proto.STRING, number=2, ) - key_ring = proto.Field( + key_ring: resources.KeyRing = proto.Field( proto.MESSAGE, number=3, message=resources.KeyRing, @@ -587,20 +590,20 @@ class CreateCryptoKeyRequest(proto.Message): [CryptoKey][google.cloud.kms.v1.CryptoKey]. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - crypto_key_id = proto.Field( + crypto_key_id: str = proto.Field( proto.STRING, number=2, ) - crypto_key = proto.Field( + crypto_key: resources.CryptoKey = proto.Field( proto.MESSAGE, number=3, message=resources.CryptoKey, ) - skip_initial_version_creation = proto.Field( + skip_initial_version_creation: bool = proto.Field( proto.BOOL, number=5, ) @@ -622,11 +625,11 @@ class CreateCryptoKeyVersionRequest(proto.Message): with initial field values. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - crypto_key_version = proto.Field( + crypto_key_version: resources.CryptoKeyVersion = proto.Field( proto.MESSAGE, number=2, message=resources.CryptoKeyVersion, @@ -689,57 +692,83 @@ class ImportCryptoKeyVersionRequest(proto.Message): Required. The [name][google.cloud.kms.v1.ImportJob.name] of the [ImportJob][google.cloud.kms.v1.ImportJob] that was used to wrap this key material. - rsa_aes_wrapped_key (bytes): - Wrapped key material produced with - [RSA_OAEP_3072_SHA1_AES_256][google.cloud.kms.v1.ImportJob.ImportMethod.RSA_OAEP_3072_SHA1_AES_256] + wrapped_key (bytes): + Optional. The wrapped key material to import. + + Before wrapping, key material must be formatted. If + importing symmetric key material, the expected key material + format is plain bytes. If importing asymmetric key material, + the expected key material format is PKCS#8-encoded DER (the + PrivateKeyInfo structure from RFC 5208). + + When wrapping with import methods + ([RSA_OAEP_3072_SHA1_AES_256][google.cloud.kms.v1.ImportJob.ImportMethod.RSA_OAEP_3072_SHA1_AES_256] + or + [RSA_OAEP_4096_SHA1_AES_256][google.cloud.kms.v1.ImportJob.ImportMethod.RSA_OAEP_4096_SHA1_AES_256] + or + [RSA_OAEP_3072_SHA256_AES_256][google.cloud.kms.v1.ImportJob.ImportMethod.RSA_OAEP_3072_SHA256_AES_256] or - [RSA_OAEP_4096_SHA1_AES_256][google.cloud.kms.v1.ImportJob.ImportMethod.RSA_OAEP_4096_SHA1_AES_256]. + [RSA_OAEP_4096_SHA256_AES_256][google.cloud.kms.v1.ImportJob.ImportMethod.RSA_OAEP_4096_SHA256_AES_256]), - This field contains the concatenation of two wrapped keys: + this field must contain the concatenation of: .. raw:: html
  1. An ephemeral AES-256 wrapping key wrapped with the [public_key][google.cloud.kms.v1.ImportJob.public_key] using - RSAES-OAEP with SHA-1/SHA-256, MGF1 with SHA-1/SHA-256, and an - empty label. + RSAES-OAEP with SHA-1/SHA-256, MGF1 with SHA-1/SHA-256, and an empty + label.
  2. -
  3. The key to be imported, wrapped with the ephemeral AES-256 key - using AES-KWP (RFC 5649). +
  4. The formatted key to be imported, wrapped with the ephemeral AES-256 + key using AES-KWP (RFC 5649).
- If importing symmetric key material, it is expected that the - unwrapped key contains plain bytes. If importing asymmetric - key material, it is expected that the unwrapped key is in - PKCS#8-encoded DER format (the PrivateKeyInfo structure from - RFC 5208). - This format is the same as the format produced by PKCS#11 mechanism CKM_RSA_AES_KEY_WRAP. + When wrapping with import methods + ([RSA_OAEP_3072_SHA256][google.cloud.kms.v1.ImportJob.ImportMethod.RSA_OAEP_3072_SHA256] + or + [RSA_OAEP_4096_SHA256][google.cloud.kms.v1.ImportJob.ImportMethod.RSA_OAEP_4096_SHA256]), + + this field must contain the formatted key to be imported, + wrapped with the + [public_key][google.cloud.kms.v1.ImportJob.public_key] using + RSAES-OAEP with SHA-256, MGF1 with SHA-256, and an empty + label. + rsa_aes_wrapped_key (bytes): + Optional. This field has the same meaning as + [wrapped_key][google.cloud.kms.v1.ImportCryptoKeyVersionRequest.wrapped_key]. + Prefer to use that field in new work. Either that field or + this field (but not both) must be specified. + This field is a member of `oneof`_ ``wrapped_key_material``. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - crypto_key_version = proto.Field( + crypto_key_version: str = proto.Field( proto.STRING, number=6, ) - algorithm = proto.Field( + algorithm: resources.CryptoKeyVersion.CryptoKeyVersionAlgorithm = proto.Field( proto.ENUM, number=2, enum=resources.CryptoKeyVersion.CryptoKeyVersionAlgorithm, ) - import_job = proto.Field( + import_job: str = proto.Field( proto.STRING, number=4, ) - rsa_aes_wrapped_key = proto.Field( + wrapped_key: bytes = proto.Field( + proto.BYTES, + number=8, + ) + rsa_aes_wrapped_key: bytes = proto.Field( proto.BYTES, number=5, oneof="wrapped_key_material", @@ -763,15 +792,15 @@ class CreateImportJobRequest(proto.Message): initial field values. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - import_job_id = proto.Field( + import_job_id: str = proto.Field( proto.STRING, number=2, ) - import_job = proto.Field( + import_job: resources.ImportJob = proto.Field( proto.MESSAGE, number=3, message=resources.ImportJob, @@ -791,12 +820,12 @@ class UpdateCryptoKeyRequest(proto.Message): this request. """ - crypto_key = proto.Field( + crypto_key: resources.CryptoKey = proto.Field( proto.MESSAGE, number=1, message=resources.CryptoKey, ) - update_mask = proto.Field( + update_mask: field_mask_pb2.FieldMask = proto.Field( proto.MESSAGE, number=2, message=field_mask_pb2.FieldMask, @@ -817,12 +846,12 @@ class UpdateCryptoKeyVersionRequest(proto.Message): this request. """ - crypto_key_version = proto.Field( + crypto_key_version: resources.CryptoKeyVersion = proto.Field( proto.MESSAGE, number=1, message=resources.CryptoKeyVersion, ) - update_mask = proto.Field( + update_mask: field_mask_pb2.FieldMask = proto.Field( proto.MESSAGE, number=2, message=field_mask_pb2.FieldMask, @@ -843,11 +872,11 @@ class UpdateCryptoKeyPrimaryVersionRequest(proto.Message): use as primary. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - crypto_key_version_id = proto.Field( + crypto_key_version_id: str = proto.Field( proto.STRING, number=2, ) @@ -864,7 +893,7 @@ class DestroyCryptoKeyVersionRequest(proto.Message): destroy. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -881,7 +910,7 @@ class RestoreCryptoKeyVersionRequest(proto.Message): restore. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -906,7 +935,11 @@ class EncryptRequest(proto.Message): The maximum size depends on the key version's [protection_level][google.cloud.kms.v1.CryptoKeyVersionTemplate.protection_level]. - For [SOFTWARE][google.cloud.kms.v1.ProtectionLevel.SOFTWARE] + For + [SOFTWARE][google.cloud.kms.v1.ProtectionLevel.SOFTWARE], + [EXTERNAL][google.cloud.kms.v1.ProtectionLevel.EXTERNAL], + and + [EXTERNAL_VPC][google.cloud.kms.v1.ProtectionLevel.EXTERNAL_VPC] keys, the plaintext must be no larger than 64KiB. For [HSM][google.cloud.kms.v1.ProtectionLevel.HSM] keys, the combined length of the plaintext and @@ -919,8 +952,12 @@ class EncryptRequest(proto.Message): The maximum size depends on the key version's [protection_level][google.cloud.kms.v1.CryptoKeyVersionTemplate.protection_level]. - For [SOFTWARE][google.cloud.kms.v1.ProtectionLevel.SOFTWARE] - keys, the AAD must be no larger than 64KiB. For + For + [SOFTWARE][google.cloud.kms.v1.ProtectionLevel.SOFTWARE], + [EXTERNAL][google.cloud.kms.v1.ProtectionLevel.EXTERNAL], + and + [EXTERNAL_VPC][google.cloud.kms.v1.ProtectionLevel.EXTERNAL_VPC] + keys the AAD must be no larger than 64KiB. For [HSM][google.cloud.kms.v1.ProtectionLevel.HSM] keys, the combined length of the plaintext and additional_authenticated_data fields must be no larger than @@ -969,24 +1006,24 @@ class EncryptRequest(proto.Message): languages that support this type. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - plaintext = proto.Field( + plaintext: bytes = proto.Field( proto.BYTES, number=2, ) - additional_authenticated_data = proto.Field( + additional_authenticated_data: bytes = proto.Field( proto.BYTES, number=3, ) - plaintext_crc32c = proto.Field( + plaintext_crc32c: wrappers_pb2.Int64Value = proto.Field( proto.MESSAGE, number=7, message=wrappers_pb2.Int64Value, ) - additional_authenticated_data_crc32c = proto.Field( + additional_authenticated_data_crc32c: wrappers_pb2.Int64Value = proto.Field( proto.MESSAGE, number=8, message=wrappers_pb2.Int64Value, @@ -1053,24 +1090,24 @@ class DecryptRequest(proto.Message): languages that support this type. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - ciphertext = proto.Field( + ciphertext: bytes = proto.Field( proto.BYTES, number=2, ) - additional_authenticated_data = proto.Field( + additional_authenticated_data: bytes = proto.Field( proto.BYTES, number=3, ) - ciphertext_crc32c = proto.Field( + ciphertext_crc32c: wrappers_pb2.Int64Value = proto.Field( proto.MESSAGE, number=5, message=wrappers_pb2.Int64Value, ) - additional_authenticated_data_crc32c = proto.Field( + additional_authenticated_data_crc32c: wrappers_pb2.Int64Value = proto.Field( proto.MESSAGE, number=6, message=wrappers_pb2.Int64Value, @@ -1143,25 +1180,25 @@ class AsymmetricSignRequest(proto.Message): languages that support this type. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - digest = proto.Field( + digest: "Digest" = proto.Field( proto.MESSAGE, number=3, message="Digest", ) - digest_crc32c = proto.Field( + digest_crc32c: wrappers_pb2.Int64Value = proto.Field( proto.MESSAGE, number=4, message=wrappers_pb2.Int64Value, ) - data = proto.Field( + data: bytes = proto.Field( proto.BYTES, number=6, ) - data_crc32c = proto.Field( + data_crc32c: wrappers_pb2.Int64Value = proto.Field( proto.MESSAGE, number=7, message=wrappers_pb2.Int64Value, @@ -1204,15 +1241,15 @@ class AsymmetricDecryptRequest(proto.Message): languages that support this type. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - ciphertext = proto.Field( + ciphertext: bytes = proto.Field( proto.BYTES, number=3, ) - ciphertext_crc32c = proto.Field( + ciphertext_crc32c: wrappers_pb2.Int64Value = proto.Field( proto.MESSAGE, number=4, message=wrappers_pb2.Int64Value, @@ -1255,15 +1292,15 @@ class MacSignRequest(proto.Message): languages that support this type. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - data = proto.Field( + data: bytes = proto.Field( proto.BYTES, number=2, ) - data_crc32c = proto.Field( + data_crc32c: wrappers_pb2.Int64Value = proto.Field( proto.MESSAGE, number=3, message=wrappers_pb2.Int64Value, @@ -1328,24 +1365,24 @@ class MacVerifyRequest(proto.Message): languages that support this type. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - data = proto.Field( + data: bytes = proto.Field( proto.BYTES, number=2, ) - data_crc32c = proto.Field( + data_crc32c: wrappers_pb2.Int64Value = proto.Field( proto.MESSAGE, number=3, message=wrappers_pb2.Int64Value, ) - mac = proto.Field( + mac: bytes = proto.Field( proto.BYTES, number=4, ) - mac_crc32c = proto.Field( + mac_crc32c: wrappers_pb2.Int64Value = proto.Field( proto.MESSAGE, number=5, message=wrappers_pb2.Int64Value, @@ -1372,15 +1409,15 @@ class GenerateRandomBytesRequest(proto.Message): level is supported. """ - location = proto.Field( + location: str = proto.Field( proto.STRING, number=1, ) - length_bytes = proto.Field( + length_bytes: int = proto.Field( proto.INT32, number=2, ) - protection_level = proto.Field( + protection_level: resources.ProtectionLevel = proto.Field( proto.ENUM, number=3, enum=resources.ProtectionLevel, @@ -1453,28 +1490,28 @@ class EncryptResponse(proto.Message): used in encryption. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - ciphertext = proto.Field( + ciphertext: bytes = proto.Field( proto.BYTES, number=2, ) - ciphertext_crc32c = proto.Field( + ciphertext_crc32c: wrappers_pb2.Int64Value = proto.Field( proto.MESSAGE, number=4, message=wrappers_pb2.Int64Value, ) - verified_plaintext_crc32c = proto.Field( + verified_plaintext_crc32c: bool = proto.Field( proto.BOOL, number=5, ) - verified_additional_authenticated_data_crc32c = proto.Field( + verified_additional_authenticated_data_crc32c: bool = proto.Field( proto.BOOL, number=6, ) - protection_level = proto.Field( + protection_level: resources.ProtectionLevel = proto.Field( proto.ENUM, number=7, enum=resources.ProtectionLevel, @@ -1521,20 +1558,20 @@ class DecryptResponse(proto.Message): used in decryption. """ - plaintext = proto.Field( + plaintext: bytes = proto.Field( proto.BYTES, number=1, ) - plaintext_crc32c = proto.Field( + plaintext_crc32c: wrappers_pb2.Int64Value = proto.Field( proto.MESSAGE, number=2, message=wrappers_pb2.Int64Value, ) - used_primary = proto.Field( + used_primary: bool = proto.Field( proto.BOOL, number=3, ) - protection_level = proto.Field( + protection_level: resources.ProtectionLevel = proto.Field( proto.ENUM, number=4, enum=resources.ProtectionLevel, @@ -1607,28 +1644,28 @@ class AsymmetricSignResponse(proto.Message): used for signing. """ - signature = proto.Field( + signature: bytes = proto.Field( proto.BYTES, number=1, ) - signature_crc32c = proto.Field( + signature_crc32c: wrappers_pb2.Int64Value = proto.Field( proto.MESSAGE, number=2, message=wrappers_pb2.Int64Value, ) - verified_digest_crc32c = proto.Field( + verified_digest_crc32c: bool = proto.Field( proto.BOOL, number=3, ) - name = proto.Field( + name: str = proto.Field( proto.STRING, number=4, ) - verified_data_crc32c = proto.Field( + verified_data_crc32c: bool = proto.Field( proto.BOOL, number=5, ) - protection_level = proto.Field( + protection_level: resources.ProtectionLevel = proto.Field( proto.ENUM, number=6, enum=resources.ProtectionLevel, @@ -1682,20 +1719,20 @@ class AsymmetricDecryptResponse(proto.Message): used in decryption. """ - plaintext = proto.Field( + plaintext: bytes = proto.Field( proto.BYTES, number=1, ) - plaintext_crc32c = proto.Field( + plaintext_crc32c: wrappers_pb2.Int64Value = proto.Field( proto.MESSAGE, number=2, message=wrappers_pb2.Int64Value, ) - verified_ciphertext_crc32c = proto.Field( + verified_ciphertext_crc32c: bool = proto.Field( proto.BOOL, number=3, ) - protection_level = proto.Field( + protection_level: resources.ProtectionLevel = proto.Field( proto.ENUM, number=4, enum=resources.ProtectionLevel, @@ -1753,24 +1790,24 @@ class MacSignResponse(proto.Message): used for signing. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - mac = proto.Field( + mac: bytes = proto.Field( proto.BYTES, number=2, ) - mac_crc32c = proto.Field( + mac_crc32c: wrappers_pb2.Int64Value = proto.Field( proto.MESSAGE, number=3, message=wrappers_pb2.Int64Value, ) - verified_data_crc32c = proto.Field( + verified_data_crc32c: bool = proto.Field( proto.BOOL, number=4, ) - protection_level = proto.Field( + protection_level: resources.ProtectionLevel = proto.Field( proto.ENUM, number=5, enum=resources.ProtectionLevel, @@ -1837,27 +1874,27 @@ class MacVerifyResponse(proto.Message): used for verification. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - success = proto.Field( + success: bool = proto.Field( proto.BOOL, number=2, ) - verified_data_crc32c = proto.Field( + verified_data_crc32c: bool = proto.Field( proto.BOOL, number=3, ) - verified_mac_crc32c = proto.Field( + verified_mac_crc32c: bool = proto.Field( proto.BOOL, number=4, ) - verified_success_integrity = proto.Field( + verified_success_integrity: bool = proto.Field( proto.BOOL, number=5, ) - protection_level = proto.Field( + protection_level: resources.ProtectionLevel = proto.Field( proto.ENUM, number=6, enum=resources.ProtectionLevel, @@ -1890,11 +1927,11 @@ class GenerateRandomBytesResponse(proto.Message): support this type. """ - data = proto.Field( + data: bytes = proto.Field( proto.BYTES, number=1, ) - data_crc32c = proto.Field( + data_crc32c: wrappers_pb2.Int64Value = proto.Field( proto.MESSAGE, number=3, message=wrappers_pb2.Int64Value, @@ -1930,17 +1967,17 @@ class Digest(proto.Message): This field is a member of `oneof`_ ``digest``. """ - sha256 = proto.Field( + sha256: bytes = proto.Field( proto.BYTES, number=1, oneof="digest", ) - sha384 = proto.Field( + sha384: bytes = proto.Field( proto.BYTES, number=2, oneof="digest", ) - sha512 = proto.Field( + sha512: bytes = proto.Field( proto.BYTES, number=3, oneof="digest", @@ -1966,11 +2003,11 @@ class LocationMetadata(proto.Message): be created in this location. """ - hsm_available = proto.Field( + hsm_available: bool = proto.Field( proto.BOOL, number=1, ) - ekm_available = proto.Field( + ekm_available: bool = proto.Field( proto.BOOL, number=2, ) diff --git a/packages/google-cloud-kms/kms-v1-py.tar.gz b/packages/google-cloud-kms/kms-v1-py.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..b03fc4c90984dc9848337d5795880d79f7a387b7 GIT binary patch literal 65536 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%0AuP{ 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 z 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 literal 0 HcmV?d00001 diff --git a/packages/google-cloud-kms/noxfile.py b/packages/google-cloud-kms/noxfile.py index d752b54f56da..d8440c023805 100644 --- a/packages/google-cloud-kms/noxfile.py +++ b/packages/google-cloud-kms/noxfile.py @@ -17,6 +17,7 @@ # Generated by synthtool. DO NOT EDIT! from __future__ import absolute_import + import os import pathlib import re diff --git a/packages/google-cloud-kms/owlbot.py b/packages/google-cloud-kms/owlbot.py index 742c0c10f01f..3964d3f50cd9 100644 --- a/packages/google-cloud-kms/owlbot.py +++ b/packages/google-cloud-kms/owlbot.py @@ -1,4 +1,4 @@ -# Copyright 2018 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,20 +12,30 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""This script is used to synthesize generated parts of this library.""" +import json +from pathlib import Path +import shutil import synthtool as s import synthtool.gcp as gcp from synthtool.languages import python -import logging -logging.basicConfig(level=logging.DEBUG) +# ---------------------------------------------------------------------------- +# Copy the generated client from the owl-bot staging directory +# ---------------------------------------------------------------------------- -common = gcp.CommonTemplates() +clean_up_generated_samples = True -default_version = "v1" +# Load the default version defined in .repo-metadata.json. +default_version = json.load(open(".repo-metadata.json", "rt")).get( + "default_version" +) for library in s.get_staging_dirs(default_version): + if clean_up_generated_samples: + shutil.rmtree("samples/generated_samples", ignore_errors=True) + clean_up_generated_samples = False + # Escape single '_' which RST treats as target names s.replace(library / "google/**/resources.py", '''"(.*?)((SIGN)|(DECRYPT)|(HMAC))_"''', '''"\g<1>\g<2>\_"''') @@ -40,25 +50,22 @@ "format" ) - s.move(library, excludes=["README.rst", "setup.py", "nox*.py", "docs/index.rst"]) - + s.move([library], excludes=["**/gapic_version.py"]) s.remove_staging_dirs() # ---------------------------------------------------------------------------- # Add templated files # ---------------------------------------------------------------------------- -templated_files = common.py_library( - samples=True, + +templated_files = gcp.CommonTemplates().py_library( + cov_level=100, microgenerator=True, + versions=gcp.common.detect_versions(path="./google", default_first=True), ) -s.move(templated_files, excludes=[".coveragerc"]) # microgenerator has a good .coveragerc file - -# ---------------------------------------------------------------------------- -# Samples templates -# ---------------------------------------------------------------------------- +s.move(templated_files, excludes=[".coveragerc", ".github/release-please.yml"]) python.py_samples(skip_readmes=True) -python.configure_previous_major_version_branches() - -s.shell.run(["nox", "-s", "blacken"], hide_output=False) +# run format session for all directories which have a noxfile +for noxfile in Path(".").glob("**/noxfile.py"): + s.shell.run(["nox", "-s", "format"], cwd=noxfile.parent, hide_output=False) diff --git a/packages/google-cloud-kms/release-please-config.json b/packages/google-cloud-kms/release-please-config.json new file mode 100644 index 000000000000..f645cb5d9326 --- /dev/null +++ b/packages/google-cloud-kms/release-please-config.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "packages": { + ".": { + "release-type": "python", + "extra-files": [ + "google/cloud/kms/gapic_version.py", + { + "type": "json", + "path": "samples/generated_samples/snippet_metadata_google.cloud.kms.v1.json", + "jsonpath": "$.clientLibrary.version" + } + ] + } + }, + "release-type": "python", + "plugins": [ + { + "type": "sentence-case" + } + ], + "initial-version": "0.1.0" +} diff --git a/packages/google-cloud-kms/samples/generated_samples/cloudkms_v1_generated_key_management_service_create_import_job_async.py b/packages/google-cloud-kms/samples/generated_samples/cloudkms_v1_generated_key_management_service_create_import_job_async.py index cb1d4f0b9571..9254b72e95ee 100644 --- a/packages/google-cloud-kms/samples/generated_samples/cloudkms_v1_generated_key_management_service_create_import_job_async.py +++ b/packages/google-cloud-kms/samples/generated_samples/cloudkms_v1_generated_key_management_service_create_import_job_async.py @@ -40,7 +40,7 @@ async def sample_create_import_job(): # Initialize request argument(s) import_job = kms_v1.ImportJob() - import_job.import_method = "RSA_OAEP_4096_SHA1_AES_256" + import_job.import_method = "RSA_OAEP_4096_SHA256" import_job.protection_level = "EXTERNAL_VPC" request = kms_v1.CreateImportJobRequest( diff --git a/packages/google-cloud-kms/samples/generated_samples/cloudkms_v1_generated_key_management_service_create_import_job_sync.py b/packages/google-cloud-kms/samples/generated_samples/cloudkms_v1_generated_key_management_service_create_import_job_sync.py index 047aeea7da8f..c3fdc39cf363 100644 --- a/packages/google-cloud-kms/samples/generated_samples/cloudkms_v1_generated_key_management_service_create_import_job_sync.py +++ b/packages/google-cloud-kms/samples/generated_samples/cloudkms_v1_generated_key_management_service_create_import_job_sync.py @@ -40,7 +40,7 @@ def sample_create_import_job(): # Initialize request argument(s) import_job = kms_v1.ImportJob() - import_job.import_method = "RSA_OAEP_4096_SHA1_AES_256" + import_job.import_method = "RSA_OAEP_4096_SHA256" import_job.protection_level = "EXTERNAL_VPC" request = kms_v1.CreateImportJobRequest( diff --git a/packages/google-cloud-kms/samples/generated_samples/snippet_metadata_kms_v1.json b/packages/google-cloud-kms/samples/generated_samples/snippet_metadata_google.cloud.kms.v1.json similarity index 99% rename from packages/google-cloud-kms/samples/generated_samples/snippet_metadata_kms_v1.json rename to packages/google-cloud-kms/samples/generated_samples/snippet_metadata_google.cloud.kms.v1.json index 5c9c012704e5..329608b3e52c 100644 --- a/packages/google-cloud-kms/samples/generated_samples/snippet_metadata_kms_v1.json +++ b/packages/google-cloud-kms/samples/generated_samples/snippet_metadata_google.cloud.kms.v1.json @@ -7,7 +7,8 @@ } ], "language": "PYTHON", - "name": "google-cloud-kms" + "name": "google-cloud-kms", + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-kms/scripts/fixup_kms_v1_keywords.py b/packages/google-cloud-kms/scripts/fixup_kms_v1_keywords.py index 350dd9285be5..ce151fedaee1 100644 --- a/packages/google-cloud-kms/scripts/fixup_kms_v1_keywords.py +++ b/packages/google-cloud-kms/scripts/fixup_kms_v1_keywords.py @@ -56,7 +56,7 @@ class kmsCallTransformer(cst.CSTTransformer): 'get_import_job': ('name', ), 'get_key_ring': ('name', ), 'get_public_key': ('name', ), - 'import_crypto_key_version': ('parent', 'algorithm', 'import_job', 'crypto_key_version', 'rsa_aes_wrapped_key', ), + 'import_crypto_key_version': ('parent', 'algorithm', 'import_job', 'crypto_key_version', 'wrapped_key', 'rsa_aes_wrapped_key', ), 'list_crypto_keys': ('parent', 'page_size', 'page_token', 'version_view', 'filter', 'order_by', ), 'list_crypto_key_versions': ('parent', 'page_size', 'page_token', 'view', 'filter', 'order_by', ), 'list_ekm_connections': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), diff --git a/packages/google-cloud-kms/setup.py b/packages/google-cloud-kms/setup.py index 2278438399ab..ce4752d7a4fe 100644 --- a/packages/google-cloud-kms/setup.py +++ b/packages/google-cloud-kms/setup.py @@ -1,36 +1,47 @@ # -*- coding: utf-8 -*- -# -# Copyright 2018 Google LLC +# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # -# https://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - +# import io import os -import setuptools +import setuptools # type: ignore + +package_root = os.path.abspath(os.path.dirname(__file__)) name = "google-cloud-kms" -description = "Cloud Key Management Service (KMS) API client library" -version = "2.12.3" -release_status = "Development Status :: 5 - Production/Stable" + + +description = "Google Cloud Kms API client library" + +version = {} +with open(os.path.join(package_root, "google/cloud/kms/gapic_version.py")) as fp: + exec(fp.read(), version) +version = version["__version__"] + +if version[0] == "0": + release_status = "Development Status :: 4 - Beta" +else: + release_status = "Development Status :: 5 - Production/Stable" + dependencies = [ - "google-api-core[grpc] >= 1.32.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*", - "grpc-google-iam-v1 >=0.12.4, <1.0.0dev", + "google-api-core[grpc] >= 1.33.2, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*", "proto-plus >= 1.22.0, <2.0.0dev", "protobuf>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", + "grpc-google-iam-v1 >= 0.12.4, < 1.0.0dev", ] - -extras = {"libcst": "libcst >= 0.2.5"} +url = "https://github.com/googleapis/python-kms" package_root = os.path.abspath(os.path.dirname(__file__)) @@ -38,15 +49,12 @@ with io.open(readme_filename, encoding="utf-8") as readme_file: readme = readme_file.read() -# Only include packages under the 'google' namespace. Do not include tests, -# benchmarks, etc. packages = [ package for package in setuptools.PEP420PackageFinder.find() if package.startswith("google") ] - namespaces = ["google"] if "google.cloud" in packages: namespaces.append("google.cloud") @@ -59,7 +67,7 @@ author="Google LLC", author_email="googleapis-packages@google.com", license="Apache 2.0", - url="https://github.com/googleapis/python-kms", + url=url, classifiers=[ release_status, "Intended Audience :: Developers", @@ -75,11 +83,9 @@ ], platforms="Posix; MacOS X; Windows", packages=packages, + python_requires=">=3.7", namespace_packages=namespaces, install_requires=dependencies, - extras_require=extras, - python_requires=">=3.7", - scripts=["scripts/fixup_kms_v1_keywords.py"], include_package_data=True, zip_safe=False, ) diff --git a/packages/google-cloud-kms/testing/constraints-3.10.txt b/packages/google-cloud-kms/testing/constraints-3.10.txt index e69de29bb2d1..ad3f0fa58e2d 100644 --- a/packages/google-cloud-kms/testing/constraints-3.10.txt +++ b/packages/google-cloud-kms/testing/constraints-3.10.txt @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/packages/google-cloud-kms/testing/constraints-3.11.txt b/packages/google-cloud-kms/testing/constraints-3.11.txt index e69de29bb2d1..ad3f0fa58e2d 100644 --- a/packages/google-cloud-kms/testing/constraints-3.11.txt +++ b/packages/google-cloud-kms/testing/constraints-3.11.txt @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/packages/google-cloud-kms/testing/constraints-3.7.txt b/packages/google-cloud-kms/testing/constraints-3.7.txt index 90f4b6d9db25..883a87aefd06 100644 --- a/packages/google-cloud-kms/testing/constraints-3.7.txt +++ b/packages/google-cloud-kms/testing/constraints-3.7.txt @@ -1,12 +1,10 @@ # This constraints file is used to check that lower bounds # are correct in setup.py -# List *all* library dependencies and extras in this file. +# List all library dependencies and extras in this file. # Pin the version to the lower bound. -# -# e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev", -# Then this file should have foo==1.14.0 -google-api-core==1.32.0 -grpc-google-iam-v1==0.12.4 +# e.g., if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0dev", +# Then this file should have google-cloud-foo==1.14.0 +google-api-core==1.33.2 proto-plus==1.22.0 -libcst==0.2.5 protobuf==3.19.5 +grpc-google-iam-v1==0.12.4 diff --git a/packages/google-cloud-kms/testing/constraints-3.8.txt b/packages/google-cloud-kms/testing/constraints-3.8.txt index da93009be5fe..ad3f0fa58e2d 100644 --- a/packages/google-cloud-kms/testing/constraints-3.8.txt +++ b/packages/google-cloud-kms/testing/constraints-3.8.txt @@ -1,2 +1,7 @@ -# This constraints file is left inentionally empty -# so the latest version of dependencies is installed \ No newline at end of file +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/packages/google-cloud-kms/testing/constraints-3.9.txt b/packages/google-cloud-kms/testing/constraints-3.9.txt index da93009be5fe..ad3f0fa58e2d 100644 --- a/packages/google-cloud-kms/testing/constraints-3.9.txt +++ b/packages/google-cloud-kms/testing/constraints-3.9.txt @@ -1,2 +1,7 @@ -# This constraints file is left inentionally empty -# so the latest version of dependencies is installed \ No newline at end of file +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/packages/google-cloud-kms/tests/unit/gapic/kms_v1/test_ekm_service.py b/packages/google-cloud-kms/tests/unit/gapic/kms_v1/test_ekm_service.py index d30ef2be840a..869bf0e33944 100644 --- a/packages/google-cloud-kms/tests/unit/gapic/kms_v1/test_ekm_service.py +++ b/packages/google-cloud-kms/tests/unit/gapic/kms_v1/test_ekm_service.py @@ -22,33 +22,33 @@ except ImportError: # pragma: NO COVER import mock -import grpc -from grpc.experimental import aio import math -import pytest -from proto.marshal.rules.dates import DurationRule, TimestampRule -from proto.marshal.rules import wrappers +from google.api_core import gapic_v1, grpc_helpers, grpc_helpers_async, path_template from google.api_core import client_options from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import grpc_helpers -from google.api_core import grpc_helpers_async -from google.api_core import path_template +import google.auth from google.auth import credentials as ga_credentials from google.auth.exceptions import MutualTLSChannelError -from google.cloud.kms_v1.services.ekm_service import EkmServiceAsyncClient -from google.cloud.kms_v1.services.ekm_service import EkmServiceClient -from google.cloud.kms_v1.services.ekm_service import pagers -from google.cloud.kms_v1.services.ekm_service import transports -from google.cloud.kms_v1.types import ekm_service from google.iam.v1 import iam_policy_pb2 # type: ignore from google.iam.v1 import options_pb2 # type: ignore from google.iam.v1 import policy_pb2 # type: ignore from google.oauth2 import service_account from google.protobuf import field_mask_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore -import google.auth +import grpc +from grpc.experimental import aio +from proto.marshal.rules import wrappers +from proto.marshal.rules.dates import DurationRule, TimestampRule +import pytest + +from google.cloud.kms_v1.services.ekm_service import ( + EkmServiceAsyncClient, + EkmServiceClient, + pagers, + transports, +) +from google.cloud.kms_v1.types import ekm_service def client_cert_source_callback(): diff --git a/packages/google-cloud-kms/tests/unit/gapic/kms_v1/test_key_management_service.py b/packages/google-cloud-kms/tests/unit/gapic/kms_v1/test_key_management_service.py index c3fde682fd5a..a5edf94def22 100644 --- a/packages/google-cloud-kms/tests/unit/gapic/kms_v1/test_key_management_service.py +++ b/packages/google-cloud-kms/tests/unit/gapic/kms_v1/test_key_management_service.py @@ -22,31 +22,14 @@ except ImportError: # pragma: NO COVER import mock -import grpc -from grpc.experimental import aio import math -import pytest -from proto.marshal.rules.dates import DurationRule, TimestampRule -from proto.marshal.rules import wrappers +from google.api_core import gapic_v1, grpc_helpers, grpc_helpers_async, path_template from google.api_core import client_options from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import grpc_helpers -from google.api_core import grpc_helpers_async -from google.api_core import path_template +import google.auth from google.auth import credentials as ga_credentials from google.auth.exceptions import MutualTLSChannelError -from google.cloud.kms_v1.services.key_management_service import ( - KeyManagementServiceAsyncClient, -) -from google.cloud.kms_v1.services.key_management_service import ( - KeyManagementServiceClient, -) -from google.cloud.kms_v1.services.key_management_service import pagers -from google.cloud.kms_v1.services.key_management_service import transports -from google.cloud.kms_v1.types import resources -from google.cloud.kms_v1.types import service from google.iam.v1 import iam_policy_pb2 # type: ignore from google.iam.v1 import options_pb2 # type: ignore from google.iam.v1 import policy_pb2 # type: ignore @@ -55,7 +38,19 @@ from google.protobuf import field_mask_pb2 # type: ignore from google.protobuf import timestamp_pb2 # type: ignore from google.protobuf import wrappers_pb2 # type: ignore -import google.auth +import grpc +from grpc.experimental import aio +from proto.marshal.rules import wrappers +from proto.marshal.rules.dates import DurationRule, TimestampRule +import pytest + +from google.cloud.kms_v1.services.key_management_service import ( + KeyManagementServiceAsyncClient, + KeyManagementServiceClient, + pagers, + transports, +) +from google.cloud.kms_v1.types import resources, service def client_cert_source_callback():