From 627f86fbe6f4755d0401cc95c2f4f5fd345628d7 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Mon, 28 Nov 2022 11:28:56 -0500 Subject: [PATCH] feat: added federation API (#185) 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 * add owlbot.py to exclude generated gapic_version.py * set manifest to true in .github/release-please.yml * add release-please-config.json * 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 * chore(python): fix warehouse-package-name for metastore v1/v1beta/v1alpha PiperOrigin-RevId: 490488377 Source-Link: https://github.com/googleapis/googleapis/commit/dc9658d1aad8c7bdc4ab5bf68f87e3c9da521af0 Source-Link: https://github.com/googleapis/googleapis-gen/commit/c07e108cee03b9440671841f32b3ea29bebf2a40 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiYzA3ZTEwOGNlZTAzYjk0NDA2NzE4NDFmMzJiM2VhMjliZWJmMmE0MCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * feat: added federation API feat: added EncryptionConfig field feat: added NetworkConfig field feat: added DatabaseType field feat: added TelemetryConfiguration field PiperOrigin-RevId: 490636886 Source-Link: https://github.com/googleapis/googleapis/commit/791374cc57cabe9c78c7c87d29f85ac6a2b5a370 Source-Link: https://github.com/googleapis/googleapis-gen/commit/7a72bd9cca07fbe042ac023ffb5fd594142d795d Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiN2E3MmJkOWNjYTA3ZmJlMDQyYWMwMjNmZmI1ZmQ1OTQxNDJkNzk1ZCJ9 * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md Co-authored-by: Owl Bot Co-authored-by: Anthonios Partheniou --- .../.github/release-please.yml | 1 + .../.release-please-manifest.json | 3 + .../dataproc_metastore_federation.rst | 10 + .../docs/metastore_v1/services.rst | 1 + .../docs/metastore_v1/types.rst | 1 - .../dataproc_metastore_federation.rst | 10 + .../docs/metastore_v1alpha/services.rst | 1 + .../docs/metastore_v1alpha/types.rst | 1 - .../dataproc_metastore_federation.rst | 10 + .../docs/metastore_v1beta/services.rst | 1 + .../docs/metastore_v1beta/types.rst | 1 - .../google/cloud/metastore/__init__.py | 36 + .../google/cloud/metastore/gapic_version.py | 16 + .../google/cloud/metastore/py.typed | 2 +- .../google/cloud/metastore_v1/__init__.py | 34 + .../cloud/metastore_v1/gapic_metadata.json | 64 + .../google/cloud/metastore_v1/py.typed | 2 +- .../dataproc_metastore/async_client.py | 156 +- .../services/dataproc_metastore/client.py | 152 +- .../dataproc_metastore/transports/base.py | 4 +- .../dataproc_metastore/transports/grpc.py | 20 +- .../transports/grpc_asyncio.py | 16 +- .../dataproc_metastore_federation/__init__.py | 22 + .../async_client.py | 902 +++++ .../dataproc_metastore_federation/client.py | 1133 +++++++ .../dataproc_metastore_federation/pagers.py | 157 + .../transports/__init__.py | 34 + .../transports/base.py | 227 ++ .../transports/grpc.py | 411 +++ .../transports/grpc_asyncio.py | 418 +++ .../cloud/metastore_v1/types/__init__.py | 24 + .../cloud/metastore_v1/types/metastore.py | 416 ++- .../types/metastore_federation.py | 431 +++ .../cloud/metastore_v1alpha/__init__.py | 30 + .../metastore_v1alpha/gapic_metadata.json | 64 + .../google/cloud/metastore_v1alpha/py.typed | 2 +- .../dataproc_metastore/async_client.py | 160 +- .../services/dataproc_metastore/client.py | 136 +- .../dataproc_metastore/transports/base.py | 4 +- .../dataproc_metastore/transports/grpc.py | 20 +- .../transports/grpc_asyncio.py | 16 +- .../dataproc_metastore_federation/__init__.py | 22 + .../async_client.py | 902 +++++ .../dataproc_metastore_federation/client.py | 1133 +++++++ .../dataproc_metastore_federation/pagers.py | 157 + .../transports/__init__.py | 34 + .../transports/base.py | 227 ++ .../transports/grpc.py | 411 +++ .../transports/grpc_asyncio.py | 418 +++ .../cloud/metastore_v1alpha/types/__init__.py | 20 + .../metastore_v1alpha/types/metastore.py | 361 +- .../types/metastore_federation.py | 432 +++ .../google/cloud/metastore_v1beta/__init__.py | 40 + .../metastore_v1beta/gapic_metadata.json | 64 + .../dataproc_metastore/async_client.py | 177 +- .../services/dataproc_metastore/client.py | 193 +- .../dataproc_metastore/transports/base.py | 2 +- .../dataproc_metastore/transports/grpc.py | 33 +- .../transports/grpc_asyncio.py | 29 +- .../dataproc_metastore_federation/__init__.py | 22 + .../async_client.py | 902 +++++ .../dataproc_metastore_federation/client.py | 1133 +++++++ .../dataproc_metastore_federation/pagers.py | 157 + .../transports/__init__.py | 34 + .../transports/base.py | 227 ++ .../transports/grpc.py | 411 +++ .../transports/grpc_asyncio.py | 418 +++ .../cloud/metastore_v1beta/types/__init__.py | 30 + .../cloud/metastore_v1beta/types/metastore.py | 572 +++- .../types/metastore_federation.py | 432 +++ .../google-cloud-dataproc-metastore/owlbot.py | 56 + .../release-please-config.json | 33 + ..._dataproc_metastore_create_backup_async.py | 2 +- ...d_dataproc_metastore_create_backup_sync.py | 2 +- ..._metastore_create_metadata_import_async.py | 2 +- ...c_metastore_create_metadata_import_sync.py | 2 +- ...dataproc_metastore_create_service_async.py | 2 +- ..._dataproc_metastore_create_service_sync.py | 2 +- ..._dataproc_metastore_delete_backup_async.py | 2 +- ...d_dataproc_metastore_delete_backup_sync.py | 2 +- ...dataproc_metastore_delete_service_async.py | 2 +- ..._dataproc_metastore_delete_service_sync.py | 2 +- ...ataproc_metastore_export_metadata_async.py | 2 +- ...dataproc_metastore_export_metadata_sync.py | 2 +- ...tore_federation_create_federation_async.py | 57 + ...store_federation_create_federation_sync.py | 57 + ...tore_federation_delete_federation_async.py | 56 + ...store_federation_delete_federation_sync.py | 56 + ...tastore_federation_get_federation_async.py | 52 + ...etastore_federation_get_federation_sync.py | 52 + ...store_federation_list_federations_async.py | 53 + ...astore_federation_list_federations_sync.py | 53 + ...tore_federation_update_federation_async.py | 55 + ...store_federation_update_federation_sync.py | 55 + ...ted_dataproc_metastore_get_backup_async.py | 2 +- ...ated_dataproc_metastore_get_backup_sync.py | 2 +- ...roc_metastore_get_metadata_import_async.py | 2 +- ...proc_metastore_get_metadata_import_sync.py | 2 +- ...ed_dataproc_metastore_get_service_async.py | 2 +- ...ted_dataproc_metastore_get_service_sync.py | 2 +- ...d_dataproc_metastore_list_backups_async.py | 2 +- ...ed_dataproc_metastore_list_backups_sync.py | 2 +- ...c_metastore_list_metadata_imports_async.py | 2 +- ...oc_metastore_list_metadata_imports_sync.py | 2 +- ..._dataproc_metastore_list_services_async.py | 2 +- ...d_dataproc_metastore_list_services_sync.py | 2 +- ...ataproc_metastore_restore_service_async.py | 2 +- ...dataproc_metastore_restore_service_sync.py | 2 +- ..._metastore_update_metadata_import_async.py | 2 +- ...c_metastore_update_metadata_import_sync.py | 2 +- ...dataproc_metastore_update_service_async.py | 2 +- ..._dataproc_metastore_update_service_sync.py | 2 +- ..._dataproc_metastore_create_backup_async.py | 2 +- ...d_dataproc_metastore_create_backup_sync.py | 2 +- ..._metastore_create_metadata_import_async.py | 2 +- ...c_metastore_create_metadata_import_sync.py | 2 +- ...dataproc_metastore_create_service_async.py | 2 +- ..._dataproc_metastore_create_service_sync.py | 2 +- ..._dataproc_metastore_delete_backup_async.py | 2 +- ...d_dataproc_metastore_delete_backup_sync.py | 2 +- ...dataproc_metastore_delete_service_async.py | 2 +- ..._dataproc_metastore_delete_service_sync.py | 2 +- ...ataproc_metastore_export_metadata_async.py | 2 +- ...dataproc_metastore_export_metadata_sync.py | 2 +- ...tore_federation_create_federation_async.py | 57 + ...store_federation_create_federation_sync.py | 57 + ...tore_federation_delete_federation_async.py | 56 + ...store_federation_delete_federation_sync.py | 56 + ...tastore_federation_get_federation_async.py | 52 + ...etastore_federation_get_federation_sync.py | 52 + ...store_federation_list_federations_async.py | 53 + ...astore_federation_list_federations_sync.py | 53 + ...tore_federation_update_federation_async.py | 55 + ...store_federation_update_federation_sync.py | 55 + ...ted_dataproc_metastore_get_backup_async.py | 2 +- ...ated_dataproc_metastore_get_backup_sync.py | 2 +- ...roc_metastore_get_metadata_import_async.py | 2 +- ...proc_metastore_get_metadata_import_sync.py | 2 +- ...ed_dataproc_metastore_get_service_async.py | 2 +- ...ted_dataproc_metastore_get_service_sync.py | 2 +- ...d_dataproc_metastore_list_backups_async.py | 2 +- ...ed_dataproc_metastore_list_backups_sync.py | 2 +- ...c_metastore_list_metadata_imports_async.py | 2 +- ...oc_metastore_list_metadata_imports_sync.py | 2 +- ..._dataproc_metastore_list_services_async.py | 2 +- ...d_dataproc_metastore_list_services_sync.py | 2 +- ...ataproc_metastore_restore_service_async.py | 2 +- ...dataproc_metastore_restore_service_sync.py | 2 +- ..._metastore_update_metadata_import_async.py | 2 +- ...c_metastore_update_metadata_import_sync.py | 2 +- ...dataproc_metastore_update_service_async.py | 2 +- ..._dataproc_metastore_update_service_sync.py | 2 +- ...tore_federation_create_federation_async.py | 57 + ...store_federation_create_federation_sync.py | 57 + ...tore_federation_delete_federation_async.py | 56 + ...store_federation_delete_federation_sync.py | 56 + ...tastore_federation_get_federation_async.py | 52 + ...etastore_federation_get_federation_sync.py | 52 + ...store_federation_list_federations_async.py | 53 + ...astore_federation_list_federations_sync.py | 53 + ...tore_federation_update_federation_async.py | 55 + ...store_federation_update_federation_sync.py | 55 + ...t_metadata_google.cloud.metastore.v1.json} | 832 ++++- ...adata_google.cloud.metastore.v1alpha.json} | 832 ++++- ...tadata_google.cloud.metastore.v1beta.json} | 832 ++++- .../scripts/fixup_metastore_v1_keywords.py | 5 + .../fixup_metastore_v1alpha_keywords.py | 5 + .../fixup_metastore_v1beta_keywords.py | 5 + .../google-cloud-dataproc-metastore/setup.py | 59 +- .../testing/constraints-3.10.txt | 6 + .../testing/constraints-3.11.txt | 6 + .../testing/constraints-3.7.txt | 23 +- .../testing/constraints-3.8.txt | 6 + .../testing/constraints-3.9.txt | 6 + .../metastore_v1/test_dataproc_metastore.py | 55 +- .../test_dataproc_metastore_federation.py | 2931 +++++++++++++++++ .../test_dataproc_metastore.py | 1 + .../test_dataproc_metastore_federation.py | 2931 +++++++++++++++++ .../test_dataproc_metastore.py | 95 +- .../test_dataproc_metastore_federation.py | 2931 +++++++++++++++++ 180 files changed, 26473 insertions(+), 1077 deletions(-) create mode 100644 packages/google-cloud-dataproc-metastore/.release-please-manifest.json create mode 100644 packages/google-cloud-dataproc-metastore/docs/metastore_v1/dataproc_metastore_federation.rst create mode 100644 packages/google-cloud-dataproc-metastore/docs/metastore_v1alpha/dataproc_metastore_federation.rst create mode 100644 packages/google-cloud-dataproc-metastore/docs/metastore_v1beta/dataproc_metastore_federation.rst create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore/gapic_version.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/__init__.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/async_client.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/client.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/pagers.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/__init__.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/base.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/grpc.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/grpc_asyncio.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/types/metastore_federation.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/__init__.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/async_client.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/client.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/pagers.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/__init__.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/base.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/grpc.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/grpc_asyncio.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/types/metastore_federation.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/__init__.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/async_client.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/client.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/pagers.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/__init__.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/base.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/grpc.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/grpc_asyncio.py create mode 100644 packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/types/metastore_federation.py create mode 100644 packages/google-cloud-dataproc-metastore/owlbot.py create mode 100644 packages/google-cloud-dataproc-metastore/release-please-config.json create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_create_federation_async.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_create_federation_sync.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_delete_federation_async.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_delete_federation_sync.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_get_federation_async.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_get_federation_sync.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_list_federations_async.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_list_federations_sync.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_update_federation_async.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_update_federation_sync.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_async.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_sync.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_async.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_sync.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_async.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_sync.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_async.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_sync.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_async.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_sync.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_create_federation_async.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_create_federation_sync.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_async.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_sync.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_get_federation_async.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_get_federation_sync.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_list_federations_async.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_list_federations_sync.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_update_federation_async.py create mode 100644 packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_update_federation_sync.py rename packages/google-cloud-dataproc-metastore/samples/generated_samples/{snippet_metadata_metastore_v1.json => snippet_metadata_google.cloud.metastore.v1.json} (74%) rename packages/google-cloud-dataproc-metastore/samples/generated_samples/{snippet_metadata_metastore_v1alpha.json => snippet_metadata_google.cloud.metastore.v1alpha.json} (74%) rename packages/google-cloud-dataproc-metastore/samples/generated_samples/{snippet_metadata_metastore_v1beta.json => snippet_metadata_google.cloud.metastore.v1beta.json} (74%) create mode 100644 packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1/test_dataproc_metastore_federation.py create mode 100644 packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1alpha/test_dataproc_metastore_federation.py create mode 100644 packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1beta/test_dataproc_metastore_federation.py diff --git a/packages/google-cloud-dataproc-metastore/.github/release-please.yml b/packages/google-cloud-dataproc-metastore/.github/release-please.yml index 6def37a84c98..e9a4f0085128 100644 --- a/packages/google-cloud-dataproc-metastore/.github/release-please.yml +++ b/packages/google-cloud-dataproc-metastore/.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-dataproc-metastore/.release-please-manifest.json b/packages/google-cloud-dataproc-metastore/.release-please-manifest.json new file mode 100644 index 000000000000..a0457ca5e897 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "1.6.3" +} diff --git a/packages/google-cloud-dataproc-metastore/docs/metastore_v1/dataproc_metastore_federation.rst b/packages/google-cloud-dataproc-metastore/docs/metastore_v1/dataproc_metastore_federation.rst new file mode 100644 index 000000000000..78c95c88f377 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/docs/metastore_v1/dataproc_metastore_federation.rst @@ -0,0 +1,10 @@ +DataprocMetastoreFederation +--------------------------------------------- + +.. automodule:: google.cloud.metastore_v1.services.dataproc_metastore_federation + :members: + :inherited-members: + +.. automodule:: google.cloud.metastore_v1.services.dataproc_metastore_federation.pagers + :members: + :inherited-members: diff --git a/packages/google-cloud-dataproc-metastore/docs/metastore_v1/services.rst b/packages/google-cloud-dataproc-metastore/docs/metastore_v1/services.rst index a3f1003e6634..2bb0a56fd232 100644 --- a/packages/google-cloud-dataproc-metastore/docs/metastore_v1/services.rst +++ b/packages/google-cloud-dataproc-metastore/docs/metastore_v1/services.rst @@ -4,3 +4,4 @@ Services for Google Cloud Metastore v1 API :maxdepth: 2 dataproc_metastore + dataproc_metastore_federation diff --git a/packages/google-cloud-dataproc-metastore/docs/metastore_v1/types.rst b/packages/google-cloud-dataproc-metastore/docs/metastore_v1/types.rst index 48f7b8ef14b4..cc9df1b442c7 100644 --- a/packages/google-cloud-dataproc-metastore/docs/metastore_v1/types.rst +++ b/packages/google-cloud-dataproc-metastore/docs/metastore_v1/types.rst @@ -3,5 +3,4 @@ Types for Google Cloud Metastore v1 API .. automodule:: google.cloud.metastore_v1.types :members: - :undoc-members: :show-inheritance: diff --git a/packages/google-cloud-dataproc-metastore/docs/metastore_v1alpha/dataproc_metastore_federation.rst b/packages/google-cloud-dataproc-metastore/docs/metastore_v1alpha/dataproc_metastore_federation.rst new file mode 100644 index 000000000000..71b4b18a0108 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/docs/metastore_v1alpha/dataproc_metastore_federation.rst @@ -0,0 +1,10 @@ +DataprocMetastoreFederation +--------------------------------------------- + +.. automodule:: google.cloud.metastore_v1alpha.services.dataproc_metastore_federation + :members: + :inherited-members: + +.. automodule:: google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.pagers + :members: + :inherited-members: diff --git a/packages/google-cloud-dataproc-metastore/docs/metastore_v1alpha/services.rst b/packages/google-cloud-dataproc-metastore/docs/metastore_v1alpha/services.rst index e99fba974e53..5e2f664e0a03 100644 --- a/packages/google-cloud-dataproc-metastore/docs/metastore_v1alpha/services.rst +++ b/packages/google-cloud-dataproc-metastore/docs/metastore_v1alpha/services.rst @@ -4,3 +4,4 @@ Services for Google Cloud Metastore v1alpha API :maxdepth: 2 dataproc_metastore + dataproc_metastore_federation diff --git a/packages/google-cloud-dataproc-metastore/docs/metastore_v1alpha/types.rst b/packages/google-cloud-dataproc-metastore/docs/metastore_v1alpha/types.rst index 0f7bc8042bdc..4713153f0fdf 100644 --- a/packages/google-cloud-dataproc-metastore/docs/metastore_v1alpha/types.rst +++ b/packages/google-cloud-dataproc-metastore/docs/metastore_v1alpha/types.rst @@ -3,5 +3,4 @@ Types for Google Cloud Metastore v1alpha API .. automodule:: google.cloud.metastore_v1alpha.types :members: - :undoc-members: :show-inheritance: diff --git a/packages/google-cloud-dataproc-metastore/docs/metastore_v1beta/dataproc_metastore_federation.rst b/packages/google-cloud-dataproc-metastore/docs/metastore_v1beta/dataproc_metastore_federation.rst new file mode 100644 index 000000000000..5a09d31768a7 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/docs/metastore_v1beta/dataproc_metastore_federation.rst @@ -0,0 +1,10 @@ +DataprocMetastoreFederation +--------------------------------------------- + +.. automodule:: google.cloud.metastore_v1beta.services.dataproc_metastore_federation + :members: + :inherited-members: + +.. automodule:: google.cloud.metastore_v1beta.services.dataproc_metastore_federation.pagers + :members: + :inherited-members: diff --git a/packages/google-cloud-dataproc-metastore/docs/metastore_v1beta/services.rst b/packages/google-cloud-dataproc-metastore/docs/metastore_v1beta/services.rst index ff37440182e0..5e9f5ae8607b 100644 --- a/packages/google-cloud-dataproc-metastore/docs/metastore_v1beta/services.rst +++ b/packages/google-cloud-dataproc-metastore/docs/metastore_v1beta/services.rst @@ -4,3 +4,4 @@ Services for Google Cloud Metastore v1beta API :maxdepth: 2 dataproc_metastore + dataproc_metastore_federation diff --git a/packages/google-cloud-dataproc-metastore/docs/metastore_v1beta/types.rst b/packages/google-cloud-dataproc-metastore/docs/metastore_v1beta/types.rst index 963a364e5b9f..c52aabe7a8b2 100644 --- a/packages/google-cloud-dataproc-metastore/docs/metastore_v1beta/types.rst +++ b/packages/google-cloud-dataproc-metastore/docs/metastore_v1beta/types.rst @@ -3,5 +3,4 @@ Types for Google Cloud Metastore v1beta API .. automodule:: google.cloud.metastore_v1beta.types :members: - :undoc-members: :show-inheritance: diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore/__init__.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore/__init__.py index e99e812f9314..7a01a0efe8e8 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore/__init__.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore/__init__.py @@ -13,6 +13,10 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from google.cloud.metastore import gapic_version as package_version + +__version__ = package_version.__version__ + from google.cloud.metastore_v1.services.dataproc_metastore.async_client import ( DataprocMetastoreAsyncClient, @@ -20,6 +24,12 @@ from google.cloud.metastore_v1.services.dataproc_metastore.client import ( DataprocMetastoreClient, ) +from google.cloud.metastore_v1.services.dataproc_metastore_federation.async_client import ( + DataprocMetastoreFederationAsyncClient, +) +from google.cloud.metastore_v1.services.dataproc_metastore_federation.client import ( + DataprocMetastoreFederationClient, +) from google.cloud.metastore_v1.types.metastore import ( Backup, CreateBackupRequest, @@ -28,6 +38,7 @@ DatabaseDumpSpec, DeleteBackupRequest, DeleteServiceRequest, + EncryptionConfig, ExportMetadataRequest, GetBackupRequest, GetMetadataImportRequest, @@ -45,18 +56,32 @@ MetadataExport, MetadataImport, MetadataManagementActivity, + NetworkConfig, OperationMetadata, Restore, RestoreServiceRequest, Secret, Service, + TelemetryConfig, UpdateMetadataImportRequest, UpdateServiceRequest, ) +from google.cloud.metastore_v1.types.metastore_federation import ( + BackendMetastore, + CreateFederationRequest, + DeleteFederationRequest, + Federation, + GetFederationRequest, + ListFederationsRequest, + ListFederationsResponse, + UpdateFederationRequest, +) __all__ = ( "DataprocMetastoreClient", "DataprocMetastoreAsyncClient", + "DataprocMetastoreFederationClient", + "DataprocMetastoreFederationAsyncClient", "Backup", "CreateBackupRequest", "CreateMetadataImportRequest", @@ -64,6 +89,7 @@ "DatabaseDumpSpec", "DeleteBackupRequest", "DeleteServiceRequest", + "EncryptionConfig", "ExportMetadataRequest", "GetBackupRequest", "GetMetadataImportRequest", @@ -81,11 +107,21 @@ "MetadataExport", "MetadataImport", "MetadataManagementActivity", + "NetworkConfig", "OperationMetadata", "Restore", "RestoreServiceRequest", "Secret", "Service", + "TelemetryConfig", "UpdateMetadataImportRequest", "UpdateServiceRequest", + "BackendMetastore", + "CreateFederationRequest", + "DeleteFederationRequest", + "Federation", + "GetFederationRequest", + "ListFederationsRequest", + "ListFederationsResponse", + "UpdateFederationRequest", ) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore/gapic_version.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore/gapic_version.py new file mode 100644 index 000000000000..a7807d3a8585 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore/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__ = "1.6.3" # {x-release-please-version} diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore/py.typed b/packages/google-cloud-dataproc-metastore/google/cloud/metastore/py.typed index 72edca0d3f63..f949c43bdc32 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore/py.typed +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore/py.typed @@ -1,2 +1,2 @@ # Marker file for PEP 561. -# The google-cloud-metastore package uses inline types. +# The google-cloud-dataproc-metastore package uses inline types. diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/__init__.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/__init__.py index 4591f5218169..bcf385e0e569 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/__init__.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/__init__.py @@ -13,11 +13,19 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from google.cloud.metastore import gapic_version as package_version + +__version__ = package_version.__version__ + from .services.dataproc_metastore import ( DataprocMetastoreAsyncClient, DataprocMetastoreClient, ) +from .services.dataproc_metastore_federation import ( + DataprocMetastoreFederationAsyncClient, + DataprocMetastoreFederationClient, +) from .types.metastore import ( Backup, CreateBackupRequest, @@ -26,6 +34,7 @@ DatabaseDumpSpec, DeleteBackupRequest, DeleteServiceRequest, + EncryptionConfig, ExportMetadataRequest, GetBackupRequest, GetMetadataImportRequest, @@ -43,33 +52,55 @@ MetadataExport, MetadataImport, MetadataManagementActivity, + NetworkConfig, OperationMetadata, Restore, RestoreServiceRequest, Secret, Service, + TelemetryConfig, UpdateMetadataImportRequest, UpdateServiceRequest, ) +from .types.metastore_federation import ( + BackendMetastore, + CreateFederationRequest, + DeleteFederationRequest, + Federation, + GetFederationRequest, + ListFederationsRequest, + ListFederationsResponse, + UpdateFederationRequest, +) __all__ = ( "DataprocMetastoreAsyncClient", + "DataprocMetastoreFederationAsyncClient", + "BackendMetastore", "Backup", "CreateBackupRequest", + "CreateFederationRequest", "CreateMetadataImportRequest", "CreateServiceRequest", "DatabaseDumpSpec", "DataprocMetastoreClient", + "DataprocMetastoreFederationClient", "DeleteBackupRequest", + "DeleteFederationRequest", "DeleteServiceRequest", + "EncryptionConfig", "ExportMetadataRequest", + "Federation", "GetBackupRequest", + "GetFederationRequest", "GetMetadataImportRequest", "GetServiceRequest", "HiveMetastoreConfig", "KerberosConfig", "ListBackupsRequest", "ListBackupsResponse", + "ListFederationsRequest", + "ListFederationsResponse", "ListMetadataImportsRequest", "ListMetadataImportsResponse", "ListServicesRequest", @@ -79,11 +110,14 @@ "MetadataExport", "MetadataImport", "MetadataManagementActivity", + "NetworkConfig", "OperationMetadata", "Restore", "RestoreServiceRequest", "Secret", "Service", + "TelemetryConfig", + "UpdateFederationRequest", "UpdateMetadataImportRequest", "UpdateServiceRequest", ) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/gapic_metadata.json b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/gapic_metadata.json index 69953962e75f..eefd5576a76e 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/gapic_metadata.json +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/gapic_metadata.json @@ -168,6 +168,70 @@ } } } + }, + "DataprocMetastoreFederation": { + "clients": { + "grpc": { + "libraryClient": "DataprocMetastoreFederationClient", + "rpcs": { + "CreateFederation": { + "methods": [ + "create_federation" + ] + }, + "DeleteFederation": { + "methods": [ + "delete_federation" + ] + }, + "GetFederation": { + "methods": [ + "get_federation" + ] + }, + "ListFederations": { + "methods": [ + "list_federations" + ] + }, + "UpdateFederation": { + "methods": [ + "update_federation" + ] + } + } + }, + "grpc-async": { + "libraryClient": "DataprocMetastoreFederationAsyncClient", + "rpcs": { + "CreateFederation": { + "methods": [ + "create_federation" + ] + }, + "DeleteFederation": { + "methods": [ + "delete_federation" + ] + }, + "GetFederation": { + "methods": [ + "get_federation" + ] + }, + "ListFederations": { + "methods": [ + "list_federations" + ] + }, + "UpdateFederation": { + "methods": [ + "update_federation" + ] + } + } + } + } } } } diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/py.typed b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/py.typed index 72edca0d3f63..f949c43bdc32 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/py.typed +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/py.typed @@ -1,2 +1,2 @@ # Marker file for PEP 561. -# The google-cloud-metastore package uses inline types. +# The google-cloud-dataproc-metastore package uses inline types. diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/async_client.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/async_client.py index fe6b157eb1a2..e12d2e3f0d9b 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/async_client.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/async_client.py @@ -16,7 +16,17 @@ from collections import OrderedDict import functools import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, +) from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 @@ -85,6 +95,8 @@ class DataprocMetastoreAsyncClient: parse_network_path = staticmethod(DataprocMetastoreClient.parse_network_path) service_path = staticmethod(DataprocMetastoreClient.service_path) parse_service_path = staticmethod(DataprocMetastoreClient.parse_service_path) + subnetwork_path = staticmethod(DataprocMetastoreClient.subnetwork_path) + parse_subnetwork_path = staticmethod(DataprocMetastoreClient.parse_subnetwork_path) common_billing_account_path = staticmethod( DataprocMetastoreClient.common_billing_account_path ) @@ -195,9 +207,9 @@ def transport(self) -> DataprocMetastoreTransport: def __init__( self, *, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, transport: Union[str, DataprocMetastoreTransport] = "grpc_asyncio", - client_options: ClientOptions = None, + client_options: Optional[ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the dataproc metastore client. @@ -241,11 +253,11 @@ def __init__( async def list_services( self, - request: Union[metastore.ListServicesRequest, dict] = None, + request: Optional[Union[metastore.ListServicesRequest, 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.ListServicesAsyncPager: r"""Lists services in a project and location. @@ -278,7 +290,7 @@ async def sample_list_services(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.ListServicesRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.ListServicesRequest, dict]]): The request object. Request message for [DataprocMetastore.ListServices][google.cloud.metastore.v1.DataprocMetastore.ListServices]. parent (:class:`str`): @@ -358,11 +370,11 @@ async def sample_list_services(): async def get_service( self, - request: Union[metastore.GetServiceRequest, dict] = None, + request: Optional[Union[metastore.GetServiceRequest, 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]] = (), ) -> metastore.Service: r"""Gets the details of a single service. @@ -394,7 +406,7 @@ async def sample_get_service(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.GetServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.GetServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.GetService][google.cloud.metastore.v1.DataprocMetastore.GetService]. name (:class:`str`): @@ -462,13 +474,13 @@ async def sample_get_service(): async def create_service( self, - request: Union[metastore.CreateServiceRequest, dict] = None, + request: Optional[Union[metastore.CreateServiceRequest, dict]] = None, *, - parent: str = None, - service: metastore.Service = None, - service_id: str = None, + parent: Optional[str] = None, + service: Optional[metastore.Service] = None, + service_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Creates a metastore service in a project and @@ -506,7 +518,7 @@ async def sample_create_service(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.CreateServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.CreateServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateService][google.cloud.metastore.v1.DataprocMetastore.CreateService]. parent (:class:`str`): @@ -613,12 +625,12 @@ async def sample_create_service(): async def update_service( self, - request: Union[metastore.UpdateServiceRequest, dict] = None, + request: Optional[Union[metastore.UpdateServiceRequest, dict]] = None, *, - service: metastore.Service = None, - update_mask: field_mask_pb2.FieldMask = None, + service: Optional[metastore.Service] = 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]] = (), ) -> operation_async.AsyncOperation: r"""Updates the parameters of a single service. @@ -653,7 +665,7 @@ async def sample_update_service(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.UpdateServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.UpdateServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.UpdateService][google.cloud.metastore.v1.DataprocMetastore.UpdateService]. service (:class:`google.cloud.metastore_v1.types.Service`): @@ -748,11 +760,11 @@ async def sample_update_service(): async def delete_service( self, - request: Union[metastore.DeleteServiceRequest, dict] = None, + request: Optional[Union[metastore.DeleteServiceRequest, 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]] = (), ) -> operation_async.AsyncOperation: r"""Deletes a single service. @@ -788,7 +800,7 @@ async def sample_delete_service(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.DeleteServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.DeleteServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.DeleteService][google.cloud.metastore.v1.DataprocMetastore.DeleteService]. name (:class:`str`): @@ -874,11 +886,11 @@ async def sample_delete_service(): async def list_metadata_imports( self, - request: Union[metastore.ListMetadataImportsRequest, dict] = None, + request: Optional[Union[metastore.ListMetadataImportsRequest, 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.ListMetadataImportsAsyncPager: r"""Lists imports in a service. @@ -911,7 +923,7 @@ async def sample_list_metadata_imports(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.ListMetadataImportsRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.ListMetadataImportsRequest, dict]]): The request object. Request message for [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1.DataprocMetastore.ListMetadataImports]. parent (:class:`str`): @@ -991,11 +1003,11 @@ async def sample_list_metadata_imports(): async def get_metadata_import( self, - request: Union[metastore.GetMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.GetMetadataImportRequest, 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]] = (), ) -> metastore.MetadataImport: r"""Gets details of a single import. @@ -1027,7 +1039,7 @@ async def sample_get_metadata_import(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.GetMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.GetMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.GetMetadataImport][google.cloud.metastore.v1.DataprocMetastore.GetMetadataImport]. name (:class:`str`): @@ -1095,13 +1107,13 @@ async def sample_get_metadata_import(): async def create_metadata_import( self, - request: Union[metastore.CreateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.CreateMetadataImportRequest, dict]] = None, *, - parent: str = None, - metadata_import: metastore.MetadataImport = None, - metadata_import_id: str = None, + parent: Optional[str] = None, + metadata_import: Optional[metastore.MetadataImport] = None, + metadata_import_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Creates a new MetadataImport in a given project and @@ -1139,7 +1151,7 @@ async def sample_create_metadata_import(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.CreateMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.CreateMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateMetadataImport][google.cloud.metastore.v1.DataprocMetastore.CreateMetadataImport]. parent (:class:`str`): @@ -1245,12 +1257,12 @@ async def sample_create_metadata_import(): async def update_metadata_import( self, - request: Union[metastore.UpdateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.UpdateMetadataImportRequest, dict]] = None, *, - metadata_import: metastore.MetadataImport = None, - update_mask: field_mask_pb2.FieldMask = None, + metadata_import: Optional[metastore.MetadataImport] = 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]] = (), ) -> operation_async.AsyncOperation: r"""Updates a single import. @@ -1287,7 +1299,7 @@ async def sample_update_metadata_import(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.UpdateMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.UpdateMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.UpdateMetadataImport][google.cloud.metastore.v1.DataprocMetastore.UpdateMetadataImport]. metadata_import (:class:`google.cloud.metastore_v1.types.MetadataImport`): @@ -1382,10 +1394,10 @@ async def sample_update_metadata_import(): async def export_metadata( self, - request: Union[metastore.ExportMetadataRequest, dict] = None, + request: Optional[Union[metastore.ExportMetadataRequest, dict]] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Exports metadata from a service. @@ -1422,7 +1434,7 @@ async def sample_export_metadata(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.ExportMetadataRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.ExportMetadataRequest, dict]]): The request object. Request message for [DataprocMetastore.ExportMetadata][google.cloud.metastore.v1.DataprocMetastore.ExportMetadata]. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1478,12 +1490,12 @@ async def sample_export_metadata(): async def restore_service( self, - request: Union[metastore.RestoreServiceRequest, dict] = None, + request: Optional[Union[metastore.RestoreServiceRequest, dict]] = None, *, - service: str = None, - backup: str = None, + service: Optional[str] = None, + backup: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Restores a service from a backup. @@ -1520,7 +1532,7 @@ async def sample_restore_service(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.RestoreServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.RestoreServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.Restore][]. service (:class:`str`): @@ -1610,11 +1622,11 @@ async def sample_restore_service(): async def list_backups( self, - request: Union[metastore.ListBackupsRequest, dict] = None, + request: Optional[Union[metastore.ListBackupsRequest, 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.ListBackupsAsyncPager: r"""Lists backups in a service. @@ -1647,7 +1659,7 @@ async def sample_list_backups(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.ListBackupsRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.ListBackupsRequest, dict]]): The request object. Request message for [DataprocMetastore.ListBackups][google.cloud.metastore.v1.DataprocMetastore.ListBackups]. parent (:class:`str`): @@ -1727,11 +1739,11 @@ async def sample_list_backups(): async def get_backup( self, - request: Union[metastore.GetBackupRequest, dict] = None, + request: Optional[Union[metastore.GetBackupRequest, 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]] = (), ) -> metastore.Backup: r"""Gets details of a single backup. @@ -1763,7 +1775,7 @@ async def sample_get_backup(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.GetBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.GetBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.GetBackup][google.cloud.metastore.v1.DataprocMetastore.GetBackup]. name (:class:`str`): @@ -1829,13 +1841,13 @@ async def sample_get_backup(): async def create_backup( self, - request: Union[metastore.CreateBackupRequest, dict] = None, + request: Optional[Union[metastore.CreateBackupRequest, dict]] = None, *, - parent: str = None, - backup: metastore.Backup = None, - backup_id: str = None, + parent: Optional[str] = None, + backup: Optional[metastore.Backup] = None, + backup_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Creates a new backup in a given project and location. @@ -1872,7 +1884,7 @@ async def sample_create_backup(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.CreateBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.CreateBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateBackup][google.cloud.metastore.v1.DataprocMetastore.CreateBackup]. parent (:class:`str`): @@ -1976,11 +1988,11 @@ async def sample_create_backup(): async def delete_backup( self, - request: Union[metastore.DeleteBackupRequest, dict] = None, + request: Optional[Union[metastore.DeleteBackupRequest, 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]] = (), ) -> operation_async.AsyncOperation: r"""Deletes a single backup. @@ -2016,7 +2028,7 @@ async def sample_delete_backup(): print(response) Args: - request (Union[google.cloud.metastore_v1.types.DeleteBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1.types.DeleteBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.DeleteBackup][google.cloud.metastore.v1.DataprocMetastore.DeleteBackup]. name (:class:`str`): @@ -2110,7 +2122,7 @@ async def __aexit__(self, exc_type, exc, tb): try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( gapic_version=pkg_resources.get_distribution( - "google-cloud-metastore", + "google-cloud-dataproc-metastore", ).version, ) except pkg_resources.DistributionNotFound: diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/client.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/client.py index 435d5824fcb6..a6a8041b1320 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/client.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/client.py @@ -16,7 +16,18 @@ from collections import OrderedDict import os import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union +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 @@ -64,7 +75,7 @@ class DataprocMetastoreClientMeta(type): def get_transport_class( cls, - label: str = None, + label: Optional[str] = None, ) -> Type[DataprocMetastoreTransport]: """Returns an appropriate transport class. @@ -280,6 +291,28 @@ def parse_service_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def subnetwork_path( + project: str, + region: str, + subnetwork: str, + ) -> str: + """Returns a fully-qualified subnetwork string.""" + return "projects/{project}/regions/{region}/subnetworks/{subnetwork}".format( + project=project, + region=region, + subnetwork=subnetwork, + ) + + @staticmethod + def parse_subnetwork_path(path: str) -> Dict[str, str]: + """Parses a subnetwork path into its component segments.""" + m = re.match( + r"^projects/(?P.+?)/regions/(?P.+?)/subnetworks/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def common_billing_account_path( billing_account: str, @@ -428,8 +461,8 @@ def __init__( self, *, credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, DataprocMetastoreTransport, None] = None, - client_options: Optional[client_options_lib.ClientOptions] = None, + transport: Optional[Union[str, DataprocMetastoreTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the dataproc metastore client. @@ -443,7 +476,7 @@ def __init__( transport (Union[str, DataprocMetastoreTransport]): 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 @@ -473,6 +506,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 @@ -525,11 +559,11 @@ def __init__( def list_services( self, - request: Union[metastore.ListServicesRequest, dict] = None, + request: Optional[Union[metastore.ListServicesRequest, 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.ListServicesPager: r"""Lists services in a project and location. @@ -642,11 +676,11 @@ def sample_list_services(): def get_service( self, - request: Union[metastore.GetServiceRequest, dict] = None, + request: Optional[Union[metastore.GetServiceRequest, 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]] = (), ) -> metastore.Service: r"""Gets the details of a single service. @@ -746,13 +780,13 @@ def sample_get_service(): def create_service( self, - request: Union[metastore.CreateServiceRequest, dict] = None, + request: Optional[Union[metastore.CreateServiceRequest, dict]] = None, *, - parent: str = None, - service: metastore.Service = None, - service_id: str = None, + parent: Optional[str] = None, + service: Optional[metastore.Service] = None, + service_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Creates a metastore service in a project and @@ -897,12 +931,12 @@ def sample_create_service(): def update_service( self, - request: Union[metastore.UpdateServiceRequest, dict] = None, + request: Optional[Union[metastore.UpdateServiceRequest, dict]] = None, *, - service: metastore.Service = None, - update_mask: field_mask_pb2.FieldMask = None, + service: Optional[metastore.Service] = 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]] = (), ) -> operation.Operation: r"""Updates the parameters of a single service. @@ -1032,11 +1066,11 @@ def sample_update_service(): def delete_service( self, - request: Union[metastore.DeleteServiceRequest, dict] = None, + request: Optional[Union[metastore.DeleteServiceRequest, 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]] = (), ) -> operation.Operation: r"""Deletes a single service. @@ -1158,11 +1192,11 @@ def sample_delete_service(): def list_metadata_imports( self, - request: Union[metastore.ListMetadataImportsRequest, dict] = None, + request: Optional[Union[metastore.ListMetadataImportsRequest, 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.ListMetadataImportsPager: r"""Lists imports in a service. @@ -1275,11 +1309,11 @@ def sample_list_metadata_imports(): def get_metadata_import( self, - request: Union[metastore.GetMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.GetMetadataImportRequest, 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]] = (), ) -> metastore.MetadataImport: r"""Gets details of a single import. @@ -1379,13 +1413,13 @@ def sample_get_metadata_import(): def create_metadata_import( self, - request: Union[metastore.CreateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.CreateMetadataImportRequest, dict]] = None, *, - parent: str = None, - metadata_import: metastore.MetadataImport = None, - metadata_import_id: str = None, + parent: Optional[str] = None, + metadata_import: Optional[metastore.MetadataImport] = None, + metadata_import_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Creates a new MetadataImport in a given project and @@ -1529,12 +1563,12 @@ def sample_create_metadata_import(): def update_metadata_import( self, - request: Union[metastore.UpdateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.UpdateMetadataImportRequest, dict]] = None, *, - metadata_import: metastore.MetadataImport = None, - update_mask: field_mask_pb2.FieldMask = None, + metadata_import: Optional[metastore.MetadataImport] = 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]] = (), ) -> operation.Operation: r"""Updates a single import. @@ -1666,10 +1700,10 @@ def sample_update_metadata_import(): def export_metadata( self, - request: Union[metastore.ExportMetadataRequest, dict] = None, + request: Optional[Union[metastore.ExportMetadataRequest, dict]] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Exports metadata from a service. @@ -1763,12 +1797,12 @@ def sample_export_metadata(): def restore_service( self, - request: Union[metastore.RestoreServiceRequest, dict] = None, + request: Optional[Union[metastore.RestoreServiceRequest, dict]] = None, *, - service: str = None, - backup: str = None, + service: Optional[str] = None, + backup: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Restores a service from a backup. @@ -1895,11 +1929,11 @@ def sample_restore_service(): def list_backups( self, - request: Union[metastore.ListBackupsRequest, dict] = None, + request: Optional[Union[metastore.ListBackupsRequest, 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.ListBackupsPager: r"""Lists backups in a service. @@ -2012,11 +2046,11 @@ def sample_list_backups(): def get_backup( self, - request: Union[metastore.GetBackupRequest, dict] = None, + request: Optional[Union[metastore.GetBackupRequest, 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]] = (), ) -> metastore.Backup: r"""Gets details of a single backup. @@ -2114,13 +2148,13 @@ def sample_get_backup(): def create_backup( self, - request: Union[metastore.CreateBackupRequest, dict] = None, + request: Optional[Union[metastore.CreateBackupRequest, dict]] = None, *, - parent: str = None, - backup: metastore.Backup = None, - backup_id: str = None, + parent: Optional[str] = None, + backup: Optional[metastore.Backup] = None, + backup_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Creates a new backup in a given project and location. @@ -2261,11 +2295,11 @@ def sample_create_backup(): def delete_backup( self, - request: Union[metastore.DeleteBackupRequest, dict] = None, + request: Optional[Union[metastore.DeleteBackupRequest, 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]] = (), ) -> operation.Operation: r"""Deletes a single backup. @@ -2402,7 +2436,7 @@ def __exit__(self, type, value, traceback): try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( gapic_version=pkg_resources.get_distribution( - "google-cloud-metastore", + "google-cloud-dataproc-metastore", ).version, ) except pkg_resources.DistributionNotFound: diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/transports/base.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/transports/base.py index 86474de7c710..88693cebd0df 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/transports/base.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/transports/base.py @@ -31,7 +31,7 @@ try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( gapic_version=pkg_resources.get_distribution( - "google-cloud-metastore", + "google-cloud-dataproc-metastore", ).version, ) except pkg_resources.DistributionNotFound: @@ -49,7 +49,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-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/transports/grpc.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/transports/grpc.py index 6c09fa517406..7a38189da77c 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/transports/grpc.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/transports/grpc.py @@ -68,14 +68,14 @@ def __init__( self, *, host: str = "metastore.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, @@ -203,8 +203,8 @@ def __init__( def create_channel( cls, host: str = "metastore.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-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/transports/grpc_asyncio.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/transports/grpc_asyncio.py index f16a3baf2cd4..7ed66b34c68a 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/transports/grpc_asyncio.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore/transports/grpc_asyncio.py @@ -70,7 +70,7 @@ class DataprocMetastoreGrpcAsyncIOTransport(DataprocMetastoreTransport): def create_channel( cls, host: str = "metastore.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, @@ -113,15 +113,15 @@ def __init__( self, *, host: str = "metastore.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-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/__init__.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/__init__.py new file mode 100644 index 000000000000..6cb70e094980 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/__init__.py @@ -0,0 +1,22 @@ +# -*- 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. +# +from .async_client import DataprocMetastoreFederationAsyncClient +from .client import DataprocMetastoreFederationClient + +__all__ = ( + "DataprocMetastoreFederationClient", + "DataprocMetastoreFederationAsyncClient", +) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/async_client.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/async_client.py new file mode 100644 index 000000000000..7b39b466771e --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/async_client.py @@ -0,0 +1,902 @@ +# -*- 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. +# +from collections import OrderedDict +import functools +import re +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, +) + +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.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + +from google.cloud.metastore_v1.services.dataproc_metastore_federation import pagers +from google.cloud.metastore_v1.types import metastore, metastore_federation + +from .client import DataprocMetastoreFederationClient +from .transports.base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .transports.grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + + +class DataprocMetastoreFederationAsyncClient: + """Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + _client: DataprocMetastoreFederationClient + + DEFAULT_ENDPOINT = DataprocMetastoreFederationClient.DEFAULT_ENDPOINT + DEFAULT_MTLS_ENDPOINT = DataprocMetastoreFederationClient.DEFAULT_MTLS_ENDPOINT + + federation_path = staticmethod(DataprocMetastoreFederationClient.federation_path) + parse_federation_path = staticmethod( + DataprocMetastoreFederationClient.parse_federation_path + ) + common_billing_account_path = staticmethod( + DataprocMetastoreFederationClient.common_billing_account_path + ) + parse_common_billing_account_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_billing_account_path + ) + common_folder_path = staticmethod( + DataprocMetastoreFederationClient.common_folder_path + ) + parse_common_folder_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_folder_path + ) + common_organization_path = staticmethod( + DataprocMetastoreFederationClient.common_organization_path + ) + parse_common_organization_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_organization_path + ) + common_project_path = staticmethod( + DataprocMetastoreFederationClient.common_project_path + ) + parse_common_project_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_project_path + ) + common_location_path = staticmethod( + DataprocMetastoreFederationClient.common_location_path + ) + parse_common_location_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_location_path + ) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationAsyncClient: The constructed client. + """ + return DataprocMetastoreFederationClient.from_service_account_info.__func__(DataprocMetastoreFederationAsyncClient, info, *args, **kwargs) # type: ignore + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationAsyncClient: The constructed client. + """ + return DataprocMetastoreFederationClient.from_service_account_file.__func__(DataprocMetastoreFederationAsyncClient, filename, *args, **kwargs) # type: ignore + + from_service_account_json = from_service_account_file + + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[ClientOptions] = None + ): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variabel is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + return DataprocMetastoreFederationClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore + + @property + def transport(self) -> DataprocMetastoreFederationTransport: + """Returns the transport used by the client instance. + + Returns: + DataprocMetastoreFederationTransport: The transport used by the client instance. + """ + return self._client.transport + + get_transport_class = functools.partial( + type(DataprocMetastoreFederationClient).get_transport_class, + type(DataprocMetastoreFederationClient), + ) + + def __init__( + self, + *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Union[str, DataprocMetastoreFederationTransport] = "grpc_asyncio", + client_options: Optional[ClientOptions] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the dataproc metastore federation client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, ~.DataprocMetastoreFederationTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (ClientOptions): 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 + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + """ + self._client = DataprocMetastoreFederationClient( + credentials=credentials, + transport=transport, + client_options=client_options, + client_info=client_info, + ) + + async def list_federations( + self, + request: Optional[ + Union[metastore_federation.ListFederationsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFederationsAsyncPager: + r"""Lists federations in a project and location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + async def sample_list_federations(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1.types.ListFederationsRequest, dict]]): + The request object. Request message for ListFederations. + parent (:class:`str`): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1.services.dataproc_metastore_federation.pagers.ListFederationsAsyncPager: + Response message for ListFederations + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.ListFederationsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_federations, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListFederationsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_federation( + self, + request: Optional[ + Union[metastore_federation.GetFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> metastore_federation.Federation: + r"""Gets the details of a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + async def sample_get_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = await client.get_federation(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1.types.GetFederationRequest, dict]]): + The request object. Request message for GetFederation. + name (:class:`str`): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1.types.Federation: + Represents a federation of multiple + backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.GetFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def create_federation( + self, + request: Optional[ + Union[metastore_federation.CreateFederationRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + federation: Optional[metastore_federation.Federation] = None, + federation_id: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Creates a metastore federation in a project and + location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + async def sample_create_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1.types.CreateFederationRequest, dict]]): + The request object. Request message for + CreateFederation. + parent (:class:`str`): + Required. The relative resource name of the location in + which to create a federation service, in the following + form: + + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation (:class:`google.cloud.metastore_v1.types.Federation`): + Required. The Metastore Federation to create. The + ``name`` field is ignored. The ID of the created + metastore federation must be provided in the request's + ``federation_id`` field. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation_id (:class:`str`): + Required. The ID of the metastore + federation, which is used as the final + component of the metastore federation's + name. + This value must be between 2 and 63 + characters long inclusive, begin with a + letter, end with a letter or number, and + consist of alpha-numeric ASCII + characters or hyphens. + + This corresponds to the ``federation_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, federation, federation_id]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.CreateFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if federation is not None: + request.federation = federation + if federation_id is not None: + request.federation_id = federation_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def update_federation( + self, + request: Optional[ + Union[metastore_federation.UpdateFederationRequest, dict] + ] = None, + *, + federation: Optional[metastore_federation.Federation] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Updates the fields of a federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + async def sample_update_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1.types.UpdateFederationRequest, dict]]): + The request object. Request message for + UpdateFederation. + federation (:class:`google.cloud.metastore_v1.types.Federation`): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified + in ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are + relative to the resource (not to the full request). A + field is overwritten if it is in the mask. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([federation, update_mask]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.UpdateFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if federation is not None: + request.federation = federation + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("federation.name", request.federation.name),) + ), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def delete_federation( + self, + request: Optional[ + Union[metastore_federation.DeleteFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Deletes a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + async def sample_delete_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1.types.DeleteFederationRequest, dict]]): + The request object. Request message for + DeleteFederation. + name (:class:`str`): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated + empty messages in your APIs. A typical example is to + use it as the request or the response type of an API + method. For instance: + + service Foo { + rpc Bar(google.protobuf.Empty) returns + (google.protobuf.Empty); + + } + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.DeleteFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.delete_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + empty_pb2.Empty, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def __aenter__(self): + return self + + async def __aexit__(self, exc_type, exc, tb): + await self.transport.close() + + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-dataproc-metastore", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +__all__ = ("DataprocMetastoreFederationAsyncClient",) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/client.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/client.py new file mode 100644 index 000000000000..fc44e8e76b95 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/client.py @@ -0,0 +1,1133 @@ +# -*- 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. +# +from collections import OrderedDict +import os +import re +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.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.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + +from google.cloud.metastore_v1.services.dataproc_metastore_federation import pagers +from google.cloud.metastore_v1.types import metastore, metastore_federation + +from .transports.base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .transports.grpc import DataprocMetastoreFederationGrpcTransport +from .transports.grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + + +class DataprocMetastoreFederationClientMeta(type): + """Metaclass for the DataprocMetastoreFederation client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + + _transport_registry = ( + OrderedDict() + ) # type: Dict[str, Type[DataprocMetastoreFederationTransport]] + _transport_registry["grpc"] = DataprocMetastoreFederationGrpcTransport + _transport_registry[ + "grpc_asyncio" + ] = DataprocMetastoreFederationGrpcAsyncIOTransport + + def get_transport_class( + cls, + label: Optional[str] = None, + ) -> Type[DataprocMetastoreFederationTransport]: + """Returns an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class DataprocMetastoreFederationClient( + metaclass=DataprocMetastoreFederationClientMeta +): + """Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + @staticmethod + def _get_default_mtls_endpoint(api_endpoint): + """Converts api endpoint to mTLS endpoint. + + Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to + "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. + Args: + api_endpoint (Optional[str]): the api endpoint to convert. + Returns: + str: converted mTLS api endpoint. + """ + if not api_endpoint: + return api_endpoint + + mtls_endpoint_re = re.compile( + r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" + ) + + m = mtls_endpoint_re.match(api_endpoint) + name, mtls, sandbox, googledomain = m.groups() + if mtls or not googledomain: + return api_endpoint + + if sandbox: + return api_endpoint.replace( + "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" + ) + + return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") + + DEFAULT_ENDPOINT = "metastore.googleapis.com" + DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore + DEFAULT_ENDPOINT + ) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_file(filename) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + from_service_account_json = from_service_account_file + + @property + def transport(self) -> DataprocMetastoreFederationTransport: + """Returns the transport used by the client instance. + + Returns: + DataprocMetastoreFederationTransport: The transport used by the client + instance. + """ + return self._transport + + @staticmethod + def federation_path( + project: str, + location: str, + federation: str, + ) -> str: + """Returns a fully-qualified federation string.""" + return ( + "projects/{project}/locations/{location}/federations/{federation}".format( + project=project, + location=location, + federation=federation, + ) + ) + + @staticmethod + def parse_federation_path(path: str) -> Dict[str, str]: + """Parses a federation path into its component segments.""" + m = re.match( + r"^projects/(?P.+?)/locations/(?P.+?)/federations/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def common_billing_account_path( + billing_account: str, + ) -> str: + """Returns a fully-qualified billing_account string.""" + return "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + + @staticmethod + def parse_common_billing_account_path(path: str) -> Dict[str, str]: + """Parse a billing_account path into its component segments.""" + m = re.match(r"^billingAccounts/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_folder_path( + folder: str, + ) -> str: + """Returns a fully-qualified folder string.""" + return "folders/{folder}".format( + folder=folder, + ) + + @staticmethod + def parse_common_folder_path(path: str) -> Dict[str, str]: + """Parse a folder path into its component segments.""" + m = re.match(r"^folders/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_organization_path( + organization: str, + ) -> str: + """Returns a fully-qualified organization string.""" + return "organizations/{organization}".format( + organization=organization, + ) + + @staticmethod + def parse_common_organization_path(path: str) -> Dict[str, str]: + """Parse a organization path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_project_path( + project: str, + ) -> str: + """Returns a fully-qualified project string.""" + return "projects/{project}".format( + project=project, + ) + + @staticmethod + def parse_common_project_path(path: str) -> Dict[str, str]: + """Parse a project path into its component segments.""" + m = re.match(r"^projects/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_location_path( + project: str, + location: str, + ) -> str: + """Returns a fully-qualified location string.""" + return "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + + @staticmethod + def parse_common_location_path(path: str) -> Dict[str, str]: + """Parse a location path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[client_options_lib.ClientOptions] = None + ): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variabel is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + if client_options is None: + client_options = client_options_lib.ClientOptions() + use_client_cert = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") + use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") + if use_client_cert not in ("true", "false"): + raise ValueError( + "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" + ) + if use_mtls_endpoint not in ("auto", "never", "always"): + raise MutualTLSChannelError( + "Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`" + ) + + # Figure out the client cert source to use. + client_cert_source = None + if use_client_cert == "true": + if client_options.client_cert_source: + client_cert_source = client_options.client_cert_source + elif mtls.has_default_client_cert_source(): + client_cert_source = mtls.default_client_cert_source() + + # Figure out which api endpoint to use. + if client_options.api_endpoint is not None: + api_endpoint = client_options.api_endpoint + elif use_mtls_endpoint == "always" or ( + use_mtls_endpoint == "auto" and client_cert_source + ): + api_endpoint = cls.DEFAULT_MTLS_ENDPOINT + else: + api_endpoint = cls.DEFAULT_ENDPOINT + + return api_endpoint, client_cert_source + + def __init__( + self, + *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Optional[Union[str, DataprocMetastoreFederationTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the dataproc metastore federation client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, DataprocMetastoreFederationTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + 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 + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + """ + if isinstance(client_options, dict): + 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 + ) + + api_key_value = getattr(client_options, "api_key", None) + if api_key_value and credentials: + raise ValueError( + "client_options.api_key and credentials are mutually exclusive" + ) + + # Save or instantiate the transport. + # Ordinarily, we provide the transport, but allowing a custom transport + # instance provides an extensibility point for unusual situations. + if isinstance(transport, DataprocMetastoreFederationTransport): + # transport is a DataprocMetastoreFederationTransport instance. + if credentials or client_options.credentials_file or api_key_value: + raise ValueError( + "When providing a transport instance, " + "provide its credentials directly." + ) + if client_options.scopes: + raise ValueError( + "When providing a transport instance, provide its scopes " + "directly." + ) + self._transport = transport + else: + import google.auth._default # type: ignore + + if api_key_value and hasattr( + google.auth._default, "get_api_key_credentials" + ): + credentials = google.auth._default.get_api_key_credentials( + api_key_value + ) + + Transport = type(self).get_transport_class(transport) + self._transport = Transport( + credentials=credentials, + credentials_file=client_options.credentials_file, + host=api_endpoint, + scopes=client_options.scopes, + client_cert_source_for_mtls=client_cert_source_func, + quota_project_id=client_options.quota_project_id, + client_info=client_info, + always_use_jwt_access=True, + api_audience=client_options.api_audience, + ) + + def list_federations( + self, + request: Optional[ + Union[metastore_federation.ListFederationsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFederationsPager: + r"""Lists federations in a project and location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + def sample_list_federations(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.metastore_v1.types.ListFederationsRequest, dict]): + The request object. Request message for ListFederations. + parent (str): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1.services.dataproc_metastore_federation.pagers.ListFederationsPager: + Response message for ListFederations + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.ListFederationsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.ListFederationsRequest): + request = metastore_federation.ListFederationsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_federations] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListFederationsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_federation( + self, + request: Optional[ + Union[metastore_federation.GetFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> metastore_federation.Federation: + r"""Gets the details of a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + def sample_get_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = client.get_federation(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1.types.GetFederationRequest, dict]): + The request object. Request message for GetFederation. + name (str): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1.types.Federation: + Represents a federation of multiple + backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.GetFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.GetFederationRequest): + request = metastore_federation.GetFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def create_federation( + self, + request: Optional[ + Union[metastore_federation.CreateFederationRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + federation: Optional[metastore_federation.Federation] = None, + federation_id: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Creates a metastore federation in a project and + location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + def sample_create_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1.types.CreateFederationRequest, dict]): + The request object. Request message for + CreateFederation. + parent (str): + Required. The relative resource name of the location in + which to create a federation service, in the following + form: + + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation (google.cloud.metastore_v1.types.Federation): + Required. The Metastore Federation to create. The + ``name`` field is ignored. The ID of the created + metastore federation must be provided in the request's + ``federation_id`` field. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation_id (str): + Required. The ID of the metastore + federation, which is used as the final + component of the metastore federation's + name. + This value must be between 2 and 63 + characters long inclusive, begin with a + letter, end with a letter or number, and + consist of alpha-numeric ASCII + characters or hyphens. + + This corresponds to the ``federation_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, federation, federation_id]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.CreateFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.CreateFederationRequest): + request = metastore_federation.CreateFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if federation is not None: + request.federation = federation + if federation_id is not None: + request.federation_id = federation_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def update_federation( + self, + request: Optional[ + Union[metastore_federation.UpdateFederationRequest, dict] + ] = None, + *, + federation: Optional[metastore_federation.Federation] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Updates the fields of a federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + def sample_update_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1.types.UpdateFederationRequest, dict]): + The request object. Request message for + UpdateFederation. + federation (google.cloud.metastore_v1.types.Federation): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified + in ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are + relative to the resource (not to the full request). A + field is overwritten if it is in the mask. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([federation, update_mask]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.UpdateFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.UpdateFederationRequest): + request = metastore_federation.UpdateFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if federation is not None: + request.federation = federation + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("federation.name", request.federation.name),) + ), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def delete_federation( + self, + request: Optional[ + Union[metastore_federation.DeleteFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Deletes a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1 + + def sample_delete_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1.types.DeleteFederationRequest, dict]): + The request object. Request message for + DeleteFederation. + name (str): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated + empty messages in your APIs. A typical example is to + use it as the request or the response type of an API + method. For instance: + + service Foo { + rpc Bar(google.protobuf.Empty) returns + (google.protobuf.Empty); + + } + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.DeleteFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.DeleteFederationRequest): + request = metastore_federation.DeleteFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + empty_pb2.Empty, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + """Releases underlying transport's resources. + + .. warning:: + ONLY use as a context manager if the transport is NOT shared + with other clients! Exiting the with block will CLOSE the transport + and may cause errors in other clients! + """ + self.transport.close() + + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-dataproc-metastore", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +__all__ = ("DataprocMetastoreFederationClient",) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/pagers.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/pagers.py new file mode 100644 index 000000000000..b470b9bedb1b --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/pagers.py @@ -0,0 +1,157 @@ +# -*- 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. +# +from typing import ( + Any, + AsyncIterator, + Awaitable, + Callable, + Iterator, + Optional, + Sequence, + Tuple, +) + +from google.cloud.metastore_v1.types import metastore_federation + + +class ListFederationsPager: + """A pager for iterating through ``list_federations`` requests. + + This class thinly wraps an initial + :class:`google.cloud.metastore_v1.types.ListFederationsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``federations`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListFederations`` requests and continue to iterate + through the ``federations`` field on the + corresponding responses. + + All the usual :class:`google.cloud.metastore_v1.types.ListFederationsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., metastore_federation.ListFederationsResponse], + request: metastore_federation.ListFederationsRequest, + response: metastore_federation.ListFederationsResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.metastore_v1.types.ListFederationsRequest): + The initial request object. + response (google.cloud.metastore_v1.types.ListFederationsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = metastore_federation.ListFederationsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[metastore_federation.ListFederationsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[metastore_federation.Federation]: + for page in self.pages: + yield from page.federations + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListFederationsAsyncPager: + """A pager for iterating through ``list_federations`` requests. + + This class thinly wraps an initial + :class:`google.cloud.metastore_v1.types.ListFederationsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``federations`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListFederations`` requests and continue to iterate + through the ``federations`` field on the + corresponding responses. + + All the usual :class:`google.cloud.metastore_v1.types.ListFederationsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., Awaitable[metastore_federation.ListFederationsResponse]], + request: metastore_federation.ListFederationsRequest, + response: metastore_federation.ListFederationsResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.metastore_v1.types.ListFederationsRequest): + The initial request object. + response (google.cloud.metastore_v1.types.ListFederationsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = metastore_federation.ListFederationsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages( + self, + ) -> AsyncIterator[metastore_federation.ListFederationsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + + def __aiter__(self) -> AsyncIterator[metastore_federation.Federation]: + async def async_generator(): + async for page in self.pages: + for response in page.federations: + yield response + + return async_generator() + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/__init__.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/__init__.py new file mode 100644 index 000000000000..7c7e97819d4b --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/__init__.py @@ -0,0 +1,34 @@ +# -*- 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. +# +from collections import OrderedDict +from typing import Dict, Type + +from .base import DataprocMetastoreFederationTransport +from .grpc import DataprocMetastoreFederationGrpcTransport +from .grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + +# Compile a registry of transports. +_transport_registry = ( + OrderedDict() +) # type: Dict[str, Type[DataprocMetastoreFederationTransport]] +_transport_registry["grpc"] = DataprocMetastoreFederationGrpcTransport +_transport_registry["grpc_asyncio"] = DataprocMetastoreFederationGrpcAsyncIOTransport + +__all__ = ( + "DataprocMetastoreFederationTransport", + "DataprocMetastoreFederationGrpcTransport", + "DataprocMetastoreFederationGrpcAsyncIOTransport", +) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/base.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/base.py new file mode 100644 index 000000000000..b752f9203b00 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/base.py @@ -0,0 +1,227 @@ +# -*- 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. +# +import abc +from typing import Awaitable, Callable, Dict, Optional, Sequence, Union + +import google.api_core +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1, operations_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.longrunning import operations_pb2 # type: ignore +from google.oauth2 import service_account # type: ignore +import pkg_resources + +from google.cloud.metastore_v1.types import metastore_federation + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-dataproc-metastore", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +class DataprocMetastoreFederationTransport(abc.ABC): + """Abstract transport class for DataprocMetastoreFederation.""" + + AUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",) + + DEFAULT_HOST: str = "metastore.googleapis.com" + + def __init__( + self, + *, + host: str = DEFAULT_HOST, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = 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, + **kwargs, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A list of scopes. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + """ + + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} + + # Save the scopes. + self._scopes = scopes + + # If no credentials are provided, then determine the appropriate + # defaults. + if credentials and credentials_file: + raise core_exceptions.DuplicateCredentialArgs( + "'credentials_file' and 'credentials' are mutually exclusive" + ) + + if credentials_file is not None: + credentials, _ = google.auth.load_credentials_from_file( + credentials_file, **scopes_kwargs, quota_project_id=quota_project_id + ) + elif credentials is None: + credentials, _ = google.auth.default( + **scopes_kwargs, quota_project_id=quota_project_id + ) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience( + api_audience if api_audience else host + ) + + # If the credentials are service account credentials, then always try to use self signed JWT. + if ( + always_use_jwt_access + and isinstance(credentials, service_account.Credentials) + and hasattr(service_account.Credentials, "with_always_use_jwt_access") + ): + credentials = credentials.with_always_use_jwt_access(True) + + # Save the credentials. + self._credentials = credentials + + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + + def _prep_wrapped_messages(self, client_info): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.list_federations: gapic_v1.method.wrap_method( + self.list_federations, + default_timeout=None, + client_info=client_info, + ), + self.get_federation: gapic_v1.method.wrap_method( + self.get_federation, + default_timeout=None, + client_info=client_info, + ), + self.create_federation: gapic_v1.method.wrap_method( + self.create_federation, + default_timeout=None, + client_info=client_info, + ), + self.update_federation: gapic_v1.method.wrap_method( + self.update_federation, + default_timeout=None, + client_info=client_info, + ), + self.delete_federation: gapic_v1.method.wrap_method( + self.delete_federation, + default_timeout=None, + client_info=client_info, + ), + } + + def close(self): + """Closes resources associated with the transport. + + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! + """ + raise NotImplementedError() + + @property + def operations_client(self): + """Return the client designed to process long-running operations.""" + raise NotImplementedError() + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + Union[ + metastore_federation.ListFederationsResponse, + Awaitable[metastore_federation.ListFederationsResponse], + ], + ]: + raise NotImplementedError() + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], + Union[ + metastore_federation.Federation, Awaitable[metastore_federation.Federation] + ], + ]: + raise NotImplementedError() + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def kind(self) -> str: + raise NotImplementedError() + + +__all__ = ("DataprocMetastoreFederationTransport",) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/grpc.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/grpc.py new file mode 100644 index 000000000000..64359c99362c --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/grpc.py @@ -0,0 +1,411 @@ +# -*- 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. +# +from typing import Callable, Dict, Optional, Sequence, Tuple, Union +import warnings + +from google.api_core import gapic_v1, grpc_helpers, operations_v1 +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.longrunning import operations_pb2 # type: ignore +import grpc # type: ignore + +from google.cloud.metastore_v1.types import metastore_federation + +from .base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport + + +class DataprocMetastoreFederationGrpcTransport(DataprocMetastoreFederationTransport): + """gRPC backend transport for DataprocMetastoreFederation. + + Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _stubs: Dict[str, Callable] + + def __init__( + self, + *, + host: str = "metastore.googleapis.com", + 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, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + channel (Optional[grpc.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @classmethod + def create_channel( + cls, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> grpc.Channel: + """Create and return a gRPC channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + grpc.Channel: A gRPC channel object. + + Raises: + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + + return grpc_helpers.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs, + ) + + @property + def grpc_channel(self) -> grpc.Channel: + """Return the channel designed to connect to this service.""" + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsClient(self.grpc_channel) + + # Return the client from cache. + return self._operations_client + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + metastore_federation.ListFederationsResponse, + ]: + r"""Return a callable for the list federations method over gRPC. + + Lists federations in a project and location. + + Returns: + Callable[[~.ListFederationsRequest], + ~.ListFederationsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_federations" not in self._stubs: + self._stubs["list_federations"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/ListFederations", + request_serializer=metastore_federation.ListFederationsRequest.serialize, + response_deserializer=metastore_federation.ListFederationsResponse.deserialize, + ) + return self._stubs["list_federations"] + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], metastore_federation.Federation + ]: + r"""Return a callable for the get federation method over gRPC. + + Gets the details of a single federation. + + Returns: + Callable[[~.GetFederationRequest], + ~.Federation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_federation" not in self._stubs: + self._stubs["get_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/GetFederation", + request_serializer=metastore_federation.GetFederationRequest.serialize, + response_deserializer=metastore_federation.Federation.deserialize, + ) + return self._stubs["get_federation"] + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the create federation method over gRPC. + + Creates a metastore federation in a project and + location. + + Returns: + Callable[[~.CreateFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "create_federation" not in self._stubs: + self._stubs["create_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/CreateFederation", + request_serializer=metastore_federation.CreateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["create_federation"] + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the update federation method over gRPC. + + Updates the fields of a federation. + + Returns: + Callable[[~.UpdateFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_federation" not in self._stubs: + self._stubs["update_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/UpdateFederation", + request_serializer=metastore_federation.UpdateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["update_federation"] + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the delete federation method over gRPC. + + Deletes a single federation. + + Returns: + Callable[[~.DeleteFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_federation" not in self._stubs: + self._stubs["delete_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/DeleteFederation", + request_serializer=metastore_federation.DeleteFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["delete_federation"] + + def close(self): + self.grpc_channel.close() + + @property + def kind(self) -> str: + return "grpc" + + +__all__ = ("DataprocMetastoreFederationGrpcTransport",) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/grpc_asyncio.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/grpc_asyncio.py new file mode 100644 index 000000000000..fe638dadfc04 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/services/dataproc_metastore_federation/transports/grpc_asyncio.py @@ -0,0 +1,418 @@ +# -*- 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. +# +from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union +import warnings + +from google.api_core import gapic_v1, grpc_helpers_async, operations_v1 +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.longrunning import operations_pb2 # type: ignore +import grpc # type: ignore +from grpc.experimental import aio # type: ignore + +from google.cloud.metastore_v1.types import metastore_federation + +from .base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .grpc import DataprocMetastoreFederationGrpcTransport + + +class DataprocMetastoreFederationGrpcAsyncIOTransport( + DataprocMetastoreFederationTransport +): + """gRPC AsyncIO backend transport for DataprocMetastoreFederation. + + Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _grpc_channel: aio.Channel + _stubs: Dict[str, Callable] = {} + + @classmethod + def create_channel( + cls, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> aio.Channel: + """Create and return a gRPC AsyncIO channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + aio.Channel: A gRPC AsyncIO channel object. + """ + + return grpc_helpers_async.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs, + ) + + def __init__( + self, + *, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = 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, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + channel (Optional[aio.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsAsyncClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @property + def grpc_channel(self) -> aio.Channel: + """Create the channel designed to connect to this service. + + This property caches on the instance; repeated calls return + the same channel. + """ + # Return the channel from cache. + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsAsyncClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsAsyncClient( + self.grpc_channel + ) + + # Return the client from cache. + return self._operations_client + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + Awaitable[metastore_federation.ListFederationsResponse], + ]: + r"""Return a callable for the list federations method over gRPC. + + Lists federations in a project and location. + + Returns: + Callable[[~.ListFederationsRequest], + Awaitable[~.ListFederationsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_federations" not in self._stubs: + self._stubs["list_federations"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/ListFederations", + request_serializer=metastore_federation.ListFederationsRequest.serialize, + response_deserializer=metastore_federation.ListFederationsResponse.deserialize, + ) + return self._stubs["list_federations"] + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], + Awaitable[metastore_federation.Federation], + ]: + r"""Return a callable for the get federation method over gRPC. + + Gets the details of a single federation. + + Returns: + Callable[[~.GetFederationRequest], + Awaitable[~.Federation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_federation" not in self._stubs: + self._stubs["get_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/GetFederation", + request_serializer=metastore_federation.GetFederationRequest.serialize, + response_deserializer=metastore_federation.Federation.deserialize, + ) + return self._stubs["get_federation"] + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the create federation method over gRPC. + + Creates a metastore federation in a project and + location. + + Returns: + Callable[[~.CreateFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "create_federation" not in self._stubs: + self._stubs["create_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/CreateFederation", + request_serializer=metastore_federation.CreateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["create_federation"] + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the update federation method over gRPC. + + Updates the fields of a federation. + + Returns: + Callable[[~.UpdateFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_federation" not in self._stubs: + self._stubs["update_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/UpdateFederation", + request_serializer=metastore_federation.UpdateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["update_federation"] + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the delete federation method over gRPC. + + Deletes a single federation. + + Returns: + Callable[[~.DeleteFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_federation" not in self._stubs: + self._stubs["delete_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1.DataprocMetastoreFederation/DeleteFederation", + request_serializer=metastore_federation.DeleteFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["delete_federation"] + + def close(self): + return self.grpc_channel.close() + + +__all__ = ("DataprocMetastoreFederationGrpcAsyncIOTransport",) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/types/__init__.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/types/__init__.py index 3fdebc0638de..528f1b7a6a0d 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/types/__init__.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/types/__init__.py @@ -21,6 +21,7 @@ DatabaseDumpSpec, DeleteBackupRequest, DeleteServiceRequest, + EncryptionConfig, ExportMetadataRequest, GetBackupRequest, GetMetadataImportRequest, @@ -38,14 +39,26 @@ MetadataExport, MetadataImport, MetadataManagementActivity, + NetworkConfig, OperationMetadata, Restore, RestoreServiceRequest, Secret, Service, + TelemetryConfig, UpdateMetadataImportRequest, UpdateServiceRequest, ) +from .metastore_federation import ( + BackendMetastore, + CreateFederationRequest, + DeleteFederationRequest, + Federation, + GetFederationRequest, + ListFederationsRequest, + ListFederationsResponse, + UpdateFederationRequest, +) __all__ = ( "Backup", @@ -55,6 +68,7 @@ "DatabaseDumpSpec", "DeleteBackupRequest", "DeleteServiceRequest", + "EncryptionConfig", "ExportMetadataRequest", "GetBackupRequest", "GetMetadataImportRequest", @@ -72,11 +86,21 @@ "MetadataExport", "MetadataImport", "MetadataManagementActivity", + "NetworkConfig", "OperationMetadata", "Restore", "RestoreServiceRequest", "Secret", "Service", + "TelemetryConfig", "UpdateMetadataImportRequest", "UpdateServiceRequest", + "BackendMetastore", + "CreateFederationRequest", + "DeleteFederationRequest", + "Federation", + "GetFederationRequest", + "ListFederationsRequest", + "ListFederationsResponse", + "UpdateFederationRequest", ) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/types/metastore.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/types/metastore.py index c0948f3ec97f..214248a382ac 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/types/metastore.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/types/metastore.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from typing import MutableMapping, MutableSequence + 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 @@ -27,6 +29,9 @@ "HiveMetastoreConfig", "KerberosConfig", "Secret", + "EncryptionConfig", + "NetworkConfig", + "TelemetryConfig", "MetadataManagementActivity", "MetadataImport", "MetadataExport", @@ -71,7 +76,7 @@ class Service(proto.Message): This field is a member of `oneof`_ ``metastore_config``. name (str): Immutable. The relative resource name of the metastore - service, of the form: + service, in the following format: ``projects/{project_number}/locations/{location_id}/services/{service_id}``. create_time (google.protobuf.timestamp_pb2.Timestamp): @@ -80,7 +85,7 @@ class Service(proto.Message): update_time (google.protobuf.timestamp_pb2.Timestamp): Output only. The time when the metastore service was last updated. - labels (Mapping[str, str]): + labels (MutableMapping[str, str]): User-defined labels for the metastore service. network (str): @@ -112,7 +117,9 @@ class Service(proto.Message): The one hour maintenance window of the metastore service. This specifies when the service can be restarted for maintenance - purposes in UTC time. + purposes in UTC time. Maintenance window is not + needed for services with the SPANNER database + type. uid (str): Output only. The globally unique resource identifier of the metastore service. @@ -122,6 +129,20 @@ class Service(proto.Message): release_channel (google.cloud.metastore_v1.types.Service.ReleaseChannel): Immutable. The release channel of the service. If unspecified, defaults to ``STABLE``. + encryption_config (google.cloud.metastore_v1.types.EncryptionConfig): + Immutable. Information used to configure the + Dataproc Metastore service to encrypt customer + data at rest. Cannot be updated. + network_config (google.cloud.metastore_v1.types.NetworkConfig): + The configuration specifying the network + settings for the Dataproc Metastore service. + database_type (google.cloud.metastore_v1.types.Service.DatabaseType): + Immutable. The database type that the + Metastore service stores its data. + telemetry_config (google.cloud.metastore_v1.types.TelemetryConfig): + The configuration specifying telemetry settings for the + Dataproc Metastore service. If unspecified defaults to + ``JSON``. """ class State(proto.Enum): @@ -151,80 +172,106 @@ class ReleaseChannel(proto.Enum): CANARY = 1 STABLE = 2 - hive_metastore_config = proto.Field( + class DatabaseType(proto.Enum): + r"""The backend database type for the metastore service.""" + DATABASE_TYPE_UNSPECIFIED = 0 + MYSQL = 1 + SPANNER = 2 + + hive_metastore_config: "HiveMetastoreConfig" = proto.Field( proto.MESSAGE, number=5, oneof="metastore_config", message="HiveMetastoreConfig", ) - 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, ) - update_time = proto.Field( + update_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - labels = proto.MapField( + labels: MutableMapping[str, str] = proto.MapField( proto.STRING, proto.STRING, number=4, ) - network = proto.Field( + network: str = proto.Field( proto.STRING, number=7, ) - endpoint_uri = proto.Field( + endpoint_uri: str = proto.Field( proto.STRING, number=8, ) - port = proto.Field( + port: int = proto.Field( proto.INT32, number=9, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=10, enum=State, ) - state_message = proto.Field( + state_message: str = proto.Field( proto.STRING, number=11, ) - artifact_gcs_uri = proto.Field( + artifact_gcs_uri: str = proto.Field( proto.STRING, number=12, ) - tier = proto.Field( + tier: Tier = proto.Field( proto.ENUM, number=13, enum=Tier, ) - maintenance_window = proto.Field( + maintenance_window: "MaintenanceWindow" = proto.Field( proto.MESSAGE, number=15, message="MaintenanceWindow", ) - uid = proto.Field( + uid: str = proto.Field( proto.STRING, number=16, ) - metadata_management_activity = proto.Field( + metadata_management_activity: "MetadataManagementActivity" = proto.Field( proto.MESSAGE, number=17, message="MetadataManagementActivity", ) - release_channel = proto.Field( + release_channel: ReleaseChannel = proto.Field( proto.ENUM, number=19, enum=ReleaseChannel, ) + encryption_config: "EncryptionConfig" = proto.Field( + proto.MESSAGE, + number=20, + message="EncryptionConfig", + ) + network_config: "NetworkConfig" = proto.Field( + proto.MESSAGE, + number=21, + message="NetworkConfig", + ) + database_type: DatabaseType = proto.Field( + proto.ENUM, + number=22, + enum=DatabaseType, + ) + telemetry_config: "TelemetryConfig" = proto.Field( + proto.MESSAGE, + number=23, + message="TelemetryConfig", + ) class MaintenanceWindow(proto.Message): @@ -239,12 +286,12 @@ class MaintenanceWindow(proto.Message): The day of week, when the window starts. """ - hour_of_day = proto.Field( + hour_of_day: wrappers_pb2.Int32Value = proto.Field( proto.MESSAGE, number=1, message=wrappers_pb2.Int32Value, ) - day_of_week = proto.Field( + day_of_week: dayofweek_pb2.DayOfWeek = proto.Field( proto.ENUM, number=2, enum=dayofweek_pb2.DayOfWeek, @@ -258,11 +305,13 @@ class HiveMetastoreConfig(proto.Message): Attributes: version (str): Immutable. The Hive metastore schema version. - config_overrides (Mapping[str, str]): + config_overrides (MutableMapping[str, str]): A mapping of Hive metastore configuration key-value pairs to apply to the Hive metastore (configured in ``hive-site.xml``). The mappings override system defaults - (some keys cannot be overridden). + (some keys cannot be overridden). These overrides are also + applied to auxiliary versions and can be further customized + in the auxiliary version's ``AuxiliaryVersionConfig``. kerberos_config (google.cloud.metastore_v1.types.KerberosConfig): Information used to configure the Hive metastore service as a service principal in a Kerberos realm. To disable @@ -272,16 +321,16 @@ class HiveMetastoreConfig(proto.Message): the request's ``service``. """ - version = proto.Field( + version: str = proto.Field( proto.STRING, number=1, ) - config_overrides = proto.MapField( + config_overrides: MutableMapping[str, str] = proto.MapField( proto.STRING, proto.STRING, number=2, ) - kerberos_config = proto.Field( + kerberos_config: "KerberosConfig" = proto.Field( proto.MESSAGE, number=3, message="KerberosConfig", @@ -307,16 +356,16 @@ class KerberosConfig(proto.Message): does not need to be named krb5.conf explicitly. """ - keytab = proto.Field( + keytab: "Secret" = proto.Field( proto.MESSAGE, number=1, message="Secret", ) - principal = proto.Field( + principal: str = proto.Field( proto.STRING, number=2, ) - krb5_config_gcs_uri = proto.Field( + krb5_config_gcs_uri: str = proto.Field( proto.STRING, number=3, ) @@ -337,31 +386,122 @@ class Secret(proto.Message): This field is a member of `oneof`_ ``value``. """ - cloud_secret = proto.Field( + cloud_secret: str = proto.Field( proto.STRING, number=2, oneof="value", ) +class EncryptionConfig(proto.Message): + r"""Encryption settings for the service. + + Attributes: + kms_key (str): + The fully qualified customer provided Cloud KMS key name to + use for customer data encryption, in the following form: + + ``projects/{project_number}/locations/{location_id}/keyRings/{key_ring_id}/cryptoKeys/{crypto_key_id}``. + """ + + kms_key: str = proto.Field( + proto.STRING, + number=1, + ) + + +class NetworkConfig(proto.Message): + r"""Network configuration for the Dataproc Metastore service. + + Attributes: + consumers (MutableSequence[google.cloud.metastore_v1.types.NetworkConfig.Consumer]): + Immutable. The consumer-side network + configuration for the Dataproc Metastore + instance. + """ + + class Consumer(proto.Message): + r"""Contains information of the customer's network + configurations. + + + .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields + + Attributes: + subnetwork (str): + Immutable. The subnetwork of the customer project from which + an IP address is reserved and used as the Dataproc Metastore + service's endpoint. It is accessible to hosts in the subnet + and to all hosts in a subnet in the same region and same + network. There must be at least one IP address available in + the subnet's primary range. The subnet is specified in the + following form: + + \`projects/{project_number}/regions/{region_id}/subnetworks/{subnetwork_id} + + This field is a member of `oneof`_ ``vpc_resource``. + endpoint_uri (str): + Output only. The URI of the endpoint used to + access the metastore service. + """ + + subnetwork: str = proto.Field( + proto.STRING, + number=1, + oneof="vpc_resource", + ) + endpoint_uri: str = proto.Field( + proto.STRING, + number=3, + ) + + consumers: MutableSequence[Consumer] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=Consumer, + ) + + +class TelemetryConfig(proto.Message): + r"""Telemetry Configuration for the Dataproc Metastore service. + + Attributes: + log_format (google.cloud.metastore_v1.types.TelemetryConfig.LogFormat): + The output format of the Dataproc Metastore + service's logs. + """ + + class LogFormat(proto.Enum): + r"""""" + LOG_FORMAT_UNSPECIFIED = 0 + LEGACY = 1 + JSON = 2 + + log_format: LogFormat = proto.Field( + proto.ENUM, + number=1, + enum=LogFormat, + ) + + class MetadataManagementActivity(proto.Message): r"""The metadata management activities of the metastore service. Attributes: - metadata_exports (Sequence[google.cloud.metastore_v1.types.MetadataExport]): + metadata_exports (MutableSequence[google.cloud.metastore_v1.types.MetadataExport]): Output only. The latest metadata exports of the metastore service. - restores (Sequence[google.cloud.metastore_v1.types.Restore]): + restores (MutableSequence[google.cloud.metastore_v1.types.Restore]): Output only. The latest restores of the metastore service. """ - metadata_exports = proto.RepeatedField( + metadata_exports: MutableSequence["MetadataExport"] = proto.RepeatedField( proto.MESSAGE, number=1, message="MetadataExport", ) - restores = proto.RepeatedField( + restores: MutableSequence["Restore"] = proto.RepeatedField( proto.MESSAGE, number=2, message="Restore", @@ -429,51 +569,51 @@ class DatabaseType(proto.Enum): DATABASE_TYPE_UNSPECIFIED = 0 MYSQL = 1 - database_type = proto.Field( + database_type: "MetadataImport.DatabaseDump.DatabaseType" = proto.Field( proto.ENUM, number=1, enum="MetadataImport.DatabaseDump.DatabaseType", ) - gcs_uri = proto.Field( + gcs_uri: str = proto.Field( proto.STRING, number=2, ) - type_ = proto.Field( + type_: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=4, enum="DatabaseDumpSpec.Type", ) - database_dump = proto.Field( + database_dump: DatabaseDump = proto.Field( proto.MESSAGE, number=6, oneof="metadata", message=DatabaseDump, ) - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - description = proto.Field( + description: str = proto.Field( proto.STRING, number=2, ) - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - update_time = proto.Field( + update_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=4, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=7, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=5, enum=State, @@ -512,27 +652,27 @@ class State(proto.Enum): FAILED = 3 CANCELLED = 4 - destination_gcs_uri = proto.Field( + destination_gcs_uri: str = proto.Field( proto.STRING, number=4, oneof="destination", ) - start_time = proto.Field( + start_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=3, enum=State, ) - database_dump_type = proto.Field( + database_dump_type: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=5, enum="DatabaseDumpSpec.Type", @@ -561,7 +701,7 @@ class Backup(proto.Message): the time of backup. description (str): The description of the backup. - restoring_services (Sequence[str]): + restoring_services (MutableSequence[str]): Output only. Services that are restoring from the backup. """ @@ -575,35 +715,35 @@ class State(proto.Enum): FAILED = 4 RESTORING = 5 - 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, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=4, enum=State, ) - service_revision = proto.Field( + service_revision: "Service" = proto.Field( proto.MESSAGE, number=5, message="Service", ) - description = proto.Field( + description: str = proto.Field( proto.STRING, number=6, ) - restoring_services = proto.RepeatedField( + restoring_services: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=7, ) @@ -648,31 +788,31 @@ class RestoreType(proto.Enum): FULL = 1 METADATA_ONLY = 2 - start_time = proto.Field( + start_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=3, enum=State, ) - backup = proto.Field( + backup: str = proto.Field( proto.STRING, number=4, ) - type_ = proto.Field( + type_: RestoreType = proto.Field( proto.ENUM, number=5, enum=RestoreType, ) - details = proto.Field( + details: str = proto.Field( proto.STRING, number=6, ) @@ -715,23 +855,23 @@ class ListServicesRequest(proto.Message): order. """ - 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, ) @@ -742,13 +882,13 @@ class ListServicesResponse(proto.Message): [DataprocMetastore.ListServices][google.cloud.metastore.v1.DataprocMetastore.ListServices]. Attributes: - services (Sequence[google.cloud.metastore_v1.types.Service]): + services (MutableSequence[google.cloud.metastore_v1.types.Service]): The services in the specified location. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -756,16 +896,16 @@ class ListServicesResponse(proto.Message): def raw_page(self): return self - services = proto.RepeatedField( + services: MutableSequence["Service"] = proto.RepeatedField( proto.MESSAGE, number=1, message="Service", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -783,7 +923,7 @@ class GetServiceRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -829,20 +969,20 @@ class CreateServiceRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - service_id = proto.Field( + service_id: str = proto.Field( proto.STRING, number=2, ) - service = proto.Field( + service: "Service" = proto.Field( proto.MESSAGE, number=3, message="Service", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -884,17 +1024,17 @@ class UpdateServiceRequest(proto.Message): supported. """ - update_mask = proto.Field( + update_mask: field_mask_pb2.FieldMask = proto.Field( proto.MESSAGE, number=1, message=field_mask_pb2.FieldMask, ) - service = proto.Field( + service: "Service" = proto.Field( proto.MESSAGE, number=2, message="Service", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) @@ -928,11 +1068,11 @@ class DeleteServiceRequest(proto.Message): supported. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=2, ) @@ -975,23 +1115,23 @@ class ListMetadataImportsRequest(proto.Message): order. """ - 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, ) @@ -1002,13 +1142,13 @@ class ListMetadataImportsResponse(proto.Message): [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1.DataprocMetastore.ListMetadataImports]. Attributes: - metadata_imports (Sequence[google.cloud.metastore_v1.types.MetadataImport]): + metadata_imports (MutableSequence[google.cloud.metastore_v1.types.MetadataImport]): The imports in the specified service. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -1016,16 +1156,16 @@ class ListMetadataImportsResponse(proto.Message): def raw_page(self): return self - metadata_imports = proto.RepeatedField( + metadata_imports: MutableSequence["MetadataImport"] = proto.RepeatedField( proto.MESSAGE, number=1, message="MetadataImport", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -1043,7 +1183,7 @@ class GetMetadataImportRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}/metadataImports/{import_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -1089,20 +1229,20 @@ class CreateMetadataImportRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - metadata_import_id = proto.Field( + metadata_import_id: str = proto.Field( proto.STRING, number=2, ) - metadata_import = proto.Field( + metadata_import: "MetadataImport" = proto.Field( proto.MESSAGE, number=3, message="MetadataImport", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1144,17 +1284,17 @@ class UpdateMetadataImportRequest(proto.Message): supported. """ - update_mask = proto.Field( + update_mask: field_mask_pb2.FieldMask = proto.Field( proto.MESSAGE, number=1, message=field_mask_pb2.FieldMask, ) - metadata_import = proto.Field( + metadata_import: "MetadataImport" = proto.Field( proto.MESSAGE, number=2, message="MetadataImport", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) @@ -1197,23 +1337,23 @@ class ListBackupsRequest(proto.Message): order. """ - 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, ) @@ -1224,13 +1364,13 @@ class ListBackupsResponse(proto.Message): [DataprocMetastore.ListBackups][google.cloud.metastore.v1.DataprocMetastore.ListBackups]. Attributes: - backups (Sequence[google.cloud.metastore_v1.types.Backup]): + backups (MutableSequence[google.cloud.metastore_v1.types.Backup]): The backups of the specified service. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -1238,16 +1378,16 @@ class ListBackupsResponse(proto.Message): def raw_page(self): return self - backups = proto.RepeatedField( + backups: MutableSequence["Backup"] = proto.RepeatedField( proto.MESSAGE, number=1, message="Backup", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -1265,7 +1405,7 @@ class GetBackupRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}/backups/{backup_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -1311,20 +1451,20 @@ class CreateBackupRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - backup_id = proto.Field( + backup_id: str = proto.Field( proto.STRING, number=2, ) - backup = proto.Field( + backup: "Backup" = proto.Field( proto.MESSAGE, number=3, message="Backup", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1358,11 +1498,11 @@ class DeleteBackupRequest(proto.Message): supported. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=2, ) @@ -1409,20 +1549,20 @@ class ExportMetadataRequest(proto.Message): defaults to ``MYSQL``. """ - destination_gcs_folder = proto.Field( + destination_gcs_folder: str = proto.Field( proto.STRING, number=2, oneof="destination", ) - service = proto.Field( + service: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) - database_dump_type = proto.Field( + database_dump_type: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=4, enum="DatabaseDumpSpec.Type", @@ -1464,20 +1604,20 @@ class RestoreServiceRequest(proto.Message): supported. """ - service = proto.Field( + service: str = proto.Field( proto.STRING, number=1, ) - backup = proto.Field( + backup: str = proto.Field( proto.STRING, number=2, ) - restore_type = proto.Field( + restore_type: "Restore.RestoreType" = proto.Field( proto.ENUM, number=3, enum="Restore.RestoreType", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1513,33 +1653,33 @@ class OperationMetadata(proto.Message): operation. """ - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - target = proto.Field( + target: str = proto.Field( proto.STRING, number=3, ) - verb = proto.Field( + verb: str = proto.Field( proto.STRING, number=4, ) - status_message = proto.Field( + status_message: str = proto.Field( proto.STRING, number=5, ) - requested_cancellation = proto.Field( + requested_cancellation: bool = proto.Field( proto.BOOL, number=6, ) - api_version = proto.Field( + api_version: str = proto.Field( proto.STRING, number=7, ) @@ -1549,7 +1689,7 @@ class LocationMetadata(proto.Message): r"""Metadata about the service in a location. Attributes: - supported_hive_metastore_versions (Sequence[google.cloud.metastore_v1.types.LocationMetadata.HiveMetastoreVersion]): + supported_hive_metastore_versions (MutableSequence[google.cloud.metastore_v1.types.LocationMetadata.HiveMetastoreVersion]): The versions of Hive Metastore that can be used when creating a new metastore service in this location. The server guarantees that exactly one ``HiveMetastoreVersion`` @@ -1570,16 +1710,18 @@ class HiveMetastoreVersion(proto.Message): that omits the ``version``. """ - version = proto.Field( + version: str = proto.Field( proto.STRING, number=1, ) - is_default = proto.Field( + is_default: bool = proto.Field( proto.BOOL, number=2, ) - supported_hive_metastore_versions = proto.RepeatedField( + supported_hive_metastore_versions: MutableSequence[ + HiveMetastoreVersion + ] = proto.RepeatedField( proto.MESSAGE, number=1, message=HiveMetastoreVersion, diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/types/metastore_federation.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/types/metastore_federation.py new file mode 100644 index 000000000000..c8906404d161 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1/types/metastore_federation.py @@ -0,0 +1,431 @@ +# -*- 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. +# +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.metastore.v1", + manifest={ + "Federation", + "BackendMetastore", + "ListFederationsRequest", + "ListFederationsResponse", + "GetFederationRequest", + "CreateFederationRequest", + "UpdateFederationRequest", + "DeleteFederationRequest", + }, +) + + +class Federation(proto.Message): + r"""Represents a federation of multiple backend metastores. + + Attributes: + name (str): + Immutable. The relative resource name of the federation, of + the form: + projects/{project_number}/locations/{location_id}/federations/{federation_id}`. + create_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The time when the metastore + federation was created. + update_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The time when the metastore + federation was last updated. + labels (MutableMapping[str, str]): + User-defined labels for the metastore + federation. + version (str): + Immutable. The Apache Hive metastore version + of the federation. All backend metastore + versions must be compatible with the federation + version. + backend_metastores (MutableMapping[int, google.cloud.metastore_v1.types.BackendMetastore]): + A map from ``BackendMetastore`` rank to + ``BackendMetastore``\ s from which the federation service + serves metadata at query time. The map key represents the + order in which ``BackendMetastore``\ s should be evaluated + to resolve database names at query time and should be + greater than or equal to zero. A ``BackendMetastore`` with a + lower number will be evaluated before a ``BackendMetastore`` + with a higher number. + endpoint_uri (str): + Output only. The federation endpoint. + state (google.cloud.metastore_v1.types.Federation.State): + Output only. The current state of the + federation. + state_message (str): + Output only. Additional information about the + current state of the metastore federation, if + available. + uid (str): + Output only. The globally unique resource + identifier of the metastore federation. + """ + + class State(proto.Enum): + r"""The current state of the federation.""" + STATE_UNSPECIFIED = 0 + CREATING = 1 + ACTIVE = 2 + UPDATING = 3 + DELETING = 4 + ERROR = 5 + + name: str = proto.Field( + proto.STRING, + number=1, + ) + create_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + update_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=3, + message=timestamp_pb2.Timestamp, + ) + labels: MutableMapping[str, str] = proto.MapField( + proto.STRING, + proto.STRING, + number=4, + ) + version: str = proto.Field( + proto.STRING, + number=5, + ) + backend_metastores: MutableMapping[int, "BackendMetastore"] = proto.MapField( + proto.INT32, + proto.MESSAGE, + number=6, + message="BackendMetastore", + ) + endpoint_uri: str = proto.Field( + proto.STRING, + number=7, + ) + state: State = proto.Field( + proto.ENUM, + number=8, + enum=State, + ) + state_message: str = proto.Field( + proto.STRING, + number=9, + ) + uid: str = proto.Field( + proto.STRING, + number=10, + ) + + +class BackendMetastore(proto.Message): + r"""Represents a backend metastore for the federation. + + Attributes: + name (str): + The relative resource name of the metastore that is being + federated. The formats of the relative resource names for + the currently supported metastores are listed below: + + - Dataplex + + - ``projects/{project_id}/locations/{location}/lakes/{lake_id}`` + + - BigQuery + + - ``projects/{project_id}`` + + - Dataproc Metastore + + - ``projects/{project_id}/locations/{location}/services/{service_id}`` + metastore_type (google.cloud.metastore_v1.types.BackendMetastore.MetastoreType): + The type of the backend metastore. + """ + + class MetastoreType(proto.Enum): + r"""The type of the backend metastore.""" + METASTORE_TYPE_UNSPECIFIED = 0 + DATAPROC_METASTORE = 3 + + name: str = proto.Field( + proto.STRING, + number=1, + ) + metastore_type: MetastoreType = proto.Field( + proto.ENUM, + number=2, + enum=MetastoreType, + ) + + +class ListFederationsRequest(proto.Message): + r"""Request message for ListFederations. + + Attributes: + parent (str): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + page_size (int): + Optional. The maximum number of federations + to return. The response may contain less than + the maximum number. If unspecified, no more than + 500 services are returned. The maximum value is + 1000; values above 1000 are changed to 1000. + page_token (str): + Optional. A page token, received from a + previous ListFederationServices call. Provide + this token to retrieve the subsequent page. + To retrieve the first page, supply an empty page + token. + When paginating, other parameters provided to + ListFederationServices must match the call that + provided the page token. + filter (str): + Optional. The filter to apply to list + results. + order_by (str): + Optional. Specify the ordering of results as described in + `Sorting + Order `__. + If not specified, the results will be sorted in the default + order. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_size: int = proto.Field( + proto.INT32, + number=2, + ) + page_token: str = proto.Field( + proto.STRING, + number=3, + ) + filter: str = proto.Field( + proto.STRING, + number=4, + ) + order_by: str = proto.Field( + proto.STRING, + number=5, + ) + + +class ListFederationsResponse(proto.Message): + r"""Response message for ListFederations + + Attributes: + federations (MutableSequence[google.cloud.metastore_v1.types.Federation]): + The services in the specified location. + next_page_token (str): + A token that can be sent as ``page_token`` to retrieve the + next page. If this field is omitted, there are no subsequent + pages. + unreachable (MutableSequence[str]): + Locations that could not be reached. + """ + + @property + def raw_page(self): + return self + + federations: MutableSequence["Federation"] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message="Federation", + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + unreachable: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=3, + ) + + +class GetFederationRequest(proto.Message): + r"""Request message for GetFederation. + + Attributes: + name (str): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class CreateFederationRequest(proto.Message): + r"""Request message for CreateFederation. + + Attributes: + parent (str): + Required. The relative resource name of the location in + which to create a federation service, in the following form: + + ``projects/{project_number}/locations/{location_id}``. + federation_id (str): + Required. The ID of the metastore federation, + which is used as the final component of the + metastore federation's name. + This value must be between 2 and 63 characters + long inclusive, begin with a letter, end with a + letter or number, and consist of alpha-numeric + ASCII characters or hyphens. + federation (google.cloud.metastore_v1.types.Federation): + Required. The Metastore Federation to create. The ``name`` + field is ignored. The ID of the created metastore federation + must be provided in the request's ``federation_id`` field. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + federation_id: str = proto.Field( + proto.STRING, + number=2, + ) + federation: "Federation" = proto.Field( + proto.MESSAGE, + number=3, + message="Federation", + ) + request_id: str = proto.Field( + proto.STRING, + number=4, + ) + + +class UpdateFederationRequest(proto.Message): + r"""Request message for UpdateFederation. + + Attributes: + update_mask (google.protobuf.field_mask_pb2.FieldMask): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are relative + to the resource (not to the full request). A field is + overwritten if it is in the mask. + federation (google.cloud.metastore_v1.types.Federation): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified in + ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=1, + message=field_mask_pb2.FieldMask, + ) + federation: "Federation" = proto.Field( + proto.MESSAGE, + number=2, + message="Federation", + ) + request_id: str = proto.Field( + proto.STRING, + number=3, + ) + + +class DeleteFederationRequest(proto.Message): + r"""Request message for DeleteFederation. + + Attributes: + name (str): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + request_id: str = proto.Field( + proto.STRING, + number=2, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/__init__.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/__init__.py index 7e0b75ff8e5f..dd8a32d4b4ca 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/__init__.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/__init__.py @@ -13,11 +13,19 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from google.cloud.metastore import gapic_version as package_version + +__version__ = package_version.__version__ + from .services.dataproc_metastore import ( DataprocMetastoreAsyncClient, DataprocMetastoreClient, ) +from .services.dataproc_metastore_federation import ( + DataprocMetastoreFederationAsyncClient, + DataprocMetastoreFederationClient, +) from .types.metastore import ( AuxiliaryVersionConfig, Backup, @@ -55,26 +63,44 @@ RestoreServiceRequest, Secret, Service, + TelemetryConfig, UpdateMetadataImportRequest, UpdateServiceRequest, ) +from .types.metastore_federation import ( + BackendMetastore, + CreateFederationRequest, + DeleteFederationRequest, + Federation, + GetFederationRequest, + ListFederationsRequest, + ListFederationsResponse, + UpdateFederationRequest, +) __all__ = ( "DataprocMetastoreAsyncClient", + "DataprocMetastoreFederationAsyncClient", "AuxiliaryVersionConfig", + "BackendMetastore", "Backup", "CreateBackupRequest", + "CreateFederationRequest", "CreateMetadataImportRequest", "CreateServiceRequest", "DataCatalogConfig", "DatabaseDumpSpec", "DataplexConfig", "DataprocMetastoreClient", + "DataprocMetastoreFederationClient", "DeleteBackupRequest", + "DeleteFederationRequest", "DeleteServiceRequest", "EncryptionConfig", "ExportMetadataRequest", + "Federation", "GetBackupRequest", + "GetFederationRequest", "GetMetadataImportRequest", "GetServiceRequest", "HiveMetastoreConfig", @@ -82,6 +108,8 @@ "Lake", "ListBackupsRequest", "ListBackupsResponse", + "ListFederationsRequest", + "ListFederationsResponse", "ListMetadataImportsRequest", "ListMetadataImportsResponse", "ListServicesRequest", @@ -98,6 +126,8 @@ "RestoreServiceRequest", "Secret", "Service", + "TelemetryConfig", + "UpdateFederationRequest", "UpdateMetadataImportRequest", "UpdateServiceRequest", ) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/gapic_metadata.json b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/gapic_metadata.json index 8aa71ab82e7c..4b27276c54a1 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/gapic_metadata.json +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/gapic_metadata.json @@ -168,6 +168,70 @@ } } } + }, + "DataprocMetastoreFederation": { + "clients": { + "grpc": { + "libraryClient": "DataprocMetastoreFederationClient", + "rpcs": { + "CreateFederation": { + "methods": [ + "create_federation" + ] + }, + "DeleteFederation": { + "methods": [ + "delete_federation" + ] + }, + "GetFederation": { + "methods": [ + "get_federation" + ] + }, + "ListFederations": { + "methods": [ + "list_federations" + ] + }, + "UpdateFederation": { + "methods": [ + "update_federation" + ] + } + } + }, + "grpc-async": { + "libraryClient": "DataprocMetastoreFederationAsyncClient", + "rpcs": { + "CreateFederation": { + "methods": [ + "create_federation" + ] + }, + "DeleteFederation": { + "methods": [ + "delete_federation" + ] + }, + "GetFederation": { + "methods": [ + "get_federation" + ] + }, + "ListFederations": { + "methods": [ + "list_federations" + ] + }, + "UpdateFederation": { + "methods": [ + "update_federation" + ] + } + } + } + } } } } diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/py.typed b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/py.typed index 72edca0d3f63..f949c43bdc32 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/py.typed +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/py.typed @@ -1,2 +1,2 @@ # Marker file for PEP 561. -# The google-cloud-metastore package uses inline types. +# The google-cloud-dataproc-metastore package uses inline types. diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/async_client.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/async_client.py index 7138215ab8ca..cda2b648ae73 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/async_client.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/async_client.py @@ -16,7 +16,17 @@ from collections import OrderedDict import functools import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, +) from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 @@ -199,9 +209,9 @@ def transport(self) -> DataprocMetastoreTransport: def __init__( self, *, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, transport: Union[str, DataprocMetastoreTransport] = "grpc_asyncio", - client_options: ClientOptions = None, + client_options: Optional[ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the dataproc metastore client. @@ -245,11 +255,11 @@ def __init__( async def list_services( self, - request: Union[metastore.ListServicesRequest, dict] = None, + request: Optional[Union[metastore.ListServicesRequest, 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.ListServicesAsyncPager: r"""Lists services in a project and location. @@ -282,7 +292,7 @@ async def sample_list_services(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.ListServicesRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.ListServicesRequest, dict]]): The request object. Request message for [DataprocMetastore.ListServices][google.cloud.metastore.v1alpha.DataprocMetastore.ListServices]. parent (:class:`str`): @@ -303,7 +313,7 @@ async def sample_list_services(): Returns: google.cloud.metastore_v1alpha.services.dataproc_metastore.pagers.ListServicesAsyncPager: Response message for - [DataprocMetastore.ListServices][google.cloud.metastore.v1alpha.DataprocMetastore.ListServices]. + [DataprocMetastore.ListServices][google.cloud.metastore.v1alpha.DataprocMetastore.ListServices]. Iterating over this object will yield results and resolve additional pages automatically. @@ -362,11 +372,11 @@ async def sample_list_services(): async def get_service( self, - request: Union[metastore.GetServiceRequest, dict] = None, + request: Optional[Union[metastore.GetServiceRequest, 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]] = (), ) -> metastore.Service: r"""Gets the details of a single service. @@ -398,7 +408,7 @@ async def sample_get_service(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.GetServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.GetServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.GetService][google.cloud.metastore.v1alpha.DataprocMetastore.GetService]. name (:class:`str`): @@ -466,13 +476,13 @@ async def sample_get_service(): async def create_service( self, - request: Union[metastore.CreateServiceRequest, dict] = None, + request: Optional[Union[metastore.CreateServiceRequest, dict]] = None, *, - parent: str = None, - service: metastore.Service = None, - service_id: str = None, + parent: Optional[str] = None, + service: Optional[metastore.Service] = None, + service_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Creates a metastore service in a project and @@ -510,7 +520,7 @@ async def sample_create_service(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.CreateServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.CreateServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateService][google.cloud.metastore.v1alpha.DataprocMetastore.CreateService]. parent (:class:`str`): @@ -617,12 +627,12 @@ async def sample_create_service(): async def update_service( self, - request: Union[metastore.UpdateServiceRequest, dict] = None, + request: Optional[Union[metastore.UpdateServiceRequest, dict]] = None, *, - service: metastore.Service = None, - update_mask: field_mask_pb2.FieldMask = None, + service: Optional[metastore.Service] = 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]] = (), ) -> operation_async.AsyncOperation: r"""Updates the parameters of a single service. @@ -657,7 +667,7 @@ async def sample_update_service(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.UpdateServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.UpdateServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.UpdateService][google.cloud.metastore.v1alpha.DataprocMetastore.UpdateService]. service (:class:`google.cloud.metastore_v1alpha.types.Service`): @@ -752,11 +762,11 @@ async def sample_update_service(): async def delete_service( self, - request: Union[metastore.DeleteServiceRequest, dict] = None, + request: Optional[Union[metastore.DeleteServiceRequest, 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]] = (), ) -> operation_async.AsyncOperation: r"""Deletes a single service. @@ -792,7 +802,7 @@ async def sample_delete_service(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.DeleteServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.DeleteServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.DeleteService][google.cloud.metastore.v1alpha.DataprocMetastore.DeleteService]. name (:class:`str`): @@ -878,11 +888,11 @@ async def sample_delete_service(): async def list_metadata_imports( self, - request: Union[metastore.ListMetadataImportsRequest, dict] = None, + request: Optional[Union[metastore.ListMetadataImportsRequest, 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.ListMetadataImportsAsyncPager: r"""Lists imports in a service. @@ -915,7 +925,7 @@ async def sample_list_metadata_imports(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.ListMetadataImportsRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.ListMetadataImportsRequest, dict]]): The request object. Request message for [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1alpha.DataprocMetastore.ListMetadataImports]. parent (:class:`str`): @@ -936,7 +946,7 @@ async def sample_list_metadata_imports(): Returns: google.cloud.metastore_v1alpha.services.dataproc_metastore.pagers.ListMetadataImportsAsyncPager: Response message for - [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1alpha.DataprocMetastore.ListMetadataImports]. + [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1alpha.DataprocMetastore.ListMetadataImports]. Iterating over this object will yield results and resolve additional pages automatically. @@ -995,11 +1005,11 @@ async def sample_list_metadata_imports(): async def get_metadata_import( self, - request: Union[metastore.GetMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.GetMetadataImportRequest, 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]] = (), ) -> metastore.MetadataImport: r"""Gets details of a single import. @@ -1031,7 +1041,7 @@ async def sample_get_metadata_import(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.GetMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.GetMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.GetMetadataImport][google.cloud.metastore.v1alpha.DataprocMetastore.GetMetadataImport]. name (:class:`str`): @@ -1099,13 +1109,13 @@ async def sample_get_metadata_import(): async def create_metadata_import( self, - request: Union[metastore.CreateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.CreateMetadataImportRequest, dict]] = None, *, - parent: str = None, - metadata_import: metastore.MetadataImport = None, - metadata_import_id: str = None, + parent: Optional[str] = None, + metadata_import: Optional[metastore.MetadataImport] = None, + metadata_import_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Creates a new MetadataImport in a given project and @@ -1143,7 +1153,7 @@ async def sample_create_metadata_import(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.CreateMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.CreateMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateMetadataImport][google.cloud.metastore.v1alpha.DataprocMetastore.CreateMetadataImport]. parent (:class:`str`): @@ -1249,12 +1259,12 @@ async def sample_create_metadata_import(): async def update_metadata_import( self, - request: Union[metastore.UpdateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.UpdateMetadataImportRequest, dict]] = None, *, - metadata_import: metastore.MetadataImport = None, - update_mask: field_mask_pb2.FieldMask = None, + metadata_import: Optional[metastore.MetadataImport] = 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]] = (), ) -> operation_async.AsyncOperation: r"""Updates a single import. @@ -1291,7 +1301,7 @@ async def sample_update_metadata_import(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.UpdateMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.UpdateMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.UpdateMetadataImport][google.cloud.metastore.v1alpha.DataprocMetastore.UpdateMetadataImport]. metadata_import (:class:`google.cloud.metastore_v1alpha.types.MetadataImport`): @@ -1386,10 +1396,10 @@ async def sample_update_metadata_import(): async def export_metadata( self, - request: Union[metastore.ExportMetadataRequest, dict] = None, + request: Optional[Union[metastore.ExportMetadataRequest, dict]] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Exports metadata from a service. @@ -1426,7 +1436,7 @@ async def sample_export_metadata(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.ExportMetadataRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.ExportMetadataRequest, dict]]): The request object. Request message for [DataprocMetastore.ExportMetadata][google.cloud.metastore.v1alpha.DataprocMetastore.ExportMetadata]. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1482,12 +1492,12 @@ async def sample_export_metadata(): async def restore_service( self, - request: Union[metastore.RestoreServiceRequest, dict] = None, + request: Optional[Union[metastore.RestoreServiceRequest, dict]] = None, *, - service: str = None, - backup: str = None, + service: Optional[str] = None, + backup: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Restores a service from a backup. @@ -1524,7 +1534,7 @@ async def sample_restore_service(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.RestoreServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.RestoreServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.Restore][]. service (:class:`str`): @@ -1614,11 +1624,11 @@ async def sample_restore_service(): async def list_backups( self, - request: Union[metastore.ListBackupsRequest, dict] = None, + request: Optional[Union[metastore.ListBackupsRequest, 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.ListBackupsAsyncPager: r"""Lists backups in a service. @@ -1651,7 +1661,7 @@ async def sample_list_backups(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.ListBackupsRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.ListBackupsRequest, dict]]): The request object. Request message for [DataprocMetastore.ListBackups][google.cloud.metastore.v1alpha.DataprocMetastore.ListBackups]. parent (:class:`str`): @@ -1672,7 +1682,7 @@ async def sample_list_backups(): Returns: google.cloud.metastore_v1alpha.services.dataproc_metastore.pagers.ListBackupsAsyncPager: Response message for - [DataprocMetastore.ListBackups][google.cloud.metastore.v1alpha.DataprocMetastore.ListBackups]. + [DataprocMetastore.ListBackups][google.cloud.metastore.v1alpha.DataprocMetastore.ListBackups]. Iterating over this object will yield results and resolve additional pages automatically. @@ -1731,11 +1741,11 @@ async def sample_list_backups(): async def get_backup( self, - request: Union[metastore.GetBackupRequest, dict] = None, + request: Optional[Union[metastore.GetBackupRequest, 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]] = (), ) -> metastore.Backup: r"""Gets details of a single backup. @@ -1767,7 +1777,7 @@ async def sample_get_backup(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.GetBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.GetBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.GetBackup][google.cloud.metastore.v1alpha.DataprocMetastore.GetBackup]. name (:class:`str`): @@ -1833,13 +1843,13 @@ async def sample_get_backup(): async def create_backup( self, - request: Union[metastore.CreateBackupRequest, dict] = None, + request: Optional[Union[metastore.CreateBackupRequest, dict]] = None, *, - parent: str = None, - backup: metastore.Backup = None, - backup_id: str = None, + parent: Optional[str] = None, + backup: Optional[metastore.Backup] = None, + backup_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Creates a new backup in a given project and location. @@ -1876,7 +1886,7 @@ async def sample_create_backup(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.CreateBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.CreateBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateBackup][google.cloud.metastore.v1alpha.DataprocMetastore.CreateBackup]. parent (:class:`str`): @@ -1980,11 +1990,11 @@ async def sample_create_backup(): async def delete_backup( self, - request: Union[metastore.DeleteBackupRequest, dict] = None, + request: Optional[Union[metastore.DeleteBackupRequest, 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]] = (), ) -> operation_async.AsyncOperation: r"""Deletes a single backup. @@ -2020,7 +2030,7 @@ async def sample_delete_backup(): print(response) Args: - request (Union[google.cloud.metastore_v1alpha.types.DeleteBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1alpha.types.DeleteBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.DeleteBackup][google.cloud.metastore.v1alpha.DataprocMetastore.DeleteBackup]. name (:class:`str`): @@ -2114,7 +2124,7 @@ async def __aexit__(self, exc_type, exc, tb): try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( gapic_version=pkg_resources.get_distribution( - "google-cloud-metastore", + "google-cloud-dataproc-metastore", ).version, ) except pkg_resources.DistributionNotFound: diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/client.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/client.py index 6c2490c2c91a..c7b6cfc668e5 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/client.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/client.py @@ -16,7 +16,18 @@ from collections import OrderedDict import os import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union +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 @@ -64,7 +75,7 @@ class DataprocMetastoreClientMeta(type): def get_transport_class( cls, - label: str = None, + label: Optional[str] = None, ) -> Type[DataprocMetastoreTransport]: """Returns an appropriate transport class. @@ -472,8 +483,8 @@ def __init__( self, *, credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, DataprocMetastoreTransport, None] = None, - client_options: Optional[client_options_lib.ClientOptions] = None, + transport: Optional[Union[str, DataprocMetastoreTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the dataproc metastore client. @@ -487,7 +498,7 @@ def __init__( transport (Union[str, DataprocMetastoreTransport]): 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 @@ -517,6 +528,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 @@ -569,11 +581,11 @@ def __init__( def list_services( self, - request: Union[metastore.ListServicesRequest, dict] = None, + request: Optional[Union[metastore.ListServicesRequest, 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.ListServicesPager: r"""Lists services in a project and location. @@ -627,7 +639,7 @@ def sample_list_services(): Returns: google.cloud.metastore_v1alpha.services.dataproc_metastore.pagers.ListServicesPager: Response message for - [DataprocMetastore.ListServices][google.cloud.metastore.v1alpha.DataprocMetastore.ListServices]. + [DataprocMetastore.ListServices][google.cloud.metastore.v1alpha.DataprocMetastore.ListServices]. Iterating over this object will yield results and resolve additional pages automatically. @@ -686,11 +698,11 @@ def sample_list_services(): def get_service( self, - request: Union[metastore.GetServiceRequest, dict] = None, + request: Optional[Union[metastore.GetServiceRequest, 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]] = (), ) -> metastore.Service: r"""Gets the details of a single service. @@ -790,13 +802,13 @@ def sample_get_service(): def create_service( self, - request: Union[metastore.CreateServiceRequest, dict] = None, + request: Optional[Union[metastore.CreateServiceRequest, dict]] = None, *, - parent: str = None, - service: metastore.Service = None, - service_id: str = None, + parent: Optional[str] = None, + service: Optional[metastore.Service] = None, + service_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Creates a metastore service in a project and @@ -941,12 +953,12 @@ def sample_create_service(): def update_service( self, - request: Union[metastore.UpdateServiceRequest, dict] = None, + request: Optional[Union[metastore.UpdateServiceRequest, dict]] = None, *, - service: metastore.Service = None, - update_mask: field_mask_pb2.FieldMask = None, + service: Optional[metastore.Service] = 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]] = (), ) -> operation.Operation: r"""Updates the parameters of a single service. @@ -1076,11 +1088,11 @@ def sample_update_service(): def delete_service( self, - request: Union[metastore.DeleteServiceRequest, dict] = None, + request: Optional[Union[metastore.DeleteServiceRequest, 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]] = (), ) -> operation.Operation: r"""Deletes a single service. @@ -1202,11 +1214,11 @@ def sample_delete_service(): def list_metadata_imports( self, - request: Union[metastore.ListMetadataImportsRequest, dict] = None, + request: Optional[Union[metastore.ListMetadataImportsRequest, 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.ListMetadataImportsPager: r"""Lists imports in a service. @@ -1260,7 +1272,7 @@ def sample_list_metadata_imports(): Returns: google.cloud.metastore_v1alpha.services.dataproc_metastore.pagers.ListMetadataImportsPager: Response message for - [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1alpha.DataprocMetastore.ListMetadataImports]. + [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1alpha.DataprocMetastore.ListMetadataImports]. Iterating over this object will yield results and resolve additional pages automatically. @@ -1319,11 +1331,11 @@ def sample_list_metadata_imports(): def get_metadata_import( self, - request: Union[metastore.GetMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.GetMetadataImportRequest, 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]] = (), ) -> metastore.MetadataImport: r"""Gets details of a single import. @@ -1423,13 +1435,13 @@ def sample_get_metadata_import(): def create_metadata_import( self, - request: Union[metastore.CreateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.CreateMetadataImportRequest, dict]] = None, *, - parent: str = None, - metadata_import: metastore.MetadataImport = None, - metadata_import_id: str = None, + parent: Optional[str] = None, + metadata_import: Optional[metastore.MetadataImport] = None, + metadata_import_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Creates a new MetadataImport in a given project and @@ -1573,12 +1585,12 @@ def sample_create_metadata_import(): def update_metadata_import( self, - request: Union[metastore.UpdateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.UpdateMetadataImportRequest, dict]] = None, *, - metadata_import: metastore.MetadataImport = None, - update_mask: field_mask_pb2.FieldMask = None, + metadata_import: Optional[metastore.MetadataImport] = 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]] = (), ) -> operation.Operation: r"""Updates a single import. @@ -1710,10 +1722,10 @@ def sample_update_metadata_import(): def export_metadata( self, - request: Union[metastore.ExportMetadataRequest, dict] = None, + request: Optional[Union[metastore.ExportMetadataRequest, dict]] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Exports metadata from a service. @@ -1807,12 +1819,12 @@ def sample_export_metadata(): def restore_service( self, - request: Union[metastore.RestoreServiceRequest, dict] = None, + request: Optional[Union[metastore.RestoreServiceRequest, dict]] = None, *, - service: str = None, - backup: str = None, + service: Optional[str] = None, + backup: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Restores a service from a backup. @@ -1939,11 +1951,11 @@ def sample_restore_service(): def list_backups( self, - request: Union[metastore.ListBackupsRequest, dict] = None, + request: Optional[Union[metastore.ListBackupsRequest, 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.ListBackupsPager: r"""Lists backups in a service. @@ -1997,7 +2009,7 @@ def sample_list_backups(): Returns: google.cloud.metastore_v1alpha.services.dataproc_metastore.pagers.ListBackupsPager: Response message for - [DataprocMetastore.ListBackups][google.cloud.metastore.v1alpha.DataprocMetastore.ListBackups]. + [DataprocMetastore.ListBackups][google.cloud.metastore.v1alpha.DataprocMetastore.ListBackups]. Iterating over this object will yield results and resolve additional pages automatically. @@ -2056,11 +2068,11 @@ def sample_list_backups(): def get_backup( self, - request: Union[metastore.GetBackupRequest, dict] = None, + request: Optional[Union[metastore.GetBackupRequest, 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]] = (), ) -> metastore.Backup: r"""Gets details of a single backup. @@ -2158,13 +2170,13 @@ def sample_get_backup(): def create_backup( self, - request: Union[metastore.CreateBackupRequest, dict] = None, + request: Optional[Union[metastore.CreateBackupRequest, dict]] = None, *, - parent: str = None, - backup: metastore.Backup = None, - backup_id: str = None, + parent: Optional[str] = None, + backup: Optional[metastore.Backup] = None, + backup_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Creates a new backup in a given project and location. @@ -2305,11 +2317,11 @@ def sample_create_backup(): def delete_backup( self, - request: Union[metastore.DeleteBackupRequest, dict] = None, + request: Optional[Union[metastore.DeleteBackupRequest, 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]] = (), ) -> operation.Operation: r"""Deletes a single backup. @@ -2446,7 +2458,7 @@ def __exit__(self, type, value, traceback): try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( gapic_version=pkg_resources.get_distribution( - "google-cloud-metastore", + "google-cloud-dataproc-metastore", ).version, ) except pkg_resources.DistributionNotFound: diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/base.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/base.py index 72a019c44149..c26bf07cf1b8 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/base.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/base.py @@ -31,7 +31,7 @@ try: DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( gapic_version=pkg_resources.get_distribution( - "google-cloud-metastore", + "google-cloud-dataproc-metastore", ).version, ) except pkg_resources.DistributionNotFound: @@ -49,7 +49,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-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/grpc.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/grpc.py index 3a7dc6b41f7d..7a5efa868989 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/grpc.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/grpc.py @@ -68,14 +68,14 @@ def __init__( self, *, host: str = "metastore.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, @@ -203,8 +203,8 @@ def __init__( def create_channel( cls, host: str = "metastore.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-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/grpc_asyncio.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/grpc_asyncio.py index fb9ee88808f7..c6ac2c1c3eb3 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/grpc_asyncio.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore/transports/grpc_asyncio.py @@ -70,7 +70,7 @@ class DataprocMetastoreGrpcAsyncIOTransport(DataprocMetastoreTransport): def create_channel( cls, host: str = "metastore.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, @@ -113,15 +113,15 @@ def __init__( self, *, host: str = "metastore.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-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/__init__.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/__init__.py new file mode 100644 index 000000000000..6cb70e094980 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/__init__.py @@ -0,0 +1,22 @@ +# -*- 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. +# +from .async_client import DataprocMetastoreFederationAsyncClient +from .client import DataprocMetastoreFederationClient + +__all__ = ( + "DataprocMetastoreFederationClient", + "DataprocMetastoreFederationAsyncClient", +) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/async_client.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/async_client.py new file mode 100644 index 000000000000..45cd140b4d59 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/async_client.py @@ -0,0 +1,902 @@ +# -*- 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. +# +from collections import OrderedDict +import functools +import re +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, +) + +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.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + +from google.cloud.metastore_v1alpha.services.dataproc_metastore_federation import pagers +from google.cloud.metastore_v1alpha.types import metastore, metastore_federation + +from .client import DataprocMetastoreFederationClient +from .transports.base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .transports.grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + + +class DataprocMetastoreFederationAsyncClient: + """Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + _client: DataprocMetastoreFederationClient + + DEFAULT_ENDPOINT = DataprocMetastoreFederationClient.DEFAULT_ENDPOINT + DEFAULT_MTLS_ENDPOINT = DataprocMetastoreFederationClient.DEFAULT_MTLS_ENDPOINT + + federation_path = staticmethod(DataprocMetastoreFederationClient.federation_path) + parse_federation_path = staticmethod( + DataprocMetastoreFederationClient.parse_federation_path + ) + common_billing_account_path = staticmethod( + DataprocMetastoreFederationClient.common_billing_account_path + ) + parse_common_billing_account_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_billing_account_path + ) + common_folder_path = staticmethod( + DataprocMetastoreFederationClient.common_folder_path + ) + parse_common_folder_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_folder_path + ) + common_organization_path = staticmethod( + DataprocMetastoreFederationClient.common_organization_path + ) + parse_common_organization_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_organization_path + ) + common_project_path = staticmethod( + DataprocMetastoreFederationClient.common_project_path + ) + parse_common_project_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_project_path + ) + common_location_path = staticmethod( + DataprocMetastoreFederationClient.common_location_path + ) + parse_common_location_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_location_path + ) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationAsyncClient: The constructed client. + """ + return DataprocMetastoreFederationClient.from_service_account_info.__func__(DataprocMetastoreFederationAsyncClient, info, *args, **kwargs) # type: ignore + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationAsyncClient: The constructed client. + """ + return DataprocMetastoreFederationClient.from_service_account_file.__func__(DataprocMetastoreFederationAsyncClient, filename, *args, **kwargs) # type: ignore + + from_service_account_json = from_service_account_file + + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[ClientOptions] = None + ): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variabel is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + return DataprocMetastoreFederationClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore + + @property + def transport(self) -> DataprocMetastoreFederationTransport: + """Returns the transport used by the client instance. + + Returns: + DataprocMetastoreFederationTransport: The transport used by the client instance. + """ + return self._client.transport + + get_transport_class = functools.partial( + type(DataprocMetastoreFederationClient).get_transport_class, + type(DataprocMetastoreFederationClient), + ) + + def __init__( + self, + *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Union[str, DataprocMetastoreFederationTransport] = "grpc_asyncio", + client_options: Optional[ClientOptions] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the dataproc metastore federation client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, ~.DataprocMetastoreFederationTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (ClientOptions): 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 + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + """ + self._client = DataprocMetastoreFederationClient( + credentials=credentials, + transport=transport, + client_options=client_options, + client_info=client_info, + ) + + async def list_federations( + self, + request: Optional[ + Union[metastore_federation.ListFederationsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFederationsAsyncPager: + r"""Lists federations in a project and location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + async def sample_list_federations(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1alpha.types.ListFederationsRequest, dict]]): + The request object. Request message for ListFederations. + parent (:class:`str`): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.pagers.ListFederationsAsyncPager: + Response message for ListFederations + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.ListFederationsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_federations, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListFederationsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_federation( + self, + request: Optional[ + Union[metastore_federation.GetFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> metastore_federation.Federation: + r"""Gets the details of a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + async def sample_get_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = await client.get_federation(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1alpha.types.GetFederationRequest, dict]]): + The request object. Request message for GetFederation. + name (:class:`str`): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1alpha.types.Federation: + Represents a federation of multiple + backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.GetFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def create_federation( + self, + request: Optional[ + Union[metastore_federation.CreateFederationRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + federation: Optional[metastore_federation.Federation] = None, + federation_id: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Creates a metastore federation in a project and + location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + async def sample_create_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1alpha.types.CreateFederationRequest, dict]]): + The request object. Request message for + CreateFederation. + parent (:class:`str`): + Required. The relative resource name of the location in + which to create a federation service, in the following + form: + + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation (:class:`google.cloud.metastore_v1alpha.types.Federation`): + Required. The Metastore Federation to create. The + ``name`` field is ignored. The ID of the created + metastore federation must be provided in the request's + ``federation_id`` field. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation_id (:class:`str`): + Required. The ID of the metastore + federation, which is used as the final + component of the metastore federation's + name. + This value must be between 2 and 63 + characters long inclusive, begin with a + letter, end with a letter or number, and + consist of alpha-numeric ASCII + characters or hyphens. + + This corresponds to the ``federation_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1alpha.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, federation, federation_id]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.CreateFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if federation is not None: + request.federation = federation + if federation_id is not None: + request.federation_id = federation_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def update_federation( + self, + request: Optional[ + Union[metastore_federation.UpdateFederationRequest, dict] + ] = None, + *, + federation: Optional[metastore_federation.Federation] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Updates the fields of a federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + async def sample_update_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1alpha.types.UpdateFederationRequest, dict]]): + The request object. Request message for + UpdateFederation. + federation (:class:`google.cloud.metastore_v1alpha.types.Federation`): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified + in ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are + relative to the resource (not to the full request). A + field is overwritten if it is in the mask. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1alpha.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([federation, update_mask]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.UpdateFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if federation is not None: + request.federation = federation + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("federation.name", request.federation.name),) + ), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def delete_federation( + self, + request: Optional[ + Union[metastore_federation.DeleteFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Deletes a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + async def sample_delete_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1alpha.types.DeleteFederationRequest, dict]]): + The request object. Request message for + DeleteFederation. + name (:class:`str`): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated + empty messages in your APIs. A typical example is to + use it as the request or the response type of an API + method. For instance: + + service Foo { + rpc Bar(google.protobuf.Empty) returns + (google.protobuf.Empty); + + } + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.DeleteFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.delete_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + empty_pb2.Empty, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def __aenter__(self): + return self + + async def __aexit__(self, exc_type, exc, tb): + await self.transport.close() + + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-dataproc-metastore", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +__all__ = ("DataprocMetastoreFederationAsyncClient",) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/client.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/client.py new file mode 100644 index 000000000000..ff0108c4e076 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/client.py @@ -0,0 +1,1133 @@ +# -*- 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. +# +from collections import OrderedDict +import os +import re +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.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.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + +from google.cloud.metastore_v1alpha.services.dataproc_metastore_federation import pagers +from google.cloud.metastore_v1alpha.types import metastore, metastore_federation + +from .transports.base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .transports.grpc import DataprocMetastoreFederationGrpcTransport +from .transports.grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + + +class DataprocMetastoreFederationClientMeta(type): + """Metaclass for the DataprocMetastoreFederation client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + + _transport_registry = ( + OrderedDict() + ) # type: Dict[str, Type[DataprocMetastoreFederationTransport]] + _transport_registry["grpc"] = DataprocMetastoreFederationGrpcTransport + _transport_registry[ + "grpc_asyncio" + ] = DataprocMetastoreFederationGrpcAsyncIOTransport + + def get_transport_class( + cls, + label: Optional[str] = None, + ) -> Type[DataprocMetastoreFederationTransport]: + """Returns an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class DataprocMetastoreFederationClient( + metaclass=DataprocMetastoreFederationClientMeta +): + """Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + @staticmethod + def _get_default_mtls_endpoint(api_endpoint): + """Converts api endpoint to mTLS endpoint. + + Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to + "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. + Args: + api_endpoint (Optional[str]): the api endpoint to convert. + Returns: + str: converted mTLS api endpoint. + """ + if not api_endpoint: + return api_endpoint + + mtls_endpoint_re = re.compile( + r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" + ) + + m = mtls_endpoint_re.match(api_endpoint) + name, mtls, sandbox, googledomain = m.groups() + if mtls or not googledomain: + return api_endpoint + + if sandbox: + return api_endpoint.replace( + "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" + ) + + return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") + + DEFAULT_ENDPOINT = "metastore.googleapis.com" + DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore + DEFAULT_ENDPOINT + ) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_file(filename) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + from_service_account_json = from_service_account_file + + @property + def transport(self) -> DataprocMetastoreFederationTransport: + """Returns the transport used by the client instance. + + Returns: + DataprocMetastoreFederationTransport: The transport used by the client + instance. + """ + return self._transport + + @staticmethod + def federation_path( + project: str, + location: str, + federation: str, + ) -> str: + """Returns a fully-qualified federation string.""" + return ( + "projects/{project}/locations/{location}/federations/{federation}".format( + project=project, + location=location, + federation=federation, + ) + ) + + @staticmethod + def parse_federation_path(path: str) -> Dict[str, str]: + """Parses a federation path into its component segments.""" + m = re.match( + r"^projects/(?P.+?)/locations/(?P.+?)/federations/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def common_billing_account_path( + billing_account: str, + ) -> str: + """Returns a fully-qualified billing_account string.""" + return "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + + @staticmethod + def parse_common_billing_account_path(path: str) -> Dict[str, str]: + """Parse a billing_account path into its component segments.""" + m = re.match(r"^billingAccounts/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_folder_path( + folder: str, + ) -> str: + """Returns a fully-qualified folder string.""" + return "folders/{folder}".format( + folder=folder, + ) + + @staticmethod + def parse_common_folder_path(path: str) -> Dict[str, str]: + """Parse a folder path into its component segments.""" + m = re.match(r"^folders/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_organization_path( + organization: str, + ) -> str: + """Returns a fully-qualified organization string.""" + return "organizations/{organization}".format( + organization=organization, + ) + + @staticmethod + def parse_common_organization_path(path: str) -> Dict[str, str]: + """Parse a organization path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_project_path( + project: str, + ) -> str: + """Returns a fully-qualified project string.""" + return "projects/{project}".format( + project=project, + ) + + @staticmethod + def parse_common_project_path(path: str) -> Dict[str, str]: + """Parse a project path into its component segments.""" + m = re.match(r"^projects/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_location_path( + project: str, + location: str, + ) -> str: + """Returns a fully-qualified location string.""" + return "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + + @staticmethod + def parse_common_location_path(path: str) -> Dict[str, str]: + """Parse a location path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[client_options_lib.ClientOptions] = None + ): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variabel is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + if client_options is None: + client_options = client_options_lib.ClientOptions() + use_client_cert = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") + use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") + if use_client_cert not in ("true", "false"): + raise ValueError( + "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" + ) + if use_mtls_endpoint not in ("auto", "never", "always"): + raise MutualTLSChannelError( + "Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`" + ) + + # Figure out the client cert source to use. + client_cert_source = None + if use_client_cert == "true": + if client_options.client_cert_source: + client_cert_source = client_options.client_cert_source + elif mtls.has_default_client_cert_source(): + client_cert_source = mtls.default_client_cert_source() + + # Figure out which api endpoint to use. + if client_options.api_endpoint is not None: + api_endpoint = client_options.api_endpoint + elif use_mtls_endpoint == "always" or ( + use_mtls_endpoint == "auto" and client_cert_source + ): + api_endpoint = cls.DEFAULT_MTLS_ENDPOINT + else: + api_endpoint = cls.DEFAULT_ENDPOINT + + return api_endpoint, client_cert_source + + def __init__( + self, + *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Optional[Union[str, DataprocMetastoreFederationTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the dataproc metastore federation client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, DataprocMetastoreFederationTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + 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 + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + """ + if isinstance(client_options, dict): + 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 + ) + + api_key_value = getattr(client_options, "api_key", None) + if api_key_value and credentials: + raise ValueError( + "client_options.api_key and credentials are mutually exclusive" + ) + + # Save or instantiate the transport. + # Ordinarily, we provide the transport, but allowing a custom transport + # instance provides an extensibility point for unusual situations. + if isinstance(transport, DataprocMetastoreFederationTransport): + # transport is a DataprocMetastoreFederationTransport instance. + if credentials or client_options.credentials_file or api_key_value: + raise ValueError( + "When providing a transport instance, " + "provide its credentials directly." + ) + if client_options.scopes: + raise ValueError( + "When providing a transport instance, provide its scopes " + "directly." + ) + self._transport = transport + else: + import google.auth._default # type: ignore + + if api_key_value and hasattr( + google.auth._default, "get_api_key_credentials" + ): + credentials = google.auth._default.get_api_key_credentials( + api_key_value + ) + + Transport = type(self).get_transport_class(transport) + self._transport = Transport( + credentials=credentials, + credentials_file=client_options.credentials_file, + host=api_endpoint, + scopes=client_options.scopes, + client_cert_source_for_mtls=client_cert_source_func, + quota_project_id=client_options.quota_project_id, + client_info=client_info, + always_use_jwt_access=True, + api_audience=client_options.api_audience, + ) + + def list_federations( + self, + request: Optional[ + Union[metastore_federation.ListFederationsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFederationsPager: + r"""Lists federations in a project and location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + def sample_list_federations(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.metastore_v1alpha.types.ListFederationsRequest, dict]): + The request object. Request message for ListFederations. + parent (str): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.pagers.ListFederationsPager: + Response message for ListFederations + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.ListFederationsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.ListFederationsRequest): + request = metastore_federation.ListFederationsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_federations] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListFederationsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_federation( + self, + request: Optional[ + Union[metastore_federation.GetFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> metastore_federation.Federation: + r"""Gets the details of a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + def sample_get_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = client.get_federation(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1alpha.types.GetFederationRequest, dict]): + The request object. Request message for GetFederation. + name (str): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1alpha.types.Federation: + Represents a federation of multiple + backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.GetFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.GetFederationRequest): + request = metastore_federation.GetFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def create_federation( + self, + request: Optional[ + Union[metastore_federation.CreateFederationRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + federation: Optional[metastore_federation.Federation] = None, + federation_id: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Creates a metastore federation in a project and + location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + def sample_create_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1alpha.types.CreateFederationRequest, dict]): + The request object. Request message for + CreateFederation. + parent (str): + Required. The relative resource name of the location in + which to create a federation service, in the following + form: + + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation (google.cloud.metastore_v1alpha.types.Federation): + Required. The Metastore Federation to create. The + ``name`` field is ignored. The ID of the created + metastore federation must be provided in the request's + ``federation_id`` field. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation_id (str): + Required. The ID of the metastore + federation, which is used as the final + component of the metastore federation's + name. + This value must be between 2 and 63 + characters long inclusive, begin with a + letter, end with a letter or number, and + consist of alpha-numeric ASCII + characters or hyphens. + + This corresponds to the ``federation_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1alpha.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, federation, federation_id]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.CreateFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.CreateFederationRequest): + request = metastore_federation.CreateFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if federation is not None: + request.federation = federation + if federation_id is not None: + request.federation_id = federation_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def update_federation( + self, + request: Optional[ + Union[metastore_federation.UpdateFederationRequest, dict] + ] = None, + *, + federation: Optional[metastore_federation.Federation] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Updates the fields of a federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + def sample_update_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1alpha.types.UpdateFederationRequest, dict]): + The request object. Request message for + UpdateFederation. + federation (google.cloud.metastore_v1alpha.types.Federation): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified + in ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are + relative to the resource (not to the full request). A + field is overwritten if it is in the mask. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1alpha.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([federation, update_mask]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.UpdateFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.UpdateFederationRequest): + request = metastore_federation.UpdateFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if federation is not None: + request.federation = federation + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("federation.name", request.federation.name),) + ), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def delete_federation( + self, + request: Optional[ + Union[metastore_federation.DeleteFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Deletes a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1alpha + + def sample_delete_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1alpha.types.DeleteFederationRequest, dict]): + The request object. Request message for + DeleteFederation. + name (str): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated + empty messages in your APIs. A typical example is to + use it as the request or the response type of an API + method. For instance: + + service Foo { + rpc Bar(google.protobuf.Empty) returns + (google.protobuf.Empty); + + } + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.DeleteFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.DeleteFederationRequest): + request = metastore_federation.DeleteFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + empty_pb2.Empty, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + """Releases underlying transport's resources. + + .. warning:: + ONLY use as a context manager if the transport is NOT shared + with other clients! Exiting the with block will CLOSE the transport + and may cause errors in other clients! + """ + self.transport.close() + + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-dataproc-metastore", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +__all__ = ("DataprocMetastoreFederationClient",) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/pagers.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/pagers.py new file mode 100644 index 000000000000..6cd5483735e8 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/pagers.py @@ -0,0 +1,157 @@ +# -*- 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. +# +from typing import ( + Any, + AsyncIterator, + Awaitable, + Callable, + Iterator, + Optional, + Sequence, + Tuple, +) + +from google.cloud.metastore_v1alpha.types import metastore_federation + + +class ListFederationsPager: + """A pager for iterating through ``list_federations`` requests. + + This class thinly wraps an initial + :class:`google.cloud.metastore_v1alpha.types.ListFederationsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``federations`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListFederations`` requests and continue to iterate + through the ``federations`` field on the + corresponding responses. + + All the usual :class:`google.cloud.metastore_v1alpha.types.ListFederationsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., metastore_federation.ListFederationsResponse], + request: metastore_federation.ListFederationsRequest, + response: metastore_federation.ListFederationsResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.metastore_v1alpha.types.ListFederationsRequest): + The initial request object. + response (google.cloud.metastore_v1alpha.types.ListFederationsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = metastore_federation.ListFederationsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[metastore_federation.ListFederationsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[metastore_federation.Federation]: + for page in self.pages: + yield from page.federations + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListFederationsAsyncPager: + """A pager for iterating through ``list_federations`` requests. + + This class thinly wraps an initial + :class:`google.cloud.metastore_v1alpha.types.ListFederationsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``federations`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListFederations`` requests and continue to iterate + through the ``federations`` field on the + corresponding responses. + + All the usual :class:`google.cloud.metastore_v1alpha.types.ListFederationsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., Awaitable[metastore_federation.ListFederationsResponse]], + request: metastore_federation.ListFederationsRequest, + response: metastore_federation.ListFederationsResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.metastore_v1alpha.types.ListFederationsRequest): + The initial request object. + response (google.cloud.metastore_v1alpha.types.ListFederationsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = metastore_federation.ListFederationsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages( + self, + ) -> AsyncIterator[metastore_federation.ListFederationsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + + def __aiter__(self) -> AsyncIterator[metastore_federation.Federation]: + async def async_generator(): + async for page in self.pages: + for response in page.federations: + yield response + + return async_generator() + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/__init__.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/__init__.py new file mode 100644 index 000000000000..7c7e97819d4b --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/__init__.py @@ -0,0 +1,34 @@ +# -*- 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. +# +from collections import OrderedDict +from typing import Dict, Type + +from .base import DataprocMetastoreFederationTransport +from .grpc import DataprocMetastoreFederationGrpcTransport +from .grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + +# Compile a registry of transports. +_transport_registry = ( + OrderedDict() +) # type: Dict[str, Type[DataprocMetastoreFederationTransport]] +_transport_registry["grpc"] = DataprocMetastoreFederationGrpcTransport +_transport_registry["grpc_asyncio"] = DataprocMetastoreFederationGrpcAsyncIOTransport + +__all__ = ( + "DataprocMetastoreFederationTransport", + "DataprocMetastoreFederationGrpcTransport", + "DataprocMetastoreFederationGrpcAsyncIOTransport", +) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/base.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/base.py new file mode 100644 index 000000000000..22106bbccd74 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/base.py @@ -0,0 +1,227 @@ +# -*- 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. +# +import abc +from typing import Awaitable, Callable, Dict, Optional, Sequence, Union + +import google.api_core +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1, operations_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.longrunning import operations_pb2 # type: ignore +from google.oauth2 import service_account # type: ignore +import pkg_resources + +from google.cloud.metastore_v1alpha.types import metastore_federation + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-dataproc-metastore", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +class DataprocMetastoreFederationTransport(abc.ABC): + """Abstract transport class for DataprocMetastoreFederation.""" + + AUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",) + + DEFAULT_HOST: str = "metastore.googleapis.com" + + def __init__( + self, + *, + host: str = DEFAULT_HOST, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = 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, + **kwargs, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A list of scopes. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + """ + + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} + + # Save the scopes. + self._scopes = scopes + + # If no credentials are provided, then determine the appropriate + # defaults. + if credentials and credentials_file: + raise core_exceptions.DuplicateCredentialArgs( + "'credentials_file' and 'credentials' are mutually exclusive" + ) + + if credentials_file is not None: + credentials, _ = google.auth.load_credentials_from_file( + credentials_file, **scopes_kwargs, quota_project_id=quota_project_id + ) + elif credentials is None: + credentials, _ = google.auth.default( + **scopes_kwargs, quota_project_id=quota_project_id + ) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience( + api_audience if api_audience else host + ) + + # If the credentials are service account credentials, then always try to use self signed JWT. + if ( + always_use_jwt_access + and isinstance(credentials, service_account.Credentials) + and hasattr(service_account.Credentials, "with_always_use_jwt_access") + ): + credentials = credentials.with_always_use_jwt_access(True) + + # Save the credentials. + self._credentials = credentials + + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + + def _prep_wrapped_messages(self, client_info): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.list_federations: gapic_v1.method.wrap_method( + self.list_federations, + default_timeout=None, + client_info=client_info, + ), + self.get_federation: gapic_v1.method.wrap_method( + self.get_federation, + default_timeout=None, + client_info=client_info, + ), + self.create_federation: gapic_v1.method.wrap_method( + self.create_federation, + default_timeout=None, + client_info=client_info, + ), + self.update_federation: gapic_v1.method.wrap_method( + self.update_federation, + default_timeout=None, + client_info=client_info, + ), + self.delete_federation: gapic_v1.method.wrap_method( + self.delete_federation, + default_timeout=None, + client_info=client_info, + ), + } + + def close(self): + """Closes resources associated with the transport. + + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! + """ + raise NotImplementedError() + + @property + def operations_client(self): + """Return the client designed to process long-running operations.""" + raise NotImplementedError() + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + Union[ + metastore_federation.ListFederationsResponse, + Awaitable[metastore_federation.ListFederationsResponse], + ], + ]: + raise NotImplementedError() + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], + Union[ + metastore_federation.Federation, Awaitable[metastore_federation.Federation] + ], + ]: + raise NotImplementedError() + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def kind(self) -> str: + raise NotImplementedError() + + +__all__ = ("DataprocMetastoreFederationTransport",) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/grpc.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/grpc.py new file mode 100644 index 000000000000..545aeb7cdefc --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/grpc.py @@ -0,0 +1,411 @@ +# -*- 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. +# +from typing import Callable, Dict, Optional, Sequence, Tuple, Union +import warnings + +from google.api_core import gapic_v1, grpc_helpers, operations_v1 +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.longrunning import operations_pb2 # type: ignore +import grpc # type: ignore + +from google.cloud.metastore_v1alpha.types import metastore_federation + +from .base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport + + +class DataprocMetastoreFederationGrpcTransport(DataprocMetastoreFederationTransport): + """gRPC backend transport for DataprocMetastoreFederation. + + Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _stubs: Dict[str, Callable] + + def __init__( + self, + *, + host: str = "metastore.googleapis.com", + 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, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + channel (Optional[grpc.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @classmethod + def create_channel( + cls, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> grpc.Channel: + """Create and return a gRPC channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + grpc.Channel: A gRPC channel object. + + Raises: + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + + return grpc_helpers.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs, + ) + + @property + def grpc_channel(self) -> grpc.Channel: + """Return the channel designed to connect to this service.""" + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsClient(self.grpc_channel) + + # Return the client from cache. + return self._operations_client + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + metastore_federation.ListFederationsResponse, + ]: + r"""Return a callable for the list federations method over gRPC. + + Lists federations in a project and location. + + Returns: + Callable[[~.ListFederationsRequest], + ~.ListFederationsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_federations" not in self._stubs: + self._stubs["list_federations"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/ListFederations", + request_serializer=metastore_federation.ListFederationsRequest.serialize, + response_deserializer=metastore_federation.ListFederationsResponse.deserialize, + ) + return self._stubs["list_federations"] + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], metastore_federation.Federation + ]: + r"""Return a callable for the get federation method over gRPC. + + Gets the details of a single federation. + + Returns: + Callable[[~.GetFederationRequest], + ~.Federation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_federation" not in self._stubs: + self._stubs["get_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/GetFederation", + request_serializer=metastore_federation.GetFederationRequest.serialize, + response_deserializer=metastore_federation.Federation.deserialize, + ) + return self._stubs["get_federation"] + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the create federation method over gRPC. + + Creates a metastore federation in a project and + location. + + Returns: + Callable[[~.CreateFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "create_federation" not in self._stubs: + self._stubs["create_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/CreateFederation", + request_serializer=metastore_federation.CreateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["create_federation"] + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the update federation method over gRPC. + + Updates the fields of a federation. + + Returns: + Callable[[~.UpdateFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_federation" not in self._stubs: + self._stubs["update_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/UpdateFederation", + request_serializer=metastore_federation.UpdateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["update_federation"] + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the delete federation method over gRPC. + + Deletes a single federation. + + Returns: + Callable[[~.DeleteFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_federation" not in self._stubs: + self._stubs["delete_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/DeleteFederation", + request_serializer=metastore_federation.DeleteFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["delete_federation"] + + def close(self): + self.grpc_channel.close() + + @property + def kind(self) -> str: + return "grpc" + + +__all__ = ("DataprocMetastoreFederationGrpcTransport",) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/grpc_asyncio.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/grpc_asyncio.py new file mode 100644 index 000000000000..090227672bf2 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/services/dataproc_metastore_federation/transports/grpc_asyncio.py @@ -0,0 +1,418 @@ +# -*- 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. +# +from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union +import warnings + +from google.api_core import gapic_v1, grpc_helpers_async, operations_v1 +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.longrunning import operations_pb2 # type: ignore +import grpc # type: ignore +from grpc.experimental import aio # type: ignore + +from google.cloud.metastore_v1alpha.types import metastore_federation + +from .base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .grpc import DataprocMetastoreFederationGrpcTransport + + +class DataprocMetastoreFederationGrpcAsyncIOTransport( + DataprocMetastoreFederationTransport +): + """gRPC AsyncIO backend transport for DataprocMetastoreFederation. + + Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _grpc_channel: aio.Channel + _stubs: Dict[str, Callable] = {} + + @classmethod + def create_channel( + cls, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> aio.Channel: + """Create and return a gRPC AsyncIO channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + aio.Channel: A gRPC AsyncIO channel object. + """ + + return grpc_helpers_async.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs, + ) + + def __init__( + self, + *, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = 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, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + channel (Optional[aio.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsAsyncClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @property + def grpc_channel(self) -> aio.Channel: + """Create the channel designed to connect to this service. + + This property caches on the instance; repeated calls return + the same channel. + """ + # Return the channel from cache. + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsAsyncClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsAsyncClient( + self.grpc_channel + ) + + # Return the client from cache. + return self._operations_client + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + Awaitable[metastore_federation.ListFederationsResponse], + ]: + r"""Return a callable for the list federations method over gRPC. + + Lists federations in a project and location. + + Returns: + Callable[[~.ListFederationsRequest], + Awaitable[~.ListFederationsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_federations" not in self._stubs: + self._stubs["list_federations"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/ListFederations", + request_serializer=metastore_federation.ListFederationsRequest.serialize, + response_deserializer=metastore_federation.ListFederationsResponse.deserialize, + ) + return self._stubs["list_federations"] + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], + Awaitable[metastore_federation.Federation], + ]: + r"""Return a callable for the get federation method over gRPC. + + Gets the details of a single federation. + + Returns: + Callable[[~.GetFederationRequest], + Awaitable[~.Federation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_federation" not in self._stubs: + self._stubs["get_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/GetFederation", + request_serializer=metastore_federation.GetFederationRequest.serialize, + response_deserializer=metastore_federation.Federation.deserialize, + ) + return self._stubs["get_federation"] + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the create federation method over gRPC. + + Creates a metastore federation in a project and + location. + + Returns: + Callable[[~.CreateFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "create_federation" not in self._stubs: + self._stubs["create_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/CreateFederation", + request_serializer=metastore_federation.CreateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["create_federation"] + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the update federation method over gRPC. + + Updates the fields of a federation. + + Returns: + Callable[[~.UpdateFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_federation" not in self._stubs: + self._stubs["update_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/UpdateFederation", + request_serializer=metastore_federation.UpdateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["update_federation"] + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the delete federation method over gRPC. + + Deletes a single federation. + + Returns: + Callable[[~.DeleteFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_federation" not in self._stubs: + self._stubs["delete_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1alpha.DataprocMetastoreFederation/DeleteFederation", + request_serializer=metastore_federation.DeleteFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["delete_federation"] + + def close(self): + return self.grpc_channel.close() + + +__all__ = ("DataprocMetastoreFederationGrpcAsyncIOTransport",) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/types/__init__.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/types/__init__.py index 0b9817d285f0..f98016dadb9f 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/types/__init__.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/types/__init__.py @@ -50,9 +50,20 @@ RestoreServiceRequest, Secret, Service, + TelemetryConfig, UpdateMetadataImportRequest, UpdateServiceRequest, ) +from .metastore_federation import ( + BackendMetastore, + CreateFederationRequest, + DeleteFederationRequest, + Federation, + GetFederationRequest, + ListFederationsRequest, + ListFederationsResponse, + UpdateFederationRequest, +) __all__ = ( "AuxiliaryVersionConfig", @@ -91,6 +102,15 @@ "RestoreServiceRequest", "Secret", "Service", + "TelemetryConfig", "UpdateMetadataImportRequest", "UpdateServiceRequest", + "BackendMetastore", + "CreateFederationRequest", + "DeleteFederationRequest", + "Federation", + "GetFederationRequest", + "ListFederationsRequest", + "ListFederationsResponse", + "UpdateFederationRequest", ) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/types/metastore.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/types/metastore.py index 4f0972e65fd2..558b09ba7608 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/types/metastore.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/types/metastore.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from typing import MutableMapping, MutableSequence + 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 @@ -34,6 +36,7 @@ "EncryptionConfig", "AuxiliaryVersionConfig", "NetworkConfig", + "TelemetryConfig", "MetadataManagementActivity", "MetadataImport", "MetadataExport", @@ -78,7 +81,7 @@ class Service(proto.Message): This field is a member of `oneof`_ ``metastore_config``. name (str): Immutable. The relative resource name of the metastore - service, of the form: + service, in the following format: ``projects/{project_number}/locations/{location_id}/services/{service_id}``. create_time (google.protobuf.timestamp_pb2.Timestamp): @@ -87,7 +90,7 @@ class Service(proto.Message): update_time (google.protobuf.timestamp_pb2.Timestamp): Output only. The time when the metastore service was last updated. - labels (Mapping[str, str]): + labels (MutableMapping[str, str]): User-defined labels for the metastore service. network (str): @@ -140,12 +143,15 @@ class Service(proto.Message): Dataproc Metastore service to encrypt customer data at rest. Cannot be updated. network_config (google.cloud.metastore_v1alpha.types.NetworkConfig): - Immutable. The configuration specifying the - network settings for the Dataproc Metastore - service. + The configuration specifying the network + settings for the Dataproc Metastore service. database_type (google.cloud.metastore_v1alpha.types.Service.DatabaseType): Immutable. The database type that the Metastore service stores its data. + telemetry_config (google.cloud.metastore_v1alpha.types.TelemetryConfig): + The configuration specifying telemetry settings for the + Dataproc Metastore service. If unspecified defaults to + ``JSON``. """ class State(proto.Enum): @@ -181,100 +187,105 @@ class DatabaseType(proto.Enum): MYSQL = 1 SPANNER = 2 - hive_metastore_config = proto.Field( + hive_metastore_config: "HiveMetastoreConfig" = proto.Field( proto.MESSAGE, number=5, oneof="metastore_config", message="HiveMetastoreConfig", ) - 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, ) - update_time = proto.Field( + update_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - labels = proto.MapField( + labels: MutableMapping[str, str] = proto.MapField( proto.STRING, proto.STRING, number=4, ) - network = proto.Field( + network: str = proto.Field( proto.STRING, number=7, ) - endpoint_uri = proto.Field( + endpoint_uri: str = proto.Field( proto.STRING, number=8, ) - port = proto.Field( + port: int = proto.Field( proto.INT32, number=9, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=10, enum=State, ) - state_message = proto.Field( + state_message: str = proto.Field( proto.STRING, number=11, ) - artifact_gcs_uri = proto.Field( + artifact_gcs_uri: str = proto.Field( proto.STRING, number=12, ) - tier = proto.Field( + tier: Tier = proto.Field( proto.ENUM, number=13, enum=Tier, ) - metadata_integration = proto.Field( + metadata_integration: "MetadataIntegration" = proto.Field( proto.MESSAGE, number=14, message="MetadataIntegration", ) - maintenance_window = proto.Field( + maintenance_window: "MaintenanceWindow" = proto.Field( proto.MESSAGE, number=15, message="MaintenanceWindow", ) - uid = proto.Field( + uid: str = proto.Field( proto.STRING, number=16, ) - metadata_management_activity = proto.Field( + metadata_management_activity: "MetadataManagementActivity" = proto.Field( proto.MESSAGE, number=17, message="MetadataManagementActivity", ) - release_channel = proto.Field( + release_channel: ReleaseChannel = proto.Field( proto.ENUM, number=19, enum=ReleaseChannel, ) - encryption_config = proto.Field( + encryption_config: "EncryptionConfig" = proto.Field( proto.MESSAGE, number=20, message="EncryptionConfig", ) - network_config = proto.Field( + network_config: "NetworkConfig" = proto.Field( proto.MESSAGE, number=21, message="NetworkConfig", ) - database_type = proto.Field( + database_type: DatabaseType = proto.Field( proto.ENUM, number=22, enum=DatabaseType, ) + telemetry_config: "TelemetryConfig" = proto.Field( + proto.MESSAGE, + number=23, + message="TelemetryConfig", + ) class MetadataIntegration(proto.Message): @@ -290,12 +301,12 @@ class MetadataIntegration(proto.Message): service. """ - data_catalog_config = proto.Field( + data_catalog_config: "DataCatalogConfig" = proto.Field( proto.MESSAGE, number=1, message="DataCatalogConfig", ) - dataplex_config = proto.Field( + dataplex_config: "DataplexConfig" = proto.Field( proto.MESSAGE, number=2, message="DataplexConfig", @@ -314,7 +325,7 @@ class DataCatalogConfig(proto.Message): Catalog. """ - enabled = proto.Field( + enabled: bool = proto.Field( proto.BOOL, number=2, ) @@ -325,14 +336,14 @@ class DataplexConfig(proto.Message): the Dataplex service. Attributes: - lake_resources (Mapping[str, google.cloud.metastore_v1alpha.types.Lake]): + lake_resources (MutableMapping[str, google.cloud.metastore_v1alpha.types.Lake]): A reference to the Lake resources that this metastore service is attached to. The key is the lake resource name. Example: ``projects/{project_number}/locations/{location_id}/lakes/{lake_id}``. """ - lake_resources = proto.MapField( + lake_resources: MutableMapping[str, "Lake"] = proto.MapField( proto.STRING, proto.MESSAGE, number=1, @@ -349,7 +360,7 @@ class Lake(proto.Message): ``projects/{project_number}/locations/{location_id}/lakes/{lake_id}`` """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -367,12 +378,12 @@ class MaintenanceWindow(proto.Message): The day of week, when the window starts. """ - hour_of_day = proto.Field( + hour_of_day: wrappers_pb2.Int32Value = proto.Field( proto.MESSAGE, number=1, message=wrappers_pb2.Int32Value, ) - day_of_week = proto.Field( + day_of_week: dayofweek_pb2.DayOfWeek = proto.Field( proto.ENUM, number=2, enum=dayofweek_pb2.DayOfWeek, @@ -386,7 +397,7 @@ class HiveMetastoreConfig(proto.Message): Attributes: version (str): Immutable. The Hive metastore schema version. - config_overrides (Mapping[str, str]): + config_overrides (MutableMapping[str, str]): A mapping of Hive metastore configuration key-value pairs to apply to the Hive metastore (configured in ``hive-site.xml``). The mappings override system defaults @@ -403,7 +414,7 @@ class HiveMetastoreConfig(proto.Message): endpoint_protocol (google.cloud.metastore_v1alpha.types.HiveMetastoreConfig.EndpointProtocol): The protocol to use for the metastore service endpoint. If unspecified, defaults to ``THRIFT``. - auxiliary_versions (Mapping[str, google.cloud.metastore_v1alpha.types.AuxiliaryVersionConfig]): + auxiliary_versions (MutableMapping[str, google.cloud.metastore_v1alpha.types.AuxiliaryVersionConfig]): A mapping of Hive metastore version to the auxiliary version configuration. When specified, a secondary Hive metastore service is created along with the primary service. All @@ -424,26 +435,26 @@ class EndpointProtocol(proto.Enum): THRIFT = 1 GRPC = 2 - version = proto.Field( + version: str = proto.Field( proto.STRING, number=1, ) - config_overrides = proto.MapField( + config_overrides: MutableMapping[str, str] = proto.MapField( proto.STRING, proto.STRING, number=2, ) - kerberos_config = proto.Field( + kerberos_config: "KerberosConfig" = proto.Field( proto.MESSAGE, number=3, message="KerberosConfig", ) - endpoint_protocol = proto.Field( + endpoint_protocol: EndpointProtocol = proto.Field( proto.ENUM, number=4, enum=EndpointProtocol, ) - auxiliary_versions = proto.MapField( + auxiliary_versions: MutableMapping[str, "AuxiliaryVersionConfig"] = proto.MapField( proto.STRING, proto.MESSAGE, number=5, @@ -470,16 +481,16 @@ class KerberosConfig(proto.Message): does not need to be named krb5.conf explicitly. """ - keytab = proto.Field( + keytab: "Secret" = proto.Field( proto.MESSAGE, number=1, message="Secret", ) - principal = proto.Field( + principal: str = proto.Field( proto.STRING, number=2, ) - krb5_config_gcs_uri = proto.Field( + krb5_config_gcs_uri: str = proto.Field( proto.STRING, number=3, ) @@ -500,7 +511,7 @@ class Secret(proto.Message): This field is a member of `oneof`_ ``value``. """ - cloud_secret = proto.Field( + cloud_secret: str = proto.Field( proto.STRING, number=2, oneof="value", @@ -518,7 +529,7 @@ class EncryptionConfig(proto.Message): ``projects/{project_number}/locations/{location_id}/keyRings/{key_ring_id}/cryptoKeys/{crypto_key_id}``. """ - kms_key = proto.Field( + kms_key: str = proto.Field( proto.STRING, number=1, ) @@ -532,7 +543,7 @@ class AuxiliaryVersionConfig(proto.Message): The Hive metastore version of the auxiliary service. It must be less than the primary Hive metastore service's version. - config_overrides (Mapping[str, str]): + config_overrides (MutableMapping[str, str]): A mapping of Hive metastore configuration key-value pairs to apply to the auxiliary Hive metastore (configured in ``hive-site.xml``) in addition to the primary version's @@ -546,16 +557,16 @@ class AuxiliaryVersionConfig(proto.Message): Hive metastore service. """ - version = proto.Field( + version: str = proto.Field( proto.STRING, number=1, ) - config_overrides = proto.MapField( + config_overrides: MutableMapping[str, str] = proto.MapField( proto.STRING, proto.STRING, number=2, ) - network_config = proto.Field( + network_config: "NetworkConfig" = proto.Field( proto.MESSAGE, number=3, message="NetworkConfig", @@ -566,7 +577,7 @@ class NetworkConfig(proto.Message): r"""Network configuration for the Dataproc Metastore service. Attributes: - consumers (Sequence[google.cloud.metastore_v1alpha.types.NetworkConfig.Consumer]): + consumers (MutableSequence[google.cloud.metastore_v1alpha.types.NetworkConfig.Consumer]): Immutable. The consumer-side network configuration for the Dataproc Metastore instance. @@ -581,8 +592,8 @@ class Consumer(proto.Message): Attributes: subnetwork (str): - The subnetwork of the customer project from which an IP - address is reserved and used as the Dataproc Metastore + Immutable. The subnetwork of the customer project from which + an IP address is reserved and used as the Dataproc Metastore service's endpoint. It is accessible to hosts in the subnet and to all hosts in a subnet in the same region and same network. There must be at least one IP address available in @@ -597,41 +608,63 @@ class Consumer(proto.Message): access the metastore service. """ - subnetwork = proto.Field( + subnetwork: str = proto.Field( proto.STRING, number=1, oneof="vpc_resource", ) - endpoint_uri = proto.Field( + endpoint_uri: str = proto.Field( proto.STRING, number=3, ) - consumers = proto.RepeatedField( + consumers: MutableSequence[Consumer] = proto.RepeatedField( proto.MESSAGE, number=1, message=Consumer, ) +class TelemetryConfig(proto.Message): + r"""Telemetry Configuration for the Dataproc Metastore service. + + Attributes: + log_format (google.cloud.metastore_v1alpha.types.TelemetryConfig.LogFormat): + The output format of the Dataproc Metastore + service's logs. + """ + + class LogFormat(proto.Enum): + r"""""" + LOG_FORMAT_UNSPECIFIED = 0 + LEGACY = 1 + JSON = 2 + + log_format: LogFormat = proto.Field( + proto.ENUM, + number=1, + enum=LogFormat, + ) + + class MetadataManagementActivity(proto.Message): r"""The metadata management activities of the metastore service. Attributes: - metadata_exports (Sequence[google.cloud.metastore_v1alpha.types.MetadataExport]): + metadata_exports (MutableSequence[google.cloud.metastore_v1alpha.types.MetadataExport]): Output only. The latest metadata exports of the metastore service. - restores (Sequence[google.cloud.metastore_v1alpha.types.Restore]): + restores (MutableSequence[google.cloud.metastore_v1alpha.types.Restore]): Output only. The latest restores of the metastore service. """ - metadata_exports = proto.RepeatedField( + metadata_exports: MutableSequence["MetadataExport"] = proto.RepeatedField( proto.MESSAGE, number=1, message="MetadataExport", ) - restores = proto.RepeatedField( + restores: MutableSequence["Restore"] = proto.RepeatedField( proto.MESSAGE, number=2, message="Restore", @@ -701,55 +734,55 @@ class DatabaseType(proto.Enum): DATABASE_TYPE_UNSPECIFIED = 0 MYSQL = 1 - database_type = proto.Field( + database_type: "MetadataImport.DatabaseDump.DatabaseType" = proto.Field( proto.ENUM, number=1, enum="MetadataImport.DatabaseDump.DatabaseType", ) - gcs_uri = proto.Field( + gcs_uri: str = proto.Field( proto.STRING, number=2, ) - source_database = proto.Field( + source_database: str = proto.Field( proto.STRING, number=3, ) - type_ = proto.Field( + type_: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=4, enum="DatabaseDumpSpec.Type", ) - database_dump = proto.Field( + database_dump: DatabaseDump = proto.Field( proto.MESSAGE, number=6, oneof="metadata", message=DatabaseDump, ) - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - description = proto.Field( + description: str = proto.Field( proto.STRING, number=2, ) - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - update_time = proto.Field( + update_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=4, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=7, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=5, enum=State, @@ -788,27 +821,27 @@ class State(proto.Enum): FAILED = 3 CANCELLED = 4 - destination_gcs_uri = proto.Field( + destination_gcs_uri: str = proto.Field( proto.STRING, number=4, oneof="destination", ) - start_time = proto.Field( + start_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=3, enum=State, ) - database_dump_type = proto.Field( + database_dump_type: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=5, enum="DatabaseDumpSpec.Type", @@ -837,7 +870,7 @@ class Backup(proto.Message): the time of backup. description (str): The description of the backup. - restoring_services (Sequence[str]): + restoring_services (MutableSequence[str]): Output only. Services that are restoring from the backup. """ @@ -851,35 +884,35 @@ class State(proto.Enum): FAILED = 4 RESTORING = 5 - 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, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=4, enum=State, ) - service_revision = proto.Field( + service_revision: "Service" = proto.Field( proto.MESSAGE, number=5, message="Service", ) - description = proto.Field( + description: str = proto.Field( proto.STRING, number=6, ) - restoring_services = proto.RepeatedField( + restoring_services: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=7, ) @@ -924,31 +957,31 @@ class RestoreType(proto.Enum): FULL = 1 METADATA_ONLY = 2 - start_time = proto.Field( + start_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=3, enum=State, ) - backup = proto.Field( + backup: str = proto.Field( proto.STRING, number=4, ) - type_ = proto.Field( + type_: RestoreType = proto.Field( proto.ENUM, number=5, enum=RestoreType, ) - details = proto.Field( + details: str = proto.Field( proto.STRING, number=6, ) @@ -991,23 +1024,23 @@ class ListServicesRequest(proto.Message): order. """ - 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, ) @@ -1018,13 +1051,13 @@ class ListServicesResponse(proto.Message): [DataprocMetastore.ListServices][google.cloud.metastore.v1alpha.DataprocMetastore.ListServices]. Attributes: - services (Sequence[google.cloud.metastore_v1alpha.types.Service]): + services (MutableSequence[google.cloud.metastore_v1alpha.types.Service]): The services in the specified location. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -1032,16 +1065,16 @@ class ListServicesResponse(proto.Message): def raw_page(self): return self - services = proto.RepeatedField( + services: MutableSequence["Service"] = proto.RepeatedField( proto.MESSAGE, number=1, message="Service", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -1059,7 +1092,7 @@ class GetServiceRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -1105,20 +1138,20 @@ class CreateServiceRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - service_id = proto.Field( + service_id: str = proto.Field( proto.STRING, number=2, ) - service = proto.Field( + service: "Service" = proto.Field( proto.MESSAGE, number=3, message="Service", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1160,17 +1193,17 @@ class UpdateServiceRequest(proto.Message): supported. """ - update_mask = proto.Field( + update_mask: field_mask_pb2.FieldMask = proto.Field( proto.MESSAGE, number=1, message=field_mask_pb2.FieldMask, ) - service = proto.Field( + service: "Service" = proto.Field( proto.MESSAGE, number=2, message="Service", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) @@ -1204,11 +1237,11 @@ class DeleteServiceRequest(proto.Message): supported. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=2, ) @@ -1251,23 +1284,23 @@ class ListMetadataImportsRequest(proto.Message): order. """ - 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, ) @@ -1278,13 +1311,13 @@ class ListMetadataImportsResponse(proto.Message): [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1alpha.DataprocMetastore.ListMetadataImports]. Attributes: - metadata_imports (Sequence[google.cloud.metastore_v1alpha.types.MetadataImport]): + metadata_imports (MutableSequence[google.cloud.metastore_v1alpha.types.MetadataImport]): The imports in the specified service. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -1292,16 +1325,16 @@ class ListMetadataImportsResponse(proto.Message): def raw_page(self): return self - metadata_imports = proto.RepeatedField( + metadata_imports: MutableSequence["MetadataImport"] = proto.RepeatedField( proto.MESSAGE, number=1, message="MetadataImport", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -1319,7 +1352,7 @@ class GetMetadataImportRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}/metadataImports/{import_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -1365,20 +1398,20 @@ class CreateMetadataImportRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - metadata_import_id = proto.Field( + metadata_import_id: str = proto.Field( proto.STRING, number=2, ) - metadata_import = proto.Field( + metadata_import: "MetadataImport" = proto.Field( proto.MESSAGE, number=3, message="MetadataImport", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1420,17 +1453,17 @@ class UpdateMetadataImportRequest(proto.Message): supported. """ - update_mask = proto.Field( + update_mask: field_mask_pb2.FieldMask = proto.Field( proto.MESSAGE, number=1, message=field_mask_pb2.FieldMask, ) - metadata_import = proto.Field( + metadata_import: "MetadataImport" = proto.Field( proto.MESSAGE, number=2, message="MetadataImport", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) @@ -1473,23 +1506,23 @@ class ListBackupsRequest(proto.Message): order. """ - 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, ) @@ -1500,13 +1533,13 @@ class ListBackupsResponse(proto.Message): [DataprocMetastore.ListBackups][google.cloud.metastore.v1alpha.DataprocMetastore.ListBackups]. Attributes: - backups (Sequence[google.cloud.metastore_v1alpha.types.Backup]): + backups (MutableSequence[google.cloud.metastore_v1alpha.types.Backup]): The backups of the specified service. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -1514,16 +1547,16 @@ class ListBackupsResponse(proto.Message): def raw_page(self): return self - backups = proto.RepeatedField( + backups: MutableSequence["Backup"] = proto.RepeatedField( proto.MESSAGE, number=1, message="Backup", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -1541,7 +1574,7 @@ class GetBackupRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}/backups/{backup_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -1587,20 +1620,20 @@ class CreateBackupRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - backup_id = proto.Field( + backup_id: str = proto.Field( proto.STRING, number=2, ) - backup = proto.Field( + backup: "Backup" = proto.Field( proto.MESSAGE, number=3, message="Backup", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1634,11 +1667,11 @@ class DeleteBackupRequest(proto.Message): supported. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=2, ) @@ -1685,20 +1718,20 @@ class ExportMetadataRequest(proto.Message): defaults to ``MYSQL``. """ - destination_gcs_folder = proto.Field( + destination_gcs_folder: str = proto.Field( proto.STRING, number=2, oneof="destination", ) - service = proto.Field( + service: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) - database_dump_type = proto.Field( + database_dump_type: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=4, enum="DatabaseDumpSpec.Type", @@ -1740,20 +1773,20 @@ class RestoreServiceRequest(proto.Message): supported. """ - service = proto.Field( + service: str = proto.Field( proto.STRING, number=1, ) - backup = proto.Field( + backup: str = proto.Field( proto.STRING, number=2, ) - restore_type = proto.Field( + restore_type: "Restore.RestoreType" = proto.Field( proto.ENUM, number=3, enum="Restore.RestoreType", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1789,33 +1822,33 @@ class OperationMetadata(proto.Message): operation. """ - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - target = proto.Field( + target: str = proto.Field( proto.STRING, number=3, ) - verb = proto.Field( + verb: str = proto.Field( proto.STRING, number=4, ) - status_message = proto.Field( + status_message: str = proto.Field( proto.STRING, number=5, ) - requested_cancellation = proto.Field( + requested_cancellation: bool = proto.Field( proto.BOOL, number=6, ) - api_version = proto.Field( + api_version: str = proto.Field( proto.STRING, number=7, ) @@ -1825,7 +1858,7 @@ class LocationMetadata(proto.Message): r"""Metadata about the service in a location. Attributes: - supported_hive_metastore_versions (Sequence[google.cloud.metastore_v1alpha.types.LocationMetadata.HiveMetastoreVersion]): + supported_hive_metastore_versions (MutableSequence[google.cloud.metastore_v1alpha.types.LocationMetadata.HiveMetastoreVersion]): The versions of Hive Metastore that can be used when creating a new metastore service in this location. The server guarantees that exactly one ``HiveMetastoreVersion`` @@ -1846,16 +1879,18 @@ class HiveMetastoreVersion(proto.Message): that omits the ``version``. """ - version = proto.Field( + version: str = proto.Field( proto.STRING, number=1, ) - is_default = proto.Field( + is_default: bool = proto.Field( proto.BOOL, number=2, ) - supported_hive_metastore_versions = proto.RepeatedField( + supported_hive_metastore_versions: MutableSequence[ + HiveMetastoreVersion + ] = proto.RepeatedField( proto.MESSAGE, number=1, message=HiveMetastoreVersion, diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/types/metastore_federation.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/types/metastore_federation.py new file mode 100644 index 000000000000..e5568e16bdbd --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1alpha/types/metastore_federation.py @@ -0,0 +1,432 @@ +# -*- 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. +# +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.metastore.v1alpha", + manifest={ + "Federation", + "BackendMetastore", + "ListFederationsRequest", + "ListFederationsResponse", + "GetFederationRequest", + "CreateFederationRequest", + "UpdateFederationRequest", + "DeleteFederationRequest", + }, +) + + +class Federation(proto.Message): + r"""Represents a federation of multiple backend metastores. + + Attributes: + name (str): + Immutable. The relative resource name of the federation, of + the form: + projects/{project_number}/locations/{location_id}/federations/{federation_id}`. + create_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The time when the metastore + federation was created. + update_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The time when the metastore + federation was last updated. + labels (MutableMapping[str, str]): + User-defined labels for the metastore + federation. + version (str): + Immutable. The Apache Hive metastore version + of the federation. All backend metastore + versions must be compatible with the federation + version. + backend_metastores (MutableMapping[int, google.cloud.metastore_v1alpha.types.BackendMetastore]): + A map from ``BackendMetastore`` rank to + ``BackendMetastore``\ s from which the federation service + serves metadata at query time. The map key represents the + order in which ``BackendMetastore``\ s should be evaluated + to resolve database names at query time and should be + greater than or equal to zero. A ``BackendMetastore`` with a + lower number will be evaluated before a ``BackendMetastore`` + with a higher number. + endpoint_uri (str): + Output only. The federation endpoint. + state (google.cloud.metastore_v1alpha.types.Federation.State): + Output only. The current state of the + federation. + state_message (str): + Output only. Additional information about the + current state of the metastore federation, if + available. + uid (str): + Output only. The globally unique resource + identifier of the metastore federation. + """ + + class State(proto.Enum): + r"""The current state of the federation.""" + STATE_UNSPECIFIED = 0 + CREATING = 1 + ACTIVE = 2 + UPDATING = 3 + DELETING = 4 + ERROR = 5 + + name: str = proto.Field( + proto.STRING, + number=1, + ) + create_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + update_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=3, + message=timestamp_pb2.Timestamp, + ) + labels: MutableMapping[str, str] = proto.MapField( + proto.STRING, + proto.STRING, + number=4, + ) + version: str = proto.Field( + proto.STRING, + number=5, + ) + backend_metastores: MutableMapping[int, "BackendMetastore"] = proto.MapField( + proto.INT32, + proto.MESSAGE, + number=6, + message="BackendMetastore", + ) + endpoint_uri: str = proto.Field( + proto.STRING, + number=7, + ) + state: State = proto.Field( + proto.ENUM, + number=8, + enum=State, + ) + state_message: str = proto.Field( + proto.STRING, + number=9, + ) + uid: str = proto.Field( + proto.STRING, + number=10, + ) + + +class BackendMetastore(proto.Message): + r"""Represents a backend metastore for the federation. + + Attributes: + name (str): + The relative resource name of the metastore that is being + federated. The formats of the relative resource names for + the currently supported metastores are listed below: + + - Dataplex + + - ``projects/{project_id}/locations/{location}/lakes/{lake_id}`` + + - BigQuery + + - ``projects/{project_id}`` + + - Dataproc Metastore + + - ``projects/{project_id}/locations/{location}/services/{service_id}`` + metastore_type (google.cloud.metastore_v1alpha.types.BackendMetastore.MetastoreType): + The type of the backend metastore. + """ + + class MetastoreType(proto.Enum): + r"""The type of the backend metastore.""" + METASTORE_TYPE_UNSPECIFIED = 0 + BIGQUERY = 2 + DATAPROC_METASTORE = 3 + + name: str = proto.Field( + proto.STRING, + number=1, + ) + metastore_type: MetastoreType = proto.Field( + proto.ENUM, + number=2, + enum=MetastoreType, + ) + + +class ListFederationsRequest(proto.Message): + r"""Request message for ListFederations. + + Attributes: + parent (str): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + page_size (int): + Optional. The maximum number of federations + to return. The response may contain less than + the maximum number. If unspecified, no more than + 500 services are returned. The maximum value is + 1000; values above 1000 are changed to 1000. + page_token (str): + Optional. A page token, received from a + previous ListFederationServices call. Provide + this token to retrieve the subsequent page. + To retrieve the first page, supply an empty page + token. + When paginating, other parameters provided to + ListFederationServices must match the call that + provided the page token. + filter (str): + Optional. The filter to apply to list + results. + order_by (str): + Optional. Specify the ordering of results as described in + `Sorting + Order `__. + If not specified, the results will be sorted in the default + order. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_size: int = proto.Field( + proto.INT32, + number=2, + ) + page_token: str = proto.Field( + proto.STRING, + number=3, + ) + filter: str = proto.Field( + proto.STRING, + number=4, + ) + order_by: str = proto.Field( + proto.STRING, + number=5, + ) + + +class ListFederationsResponse(proto.Message): + r"""Response message for ListFederations + + Attributes: + federations (MutableSequence[google.cloud.metastore_v1alpha.types.Federation]): + The services in the specified location. + next_page_token (str): + A token that can be sent as ``page_token`` to retrieve the + next page. If this field is omitted, there are no subsequent + pages. + unreachable (MutableSequence[str]): + Locations that could not be reached. + """ + + @property + def raw_page(self): + return self + + federations: MutableSequence["Federation"] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message="Federation", + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + unreachable: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=3, + ) + + +class GetFederationRequest(proto.Message): + r"""Request message for GetFederation. + + Attributes: + name (str): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class CreateFederationRequest(proto.Message): + r"""Request message for CreateFederation. + + Attributes: + parent (str): + Required. The relative resource name of the location in + which to create a federation service, in the following form: + + ``projects/{project_number}/locations/{location_id}``. + federation_id (str): + Required. The ID of the metastore federation, + which is used as the final component of the + metastore federation's name. + This value must be between 2 and 63 characters + long inclusive, begin with a letter, end with a + letter or number, and consist of alpha-numeric + ASCII characters or hyphens. + federation (google.cloud.metastore_v1alpha.types.Federation): + Required. The Metastore Federation to create. The ``name`` + field is ignored. The ID of the created metastore federation + must be provided in the request's ``federation_id`` field. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + federation_id: str = proto.Field( + proto.STRING, + number=2, + ) + federation: "Federation" = proto.Field( + proto.MESSAGE, + number=3, + message="Federation", + ) + request_id: str = proto.Field( + proto.STRING, + number=4, + ) + + +class UpdateFederationRequest(proto.Message): + r"""Request message for UpdateFederation. + + Attributes: + update_mask (google.protobuf.field_mask_pb2.FieldMask): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are relative + to the resource (not to the full request). A field is + overwritten if it is in the mask. + federation (google.cloud.metastore_v1alpha.types.Federation): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified in + ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=1, + message=field_mask_pb2.FieldMask, + ) + federation: "Federation" = proto.Field( + proto.MESSAGE, + number=2, + message="Federation", + ) + request_id: str = proto.Field( + proto.STRING, + number=3, + ) + + +class DeleteFederationRequest(proto.Message): + r"""Request message for DeleteFederation. + + Attributes: + name (str): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + request_id: str = proto.Field( + proto.STRING, + number=2, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/__init__.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/__init__.py index 066e7c532ea1..dd8a32d4b4ca 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/__init__.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/__init__.py @@ -13,26 +13,38 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from google.cloud.metastore import gapic_version as package_version + +__version__ = package_version.__version__ + from .services.dataproc_metastore import ( DataprocMetastoreAsyncClient, DataprocMetastoreClient, ) +from .services.dataproc_metastore_federation import ( + DataprocMetastoreFederationAsyncClient, + DataprocMetastoreFederationClient, +) from .types.metastore import ( + AuxiliaryVersionConfig, Backup, CreateBackupRequest, CreateMetadataImportRequest, CreateServiceRequest, DatabaseDumpSpec, DataCatalogConfig, + DataplexConfig, DeleteBackupRequest, DeleteServiceRequest, + EncryptionConfig, ExportMetadataRequest, GetBackupRequest, GetMetadataImportRequest, GetServiceRequest, HiveMetastoreConfig, KerberosConfig, + Lake, ListBackupsRequest, ListBackupsResponse, ListMetadataImportsRequest, @@ -45,34 +57,59 @@ MetadataImport, MetadataIntegration, MetadataManagementActivity, + NetworkConfig, OperationMetadata, Restore, RestoreServiceRequest, Secret, Service, + TelemetryConfig, UpdateMetadataImportRequest, UpdateServiceRequest, ) +from .types.metastore_federation import ( + BackendMetastore, + CreateFederationRequest, + DeleteFederationRequest, + Federation, + GetFederationRequest, + ListFederationsRequest, + ListFederationsResponse, + UpdateFederationRequest, +) __all__ = ( "DataprocMetastoreAsyncClient", + "DataprocMetastoreFederationAsyncClient", + "AuxiliaryVersionConfig", + "BackendMetastore", "Backup", "CreateBackupRequest", + "CreateFederationRequest", "CreateMetadataImportRequest", "CreateServiceRequest", "DataCatalogConfig", "DatabaseDumpSpec", + "DataplexConfig", "DataprocMetastoreClient", + "DataprocMetastoreFederationClient", "DeleteBackupRequest", + "DeleteFederationRequest", "DeleteServiceRequest", + "EncryptionConfig", "ExportMetadataRequest", + "Federation", "GetBackupRequest", + "GetFederationRequest", "GetMetadataImportRequest", "GetServiceRequest", "HiveMetastoreConfig", "KerberosConfig", + "Lake", "ListBackupsRequest", "ListBackupsResponse", + "ListFederationsRequest", + "ListFederationsResponse", "ListMetadataImportsRequest", "ListMetadataImportsResponse", "ListServicesRequest", @@ -83,11 +120,14 @@ "MetadataImport", "MetadataIntegration", "MetadataManagementActivity", + "NetworkConfig", "OperationMetadata", "Restore", "RestoreServiceRequest", "Secret", "Service", + "TelemetryConfig", + "UpdateFederationRequest", "UpdateMetadataImportRequest", "UpdateServiceRequest", ) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/gapic_metadata.json b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/gapic_metadata.json index eca2df9107ed..7eb1fc293c97 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/gapic_metadata.json +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/gapic_metadata.json @@ -168,6 +168,70 @@ } } } + }, + "DataprocMetastoreFederation": { + "clients": { + "grpc": { + "libraryClient": "DataprocMetastoreFederationClient", + "rpcs": { + "CreateFederation": { + "methods": [ + "create_federation" + ] + }, + "DeleteFederation": { + "methods": [ + "delete_federation" + ] + }, + "GetFederation": { + "methods": [ + "get_federation" + ] + }, + "ListFederations": { + "methods": [ + "list_federations" + ] + }, + "UpdateFederation": { + "methods": [ + "update_federation" + ] + } + } + }, + "grpc-async": { + "libraryClient": "DataprocMetastoreFederationAsyncClient", + "rpcs": { + "CreateFederation": { + "methods": [ + "create_federation" + ] + }, + "DeleteFederation": { + "methods": [ + "delete_federation" + ] + }, + "GetFederation": { + "methods": [ + "get_federation" + ] + }, + "ListFederations": { + "methods": [ + "list_federations" + ] + }, + "UpdateFederation": { + "methods": [ + "update_federation" + ] + } + } + } + } } } } diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/async_client.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/async_client.py index 44b25dffab32..3e648cc273d8 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/async_client.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/async_client.py @@ -16,7 +16,17 @@ from collections import OrderedDict import functools import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, +) from google.api_core import exceptions as core_exceptions from google.api_core import gapic_v1 @@ -47,12 +57,11 @@ class DataprocMetastoreAsyncClient: """Configures and manages metastore services. Metastore services are - fully managed, highly available, auto-scaled, auto-healing, - OSS-native deployments of technical metadata management software. - Each metastore service exposes a network endpoint through which - metadata queries are served. Metadata queries can originate from a - variety of sources, including Apache Hive, Apache Presto, and Apache - Spark. + fully managed, highly available, autoscaled, autohealing, OSS-native + deployments of technical metadata management software. Each + metastore service exposes a network endpoint through which metadata + queries are served. Metadata queries can originate from a variety of + sources, including Apache Hive, Apache Presto, and Apache Spark. The Dataproc Metastore API defines the following resource model: @@ -78,6 +87,8 @@ class DataprocMetastoreAsyncClient: backup_path = staticmethod(DataprocMetastoreClient.backup_path) parse_backup_path = staticmethod(DataprocMetastoreClient.parse_backup_path) + lake_path = staticmethod(DataprocMetastoreClient.lake_path) + parse_lake_path = staticmethod(DataprocMetastoreClient.parse_lake_path) metadata_import_path = staticmethod(DataprocMetastoreClient.metadata_import_path) parse_metadata_import_path = staticmethod( DataprocMetastoreClient.parse_metadata_import_path @@ -86,6 +97,8 @@ class DataprocMetastoreAsyncClient: parse_network_path = staticmethod(DataprocMetastoreClient.parse_network_path) service_path = staticmethod(DataprocMetastoreClient.service_path) parse_service_path = staticmethod(DataprocMetastoreClient.parse_service_path) + subnetwork_path = staticmethod(DataprocMetastoreClient.subnetwork_path) + parse_subnetwork_path = staticmethod(DataprocMetastoreClient.parse_subnetwork_path) common_billing_account_path = staticmethod( DataprocMetastoreClient.common_billing_account_path ) @@ -196,9 +209,9 @@ def transport(self) -> DataprocMetastoreTransport: def __init__( self, *, - credentials: ga_credentials.Credentials = None, + credentials: Optional[ga_credentials.Credentials] = None, transport: Union[str, DataprocMetastoreTransport] = "grpc_asyncio", - client_options: ClientOptions = None, + client_options: Optional[ClientOptions] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the dataproc metastore client. @@ -242,11 +255,11 @@ def __init__( async def list_services( self, - request: Union[metastore.ListServicesRequest, dict] = None, + request: Optional[Union[metastore.ListServicesRequest, 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.ListServicesAsyncPager: r"""Lists services in a project and location. @@ -279,7 +292,7 @@ async def sample_list_services(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.ListServicesRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.ListServicesRequest, dict]]): The request object. Request message for [DataprocMetastore.ListServices][google.cloud.metastore.v1beta.DataprocMetastore.ListServices]. parent (:class:`str`): @@ -359,11 +372,11 @@ async def sample_list_services(): async def get_service( self, - request: Union[metastore.GetServiceRequest, dict] = None, + request: Optional[Union[metastore.GetServiceRequest, 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]] = (), ) -> metastore.Service: r"""Gets the details of a single service. @@ -395,7 +408,7 @@ async def sample_get_service(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.GetServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.GetServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.GetService][google.cloud.metastore.v1beta.DataprocMetastore.GetService]. name (:class:`str`): @@ -463,13 +476,13 @@ async def sample_get_service(): async def create_service( self, - request: Union[metastore.CreateServiceRequest, dict] = None, + request: Optional[Union[metastore.CreateServiceRequest, dict]] = None, *, - parent: str = None, - service: metastore.Service = None, - service_id: str = None, + parent: Optional[str] = None, + service: Optional[metastore.Service] = None, + service_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Creates a metastore service in a project and @@ -507,7 +520,7 @@ async def sample_create_service(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.CreateServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.CreateServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateService][google.cloud.metastore.v1beta.DataprocMetastore.CreateService]. parent (:class:`str`): @@ -614,12 +627,12 @@ async def sample_create_service(): async def update_service( self, - request: Union[metastore.UpdateServiceRequest, dict] = None, + request: Optional[Union[metastore.UpdateServiceRequest, dict]] = None, *, - service: metastore.Service = None, - update_mask: field_mask_pb2.FieldMask = None, + service: Optional[metastore.Service] = 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]] = (), ) -> operation_async.AsyncOperation: r"""Updates the parameters of a single service. @@ -654,7 +667,7 @@ async def sample_update_service(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.UpdateServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.UpdateServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.UpdateService][google.cloud.metastore.v1beta.DataprocMetastore.UpdateService]. service (:class:`google.cloud.metastore_v1beta.types.Service`): @@ -749,11 +762,11 @@ async def sample_update_service(): async def delete_service( self, - request: Union[metastore.DeleteServiceRequest, dict] = None, + request: Optional[Union[metastore.DeleteServiceRequest, 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]] = (), ) -> operation_async.AsyncOperation: r"""Deletes a single service. @@ -789,7 +802,7 @@ async def sample_delete_service(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.DeleteServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.DeleteServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.DeleteService][google.cloud.metastore.v1beta.DataprocMetastore.DeleteService]. name (:class:`str`): @@ -875,11 +888,11 @@ async def sample_delete_service(): async def list_metadata_imports( self, - request: Union[metastore.ListMetadataImportsRequest, dict] = None, + request: Optional[Union[metastore.ListMetadataImportsRequest, 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.ListMetadataImportsAsyncPager: r"""Lists imports in a service. @@ -912,7 +925,7 @@ async def sample_list_metadata_imports(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.ListMetadataImportsRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.ListMetadataImportsRequest, dict]]): The request object. Request message for [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1beta.DataprocMetastore.ListMetadataImports]. parent (:class:`str`): @@ -992,11 +1005,11 @@ async def sample_list_metadata_imports(): async def get_metadata_import( self, - request: Union[metastore.GetMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.GetMetadataImportRequest, 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]] = (), ) -> metastore.MetadataImport: r"""Gets details of a single import. @@ -1028,7 +1041,7 @@ async def sample_get_metadata_import(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.GetMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.GetMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.GetMetadataImport][google.cloud.metastore.v1beta.DataprocMetastore.GetMetadataImport]. name (:class:`str`): @@ -1096,13 +1109,13 @@ async def sample_get_metadata_import(): async def create_metadata_import( self, - request: Union[metastore.CreateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.CreateMetadataImportRequest, dict]] = None, *, - parent: str = None, - metadata_import: metastore.MetadataImport = None, - metadata_import_id: str = None, + parent: Optional[str] = None, + metadata_import: Optional[metastore.MetadataImport] = None, + metadata_import_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Creates a new MetadataImport in a given project and @@ -1140,7 +1153,7 @@ async def sample_create_metadata_import(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.CreateMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.CreateMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateMetadataImport][google.cloud.metastore.v1beta.DataprocMetastore.CreateMetadataImport]. parent (:class:`str`): @@ -1148,7 +1161,7 @@ async def sample_create_metadata_import(): which to create a metastore import, in the following form: - ``projects/{project_number}/locations/{location_id}/services/{service_id}`` + ``projects/{project_number}/locations/{location_id}/services/{service_id}``. This corresponds to the ``parent`` field on the ``request`` instance; if ``request`` is provided, this @@ -1246,12 +1259,12 @@ async def sample_create_metadata_import(): async def update_metadata_import( self, - request: Union[metastore.UpdateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.UpdateMetadataImportRequest, dict]] = None, *, - metadata_import: metastore.MetadataImport = None, - update_mask: field_mask_pb2.FieldMask = None, + metadata_import: Optional[metastore.MetadataImport] = 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]] = (), ) -> operation_async.AsyncOperation: r"""Updates a single import. @@ -1288,7 +1301,7 @@ async def sample_update_metadata_import(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.UpdateMetadataImportRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.UpdateMetadataImportRequest, dict]]): The request object. Request message for [DataprocMetastore.UpdateMetadataImport][google.cloud.metastore.v1beta.DataprocMetastore.UpdateMetadataImport]. metadata_import (:class:`google.cloud.metastore_v1beta.types.MetadataImport`): @@ -1383,10 +1396,10 @@ async def sample_update_metadata_import(): async def export_metadata( self, - request: Union[metastore.ExportMetadataRequest, dict] = None, + request: Optional[Union[metastore.ExportMetadataRequest, dict]] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Exports metadata from a service. @@ -1423,7 +1436,7 @@ async def sample_export_metadata(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.ExportMetadataRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.ExportMetadataRequest, dict]]): The request object. Request message for [DataprocMetastore.ExportMetadata][google.cloud.metastore.v1beta.DataprocMetastore.ExportMetadata]. retry (google.api_core.retry.Retry): Designation of what errors, if any, @@ -1479,12 +1492,12 @@ async def sample_export_metadata(): async def restore_service( self, - request: Union[metastore.RestoreServiceRequest, dict] = None, + request: Optional[Union[metastore.RestoreServiceRequest, dict]] = None, *, - service: str = None, - backup: str = None, + service: Optional[str] = None, + backup: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: r"""Restores a service from a backup. @@ -1521,14 +1534,14 @@ async def sample_restore_service(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.RestoreServiceRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.RestoreServiceRequest, dict]]): The request object. Request message for [DataprocMetastore.Restore][]. service (:class:`str`): Required. The relative resource name of the metastore service to run restore, in the following form: - ``projects/{project_id}/locations/{location_id}/services/{service_id}`` + ``projects/{project_id}/locations/{location_id}/services/{service_id}``. This corresponds to the ``service`` field on the ``request`` instance; if ``request`` is provided, this @@ -1537,7 +1550,7 @@ async def sample_restore_service(): Required. The relative resource name of the metastore service backup to restore from, in the following form: - ``projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}`` + ``projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}``. This corresponds to the ``backup`` field on the ``request`` instance; if ``request`` is provided, this @@ -1611,11 +1624,11 @@ async def sample_restore_service(): async def list_backups( self, - request: Union[metastore.ListBackupsRequest, dict] = None, + request: Optional[Union[metastore.ListBackupsRequest, 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.ListBackupsAsyncPager: r"""Lists backups in a service. @@ -1648,7 +1661,7 @@ async def sample_list_backups(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.ListBackupsRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.ListBackupsRequest, dict]]): The request object. Request message for [DataprocMetastore.ListBackups][google.cloud.metastore.v1beta.DataprocMetastore.ListBackups]. parent (:class:`str`): @@ -1728,11 +1741,11 @@ async def sample_list_backups(): async def get_backup( self, - request: Union[metastore.GetBackupRequest, dict] = None, + request: Optional[Union[metastore.GetBackupRequest, 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]] = (), ) -> metastore.Backup: r"""Gets details of a single backup. @@ -1764,7 +1777,7 @@ async def sample_get_backup(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.GetBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.GetBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.GetBackup][google.cloud.metastore.v1beta.DataprocMetastore.GetBackup]. name (:class:`str`): @@ -1830,16 +1843,16 @@ async def sample_get_backup(): async def create_backup( self, - request: Union[metastore.CreateBackupRequest, dict] = None, + request: Optional[Union[metastore.CreateBackupRequest, dict]] = None, *, - parent: str = None, - backup: metastore.Backup = None, - backup_id: str = None, + parent: Optional[str] = None, + backup: Optional[metastore.Backup] = None, + backup_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation_async.AsyncOperation: - r"""Creates a new Backup in a given project and location. + r"""Creates a new backup in a given project and location. .. code-block:: python @@ -1873,14 +1886,14 @@ async def sample_create_backup(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.CreateBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.CreateBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.CreateBackup][google.cloud.metastore.v1beta.DataprocMetastore.CreateBackup]. parent (:class:`str`): Required. The relative resource name of the service in which to create a backup of the following form: - ``projects/{project_number}/locations/{location_id}/services/{service_id}`` + ``projects/{project_number}/locations/{location_id}/services/{service_id}``. This corresponds to the ``parent`` field on the ``request`` instance; if ``request`` is provided, this @@ -1977,11 +1990,11 @@ async def sample_create_backup(): async def delete_backup( self, - request: Union[metastore.DeleteBackupRequest, dict] = None, + request: Optional[Union[metastore.DeleteBackupRequest, 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]] = (), ) -> operation_async.AsyncOperation: r"""Deletes a single backup. @@ -2017,7 +2030,7 @@ async def sample_delete_backup(): print(response) Args: - request (Union[google.cloud.metastore_v1beta.types.DeleteBackupRequest, dict]): + request (Optional[Union[google.cloud.metastore_v1beta.types.DeleteBackupRequest, dict]]): The request object. Request message for [DataprocMetastore.DeleteBackup][google.cloud.metastore.v1beta.DataprocMetastore.DeleteBackup]. name (:class:`str`): diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/client.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/client.py index b9fb046ba0cd..1b57cad576ce 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/client.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/client.py @@ -16,7 +16,18 @@ from collections import OrderedDict import os import re -from typing import Dict, Mapping, Optional, Sequence, Tuple, Type, Union +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 @@ -64,7 +75,7 @@ class DataprocMetastoreClientMeta(type): def get_transport_class( cls, - label: str = None, + label: Optional[str] = None, ) -> Type[DataprocMetastoreTransport]: """Returns an appropriate transport class. @@ -86,12 +97,11 @@ def get_transport_class( class DataprocMetastoreClient(metaclass=DataprocMetastoreClientMeta): """Configures and manages metastore services. Metastore services are - fully managed, highly available, auto-scaled, auto-healing, - OSS-native deployments of technical metadata management software. - Each metastore service exposes a network endpoint through which - metadata queries are served. Metadata queries can originate from a - variety of sources, including Apache Hive, Apache Presto, and Apache - Spark. + fully managed, highly available, autoscaled, autohealing, OSS-native + deployments of technical metadata management software. Each + metastore service exposes a network endpoint through which metadata + queries are served. Metadata queries can originate from a variety of + sources, including Apache Hive, Apache Presto, and Apache Spark. The Dataproc Metastore API defines the following resource model: @@ -216,6 +226,28 @@ def parse_backup_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def lake_path( + project: str, + location: str, + lake: str, + ) -> str: + """Returns a fully-qualified lake string.""" + return "projects/{project}/locations/{location}/lakes/{lake}".format( + project=project, + location=location, + lake=lake, + ) + + @staticmethod + def parse_lake_path(path: str) -> Dict[str, str]: + """Parses a lake path into its component segments.""" + m = re.match( + r"^projects/(?P.+?)/locations/(?P.+?)/lakes/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def metadata_import_path( project: str, @@ -281,6 +313,28 @@ def parse_service_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def subnetwork_path( + project: str, + region: str, + subnetwork: str, + ) -> str: + """Returns a fully-qualified subnetwork string.""" + return "projects/{project}/regions/{region}/subnetworks/{subnetwork}".format( + project=project, + region=region, + subnetwork=subnetwork, + ) + + @staticmethod + def parse_subnetwork_path(path: str) -> Dict[str, str]: + """Parses a subnetwork path into its component segments.""" + m = re.match( + r"^projects/(?P.+?)/regions/(?P.+?)/subnetworks/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def common_billing_account_path( billing_account: str, @@ -429,8 +483,8 @@ def __init__( self, *, credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, DataprocMetastoreTransport, None] = None, - client_options: Optional[client_options_lib.ClientOptions] = None, + transport: Optional[Union[str, DataprocMetastoreTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, ) -> None: """Instantiates the dataproc metastore client. @@ -444,7 +498,7 @@ def __init__( transport (Union[str, DataprocMetastoreTransport]): 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 @@ -474,6 +528,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 @@ -526,11 +581,11 @@ def __init__( def list_services( self, - request: Union[metastore.ListServicesRequest, dict] = None, + request: Optional[Union[metastore.ListServicesRequest, 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.ListServicesPager: r"""Lists services in a project and location. @@ -643,11 +698,11 @@ def sample_list_services(): def get_service( self, - request: Union[metastore.GetServiceRequest, dict] = None, + request: Optional[Union[metastore.GetServiceRequest, 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]] = (), ) -> metastore.Service: r"""Gets the details of a single service. @@ -747,13 +802,13 @@ def sample_get_service(): def create_service( self, - request: Union[metastore.CreateServiceRequest, dict] = None, + request: Optional[Union[metastore.CreateServiceRequest, dict]] = None, *, - parent: str = None, - service: metastore.Service = None, - service_id: str = None, + parent: Optional[str] = None, + service: Optional[metastore.Service] = None, + service_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Creates a metastore service in a project and @@ -898,12 +953,12 @@ def sample_create_service(): def update_service( self, - request: Union[metastore.UpdateServiceRequest, dict] = None, + request: Optional[Union[metastore.UpdateServiceRequest, dict]] = None, *, - service: metastore.Service = None, - update_mask: field_mask_pb2.FieldMask = None, + service: Optional[metastore.Service] = 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]] = (), ) -> operation.Operation: r"""Updates the parameters of a single service. @@ -1033,11 +1088,11 @@ def sample_update_service(): def delete_service( self, - request: Union[metastore.DeleteServiceRequest, dict] = None, + request: Optional[Union[metastore.DeleteServiceRequest, 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]] = (), ) -> operation.Operation: r"""Deletes a single service. @@ -1159,11 +1214,11 @@ def sample_delete_service(): def list_metadata_imports( self, - request: Union[metastore.ListMetadataImportsRequest, dict] = None, + request: Optional[Union[metastore.ListMetadataImportsRequest, 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.ListMetadataImportsPager: r"""Lists imports in a service. @@ -1276,11 +1331,11 @@ def sample_list_metadata_imports(): def get_metadata_import( self, - request: Union[metastore.GetMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.GetMetadataImportRequest, 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]] = (), ) -> metastore.MetadataImport: r"""Gets details of a single import. @@ -1380,13 +1435,13 @@ def sample_get_metadata_import(): def create_metadata_import( self, - request: Union[metastore.CreateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.CreateMetadataImportRequest, dict]] = None, *, - parent: str = None, - metadata_import: metastore.MetadataImport = None, - metadata_import_id: str = None, + parent: Optional[str] = None, + metadata_import: Optional[metastore.MetadataImport] = None, + metadata_import_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Creates a new MetadataImport in a given project and @@ -1432,7 +1487,7 @@ def sample_create_metadata_import(): which to create a metastore import, in the following form: - ``projects/{project_number}/locations/{location_id}/services/{service_id}`` + ``projects/{project_number}/locations/{location_id}/services/{service_id}``. This corresponds to the ``parent`` field on the ``request`` instance; if ``request`` is provided, this @@ -1530,12 +1585,12 @@ def sample_create_metadata_import(): def update_metadata_import( self, - request: Union[metastore.UpdateMetadataImportRequest, dict] = None, + request: Optional[Union[metastore.UpdateMetadataImportRequest, dict]] = None, *, - metadata_import: metastore.MetadataImport = None, - update_mask: field_mask_pb2.FieldMask = None, + metadata_import: Optional[metastore.MetadataImport] = 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]] = (), ) -> operation.Operation: r"""Updates a single import. @@ -1667,10 +1722,10 @@ def sample_update_metadata_import(): def export_metadata( self, - request: Union[metastore.ExportMetadataRequest, dict] = None, + request: Optional[Union[metastore.ExportMetadataRequest, dict]] = None, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Exports metadata from a service. @@ -1764,12 +1819,12 @@ def sample_export_metadata(): def restore_service( self, - request: Union[metastore.RestoreServiceRequest, dict] = None, + request: Optional[Union[metastore.RestoreServiceRequest, dict]] = None, *, - service: str = None, - backup: str = None, + service: Optional[str] = None, + backup: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: r"""Restores a service from a backup. @@ -1813,7 +1868,7 @@ def sample_restore_service(): Required. The relative resource name of the metastore service to run restore, in the following form: - ``projects/{project_id}/locations/{location_id}/services/{service_id}`` + ``projects/{project_id}/locations/{location_id}/services/{service_id}``. This corresponds to the ``service`` field on the ``request`` instance; if ``request`` is provided, this @@ -1822,7 +1877,7 @@ def sample_restore_service(): Required. The relative resource name of the metastore service backup to restore from, in the following form: - ``projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}`` + ``projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}``. This corresponds to the ``backup`` field on the ``request`` instance; if ``request`` is provided, this @@ -1896,11 +1951,11 @@ def sample_restore_service(): def list_backups( self, - request: Union[metastore.ListBackupsRequest, dict] = None, + request: Optional[Union[metastore.ListBackupsRequest, 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.ListBackupsPager: r"""Lists backups in a service. @@ -2013,11 +2068,11 @@ def sample_list_backups(): def get_backup( self, - request: Union[metastore.GetBackupRequest, dict] = None, + request: Optional[Union[metastore.GetBackupRequest, 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]] = (), ) -> metastore.Backup: r"""Gets details of a single backup. @@ -2115,16 +2170,16 @@ def sample_get_backup(): def create_backup( self, - request: Union[metastore.CreateBackupRequest, dict] = None, + request: Optional[Union[metastore.CreateBackupRequest, dict]] = None, *, - parent: str = None, - backup: metastore.Backup = None, - backup_id: str = None, + parent: Optional[str] = None, + backup: Optional[metastore.Backup] = None, + backup_id: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: float = None, + timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), ) -> operation.Operation: - r"""Creates a new Backup in a given project and location. + r"""Creates a new backup in a given project and location. .. code-block:: python @@ -2165,7 +2220,7 @@ def sample_create_backup(): Required. The relative resource name of the service in which to create a backup of the following form: - ``projects/{project_number}/locations/{location_id}/services/{service_id}`` + ``projects/{project_number}/locations/{location_id}/services/{service_id}``. This corresponds to the ``parent`` field on the ``request`` instance; if ``request`` is provided, this @@ -2262,11 +2317,11 @@ def sample_create_backup(): def delete_backup( self, - request: Union[metastore.DeleteBackupRequest, dict] = None, + request: Optional[Union[metastore.DeleteBackupRequest, 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]] = (), ) -> operation.Operation: r"""Deletes a single backup. diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/base.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/base.py index 99ae6890a456..ea6d25ecf0b6 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/base.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/base.py @@ -49,7 +49,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-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/grpc.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/grpc.py index 6c0d6d5ce877..1a6c67739e81 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/grpc.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/grpc.py @@ -32,12 +32,11 @@ class DataprocMetastoreGrpcTransport(DataprocMetastoreTransport): """gRPC backend transport for DataprocMetastore. Configures and manages metastore services. Metastore services are - fully managed, highly available, auto-scaled, auto-healing, - OSS-native deployments of technical metadata management software. - Each metastore service exposes a network endpoint through which - metadata queries are served. Metadata queries can originate from a - variety of sources, including Apache Hive, Apache Presto, and Apache - Spark. + fully managed, highly available, autoscaled, autohealing, OSS-native + deployments of technical metadata management software. Each + metastore service exposes a network endpoint through which metadata + queries are served. Metadata queries can originate from a variety of + sources, including Apache Hive, Apache Presto, and Apache Spark. The Dataproc Metastore API defines the following resource model: @@ -69,14 +68,14 @@ def __init__( self, *, host: str = "metastore.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, @@ -204,8 +203,8 @@ def __init__( def create_channel( cls, host: str = "metastore.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, @@ -612,7 +611,7 @@ def create_backup( ) -> Callable[[metastore.CreateBackupRequest], operations_pb2.Operation]: r"""Return a callable for the create backup method over gRPC. - Creates a new Backup in a given project and location. + Creates a new backup in a given project and location. Returns: Callable[[~.CreateBackupRequest], diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/grpc_asyncio.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/grpc_asyncio.py index cd274b4daa17..daeb19a9907f 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/grpc_asyncio.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore/transports/grpc_asyncio.py @@ -33,12 +33,11 @@ class DataprocMetastoreGrpcAsyncIOTransport(DataprocMetastoreTransport): """gRPC AsyncIO backend transport for DataprocMetastore. Configures and manages metastore services. Metastore services are - fully managed, highly available, auto-scaled, auto-healing, - OSS-native deployments of technical metadata management software. - Each metastore service exposes a network endpoint through which - metadata queries are served. Metadata queries can originate from a - variety of sources, including Apache Hive, Apache Presto, and Apache - Spark. + fully managed, highly available, autoscaled, autohealing, OSS-native + deployments of technical metadata management software. Each + metastore service exposes a network endpoint through which metadata + queries are served. Metadata queries can originate from a variety of + sources, including Apache Hive, Apache Presto, and Apache Spark. The Dataproc Metastore API defines the following resource model: @@ -71,7 +70,7 @@ class DataprocMetastoreGrpcAsyncIOTransport(DataprocMetastoreTransport): def create_channel( cls, host: str = "metastore.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, @@ -114,15 +113,15 @@ def __init__( self, *, host: str = "metastore.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, @@ -642,7 +641,7 @@ def create_backup( ) -> Callable[[metastore.CreateBackupRequest], Awaitable[operations_pb2.Operation]]: r"""Return a callable for the create backup method over gRPC. - Creates a new Backup in a given project and location. + Creates a new backup in a given project and location. Returns: Callable[[~.CreateBackupRequest], diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/__init__.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/__init__.py new file mode 100644 index 000000000000..6cb70e094980 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/__init__.py @@ -0,0 +1,22 @@ +# -*- 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. +# +from .async_client import DataprocMetastoreFederationAsyncClient +from .client import DataprocMetastoreFederationClient + +__all__ = ( + "DataprocMetastoreFederationClient", + "DataprocMetastoreFederationAsyncClient", +) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/async_client.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/async_client.py new file mode 100644 index 000000000000..23634f325601 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/async_client.py @@ -0,0 +1,902 @@ +# -*- 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. +# +from collections import OrderedDict +import functools +import re +from typing import ( + Dict, + Mapping, + MutableMapping, + MutableSequence, + Optional, + Sequence, + Tuple, + Type, + Union, +) + +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.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + +from google.cloud.metastore_v1beta.services.dataproc_metastore_federation import pagers +from google.cloud.metastore_v1beta.types import metastore, metastore_federation + +from .client import DataprocMetastoreFederationClient +from .transports.base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .transports.grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + + +class DataprocMetastoreFederationAsyncClient: + """Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + _client: DataprocMetastoreFederationClient + + DEFAULT_ENDPOINT = DataprocMetastoreFederationClient.DEFAULT_ENDPOINT + DEFAULT_MTLS_ENDPOINT = DataprocMetastoreFederationClient.DEFAULT_MTLS_ENDPOINT + + federation_path = staticmethod(DataprocMetastoreFederationClient.federation_path) + parse_federation_path = staticmethod( + DataprocMetastoreFederationClient.parse_federation_path + ) + common_billing_account_path = staticmethod( + DataprocMetastoreFederationClient.common_billing_account_path + ) + parse_common_billing_account_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_billing_account_path + ) + common_folder_path = staticmethod( + DataprocMetastoreFederationClient.common_folder_path + ) + parse_common_folder_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_folder_path + ) + common_organization_path = staticmethod( + DataprocMetastoreFederationClient.common_organization_path + ) + parse_common_organization_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_organization_path + ) + common_project_path = staticmethod( + DataprocMetastoreFederationClient.common_project_path + ) + parse_common_project_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_project_path + ) + common_location_path = staticmethod( + DataprocMetastoreFederationClient.common_location_path + ) + parse_common_location_path = staticmethod( + DataprocMetastoreFederationClient.parse_common_location_path + ) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationAsyncClient: The constructed client. + """ + return DataprocMetastoreFederationClient.from_service_account_info.__func__(DataprocMetastoreFederationAsyncClient, info, *args, **kwargs) # type: ignore + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationAsyncClient: The constructed client. + """ + return DataprocMetastoreFederationClient.from_service_account_file.__func__(DataprocMetastoreFederationAsyncClient, filename, *args, **kwargs) # type: ignore + + from_service_account_json = from_service_account_file + + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[ClientOptions] = None + ): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variabel is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + return DataprocMetastoreFederationClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore + + @property + def transport(self) -> DataprocMetastoreFederationTransport: + """Returns the transport used by the client instance. + + Returns: + DataprocMetastoreFederationTransport: The transport used by the client instance. + """ + return self._client.transport + + get_transport_class = functools.partial( + type(DataprocMetastoreFederationClient).get_transport_class, + type(DataprocMetastoreFederationClient), + ) + + def __init__( + self, + *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Union[str, DataprocMetastoreFederationTransport] = "grpc_asyncio", + client_options: Optional[ClientOptions] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the dataproc metastore federation client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, ~.DataprocMetastoreFederationTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (ClientOptions): 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 + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + """ + self._client = DataprocMetastoreFederationClient( + credentials=credentials, + transport=transport, + client_options=client_options, + client_info=client_info, + ) + + async def list_federations( + self, + request: Optional[ + Union[metastore_federation.ListFederationsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFederationsAsyncPager: + r"""Lists federations in a project and location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + async def sample_list_federations(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1beta.types.ListFederationsRequest, dict]]): + The request object. Request message for ListFederations. + parent (:class:`str`): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1beta.services.dataproc_metastore_federation.pagers.ListFederationsAsyncPager: + Response message for ListFederations + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.ListFederationsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_federations, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListFederationsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_federation( + self, + request: Optional[ + Union[metastore_federation.GetFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> metastore_federation.Federation: + r"""Gets the details of a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + async def sample_get_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = await client.get_federation(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1beta.types.GetFederationRequest, dict]]): + The request object. Request message for GetFederation. + name (:class:`str`): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1beta.types.Federation: + Represents a federation of multiple + backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.GetFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def create_federation( + self, + request: Optional[ + Union[metastore_federation.CreateFederationRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + federation: Optional[metastore_federation.Federation] = None, + federation_id: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Creates a metastore federation in a project and + location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + async def sample_create_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1beta.types.CreateFederationRequest, dict]]): + The request object. Request message for + CreateFederation. + parent (:class:`str`): + Required. The relative resource name of the location in + which to create a federation service, in the following + form: + + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation (:class:`google.cloud.metastore_v1beta.types.Federation`): + Required. The Metastore Federation to create. The + ``name`` field is ignored. The ID of the created + metastore federation must be provided in the request's + ``federation_id`` field. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation_id (:class:`str`): + Required. The ID of the metastore + federation, which is used as the final + component of the metastore federation's + name. + This value must be between 2 and 63 + characters long inclusive, begin with a + letter, end with a letter or number, and + consist of alpha-numeric ASCII + characters or hyphens. + + This corresponds to the ``federation_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1beta.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, federation, federation_id]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.CreateFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if federation is not None: + request.federation = federation + if federation_id is not None: + request.federation_id = federation_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def update_federation( + self, + request: Optional[ + Union[metastore_federation.UpdateFederationRequest, dict] + ] = None, + *, + federation: Optional[metastore_federation.Federation] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Updates the fields of a federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + async def sample_update_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1beta.types.UpdateFederationRequest, dict]]): + The request object. Request message for + UpdateFederation. + federation (:class:`google.cloud.metastore_v1beta.types.Federation`): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified + in ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are + relative to the resource (not to the full request). A + field is overwritten if it is in the mask. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1beta.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([federation, update_mask]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.UpdateFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if federation is not None: + request.federation = federation + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("federation.name", request.federation.name),) + ), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def delete_federation( + self, + request: Optional[ + Union[metastore_federation.DeleteFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Deletes a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + async def sample_delete_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.metastore_v1beta.types.DeleteFederationRequest, dict]]): + The request object. Request message for + DeleteFederation. + name (:class:`str`): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated + empty messages in your APIs. A typical example is to + use it as the request or the response type of an API + method. For instance: + + service Foo { + rpc Bar(google.protobuf.Empty) returns + (google.protobuf.Empty); + + } + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = metastore_federation.DeleteFederationRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.delete_federation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + empty_pb2.Empty, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + async def __aenter__(self): + return self + + async def __aexit__(self, exc_type, exc, tb): + await self.transport.close() + + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-dataproc-metastore", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +__all__ = ("DataprocMetastoreFederationAsyncClient",) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/client.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/client.py new file mode 100644 index 000000000000..1f0b93104132 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/client.py @@ -0,0 +1,1133 @@ +# -*- 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. +# +from collections import OrderedDict +import os +import re +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.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.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + +from google.cloud.metastore_v1beta.services.dataproc_metastore_federation import pagers +from google.cloud.metastore_v1beta.types import metastore, metastore_federation + +from .transports.base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .transports.grpc import DataprocMetastoreFederationGrpcTransport +from .transports.grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + + +class DataprocMetastoreFederationClientMeta(type): + """Metaclass for the DataprocMetastoreFederation client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + + _transport_registry = ( + OrderedDict() + ) # type: Dict[str, Type[DataprocMetastoreFederationTransport]] + _transport_registry["grpc"] = DataprocMetastoreFederationGrpcTransport + _transport_registry[ + "grpc_asyncio" + ] = DataprocMetastoreFederationGrpcAsyncIOTransport + + def get_transport_class( + cls, + label: Optional[str] = None, + ) -> Type[DataprocMetastoreFederationTransport]: + """Returns an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class DataprocMetastoreFederationClient( + metaclass=DataprocMetastoreFederationClientMeta +): + """Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + @staticmethod + def _get_default_mtls_endpoint(api_endpoint): + """Converts api endpoint to mTLS endpoint. + + Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to + "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. + Args: + api_endpoint (Optional[str]): the api endpoint to convert. + Returns: + str: converted mTLS api endpoint. + """ + if not api_endpoint: + return api_endpoint + + mtls_endpoint_re = re.compile( + r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" + ) + + m = mtls_endpoint_re.match(api_endpoint) + name, mtls, sandbox, googledomain = m.groups() + if mtls or not googledomain: + return api_endpoint + + if sandbox: + return api_endpoint.replace( + "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" + ) + + return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") + + DEFAULT_ENDPOINT = "metastore.googleapis.com" + DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore + DEFAULT_ENDPOINT + ) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + DataprocMetastoreFederationClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_file(filename) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + from_service_account_json = from_service_account_file + + @property + def transport(self) -> DataprocMetastoreFederationTransport: + """Returns the transport used by the client instance. + + Returns: + DataprocMetastoreFederationTransport: The transport used by the client + instance. + """ + return self._transport + + @staticmethod + def federation_path( + project: str, + location: str, + federation: str, + ) -> str: + """Returns a fully-qualified federation string.""" + return ( + "projects/{project}/locations/{location}/federations/{federation}".format( + project=project, + location=location, + federation=federation, + ) + ) + + @staticmethod + def parse_federation_path(path: str) -> Dict[str, str]: + """Parses a federation path into its component segments.""" + m = re.match( + r"^projects/(?P.+?)/locations/(?P.+?)/federations/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + + @staticmethod + def common_billing_account_path( + billing_account: str, + ) -> str: + """Returns a fully-qualified billing_account string.""" + return "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + + @staticmethod + def parse_common_billing_account_path(path: str) -> Dict[str, str]: + """Parse a billing_account path into its component segments.""" + m = re.match(r"^billingAccounts/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_folder_path( + folder: str, + ) -> str: + """Returns a fully-qualified folder string.""" + return "folders/{folder}".format( + folder=folder, + ) + + @staticmethod + def parse_common_folder_path(path: str) -> Dict[str, str]: + """Parse a folder path into its component segments.""" + m = re.match(r"^folders/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_organization_path( + organization: str, + ) -> str: + """Returns a fully-qualified organization string.""" + return "organizations/{organization}".format( + organization=organization, + ) + + @staticmethod + def parse_common_organization_path(path: str) -> Dict[str, str]: + """Parse a organization path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_project_path( + project: str, + ) -> str: + """Returns a fully-qualified project string.""" + return "projects/{project}".format( + project=project, + ) + + @staticmethod + def parse_common_project_path(path: str) -> Dict[str, str]: + """Parse a project path into its component segments.""" + m = re.match(r"^projects/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_location_path( + project: str, + location: str, + ) -> str: + """Returns a fully-qualified location string.""" + return "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + + @staticmethod + def parse_common_location_path(path: str) -> Dict[str, str]: + """Parse a location path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[client_options_lib.ClientOptions] = None + ): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variabel is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + if client_options is None: + client_options = client_options_lib.ClientOptions() + use_client_cert = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") + use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") + if use_client_cert not in ("true", "false"): + raise ValueError( + "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" + ) + if use_mtls_endpoint not in ("auto", "never", "always"): + raise MutualTLSChannelError( + "Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`" + ) + + # Figure out the client cert source to use. + client_cert_source = None + if use_client_cert == "true": + if client_options.client_cert_source: + client_cert_source = client_options.client_cert_source + elif mtls.has_default_client_cert_source(): + client_cert_source = mtls.default_client_cert_source() + + # Figure out which api endpoint to use. + if client_options.api_endpoint is not None: + api_endpoint = client_options.api_endpoint + elif use_mtls_endpoint == "always" or ( + use_mtls_endpoint == "auto" and client_cert_source + ): + api_endpoint = cls.DEFAULT_MTLS_ENDPOINT + else: + api_endpoint = cls.DEFAULT_ENDPOINT + + return api_endpoint, client_cert_source + + def __init__( + self, + *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Optional[Union[str, DataprocMetastoreFederationTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the dataproc metastore federation client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, DataprocMetastoreFederationTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + 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 + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + """ + if isinstance(client_options, dict): + 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 + ) + + api_key_value = getattr(client_options, "api_key", None) + if api_key_value and credentials: + raise ValueError( + "client_options.api_key and credentials are mutually exclusive" + ) + + # Save or instantiate the transport. + # Ordinarily, we provide the transport, but allowing a custom transport + # instance provides an extensibility point for unusual situations. + if isinstance(transport, DataprocMetastoreFederationTransport): + # transport is a DataprocMetastoreFederationTransport instance. + if credentials or client_options.credentials_file or api_key_value: + raise ValueError( + "When providing a transport instance, " + "provide its credentials directly." + ) + if client_options.scopes: + raise ValueError( + "When providing a transport instance, provide its scopes " + "directly." + ) + self._transport = transport + else: + import google.auth._default # type: ignore + + if api_key_value and hasattr( + google.auth._default, "get_api_key_credentials" + ): + credentials = google.auth._default.get_api_key_credentials( + api_key_value + ) + + Transport = type(self).get_transport_class(transport) + self._transport = Transport( + credentials=credentials, + credentials_file=client_options.credentials_file, + host=api_endpoint, + scopes=client_options.scopes, + client_cert_source_for_mtls=client_cert_source_func, + quota_project_id=client_options.quota_project_id, + client_info=client_info, + always_use_jwt_access=True, + api_audience=client_options.api_audience, + ) + + def list_federations( + self, + request: Optional[ + Union[metastore_federation.ListFederationsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFederationsPager: + r"""Lists federations in a project and location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + def sample_list_federations(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.metastore_v1beta.types.ListFederationsRequest, dict]): + The request object. Request message for ListFederations. + parent (str): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1beta.services.dataproc_metastore_federation.pagers.ListFederationsPager: + Response message for ListFederations + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.ListFederationsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.ListFederationsRequest): + request = metastore_federation.ListFederationsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_federations] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListFederationsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_federation( + self, + request: Optional[ + Union[metastore_federation.GetFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> metastore_federation.Federation: + r"""Gets the details of a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + def sample_get_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = client.get_federation(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1beta.types.GetFederationRequest, dict]): + The request object. Request message for GetFederation. + name (str): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.metastore_v1beta.types.Federation: + Represents a federation of multiple + backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.GetFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.GetFederationRequest): + request = metastore_federation.GetFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def create_federation( + self, + request: Optional[ + Union[metastore_federation.CreateFederationRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + federation: Optional[metastore_federation.Federation] = None, + federation_id: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Creates a metastore federation in a project and + location. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + def sample_create_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1beta.types.CreateFederationRequest, dict]): + The request object. Request message for + CreateFederation. + parent (str): + Required. The relative resource name of the location in + which to create a federation service, in the following + form: + + ``projects/{project_number}/locations/{location_id}``. + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation (google.cloud.metastore_v1beta.types.Federation): + Required. The Metastore Federation to create. The + ``name`` field is ignored. The ID of the created + metastore federation must be provided in the request's + ``federation_id`` field. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + federation_id (str): + Required. The ID of the metastore + federation, which is used as the final + component of the metastore federation's + name. + This value must be between 2 and 63 + characters long inclusive, begin with a + letter, end with a letter or number, and + consist of alpha-numeric ASCII + characters or hyphens. + + This corresponds to the ``federation_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1beta.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, federation, federation_id]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.CreateFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.CreateFederationRequest): + request = metastore_federation.CreateFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if federation is not None: + request.federation = federation + if federation_id is not None: + request.federation_id = federation_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def update_federation( + self, + request: Optional[ + Union[metastore_federation.UpdateFederationRequest, dict] + ] = None, + *, + federation: Optional[metastore_federation.Federation] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Updates the fields of a federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + def sample_update_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1beta.types.UpdateFederationRequest, dict]): + The request object. Request message for + UpdateFederation. + federation (google.cloud.metastore_v1beta.types.Federation): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified + in ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + + This corresponds to the ``federation`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are + relative to the resource (not to the full request). A + field is overwritten if it is in the mask. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.metastore_v1beta.types.Federation` + Represents a federation of multiple backend metastores. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([federation, update_mask]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.UpdateFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.UpdateFederationRequest): + request = metastore_federation.UpdateFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if federation is not None: + request.federation = federation + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("federation.name", request.federation.name),) + ), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + metastore_federation.Federation, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def delete_federation( + self, + request: Optional[ + Union[metastore_federation.DeleteFederationRequest, dict] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Deletes a single federation. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import metastore_v1beta + + def sample_delete_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.metastore_v1beta.types.DeleteFederationRequest, dict]): + The request object. Request message for + DeleteFederation. + name (str): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated + empty messages in your APIs. A typical example is to + use it as the request or the response type of an API + method. For instance: + + service Foo { + rpc Bar(google.protobuf.Empty) returns + (google.protobuf.Empty); + + } + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a metastore_federation.DeleteFederationRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, metastore_federation.DeleteFederationRequest): + request = metastore_federation.DeleteFederationRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete_federation] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + empty_pb2.Empty, + metadata_type=metastore.OperationMetadata, + ) + + # Done; return the response. + return response + + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + """Releases underlying transport's resources. + + .. warning:: + ONLY use as a context manager if the transport is NOT shared + with other clients! Exiting the with block will CLOSE the transport + and may cause errors in other clients! + """ + self.transport.close() + + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-dataproc-metastore", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +__all__ = ("DataprocMetastoreFederationClient",) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/pagers.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/pagers.py new file mode 100644 index 000000000000..56f983551383 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/pagers.py @@ -0,0 +1,157 @@ +# -*- 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. +# +from typing import ( + Any, + AsyncIterator, + Awaitable, + Callable, + Iterator, + Optional, + Sequence, + Tuple, +) + +from google.cloud.metastore_v1beta.types import metastore_federation + + +class ListFederationsPager: + """A pager for iterating through ``list_federations`` requests. + + This class thinly wraps an initial + :class:`google.cloud.metastore_v1beta.types.ListFederationsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``federations`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListFederations`` requests and continue to iterate + through the ``federations`` field on the + corresponding responses. + + All the usual :class:`google.cloud.metastore_v1beta.types.ListFederationsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., metastore_federation.ListFederationsResponse], + request: metastore_federation.ListFederationsRequest, + response: metastore_federation.ListFederationsResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.metastore_v1beta.types.ListFederationsRequest): + The initial request object. + response (google.cloud.metastore_v1beta.types.ListFederationsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = metastore_federation.ListFederationsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[metastore_federation.ListFederationsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[metastore_federation.Federation]: + for page in self.pages: + yield from page.federations + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListFederationsAsyncPager: + """A pager for iterating through ``list_federations`` requests. + + This class thinly wraps an initial + :class:`google.cloud.metastore_v1beta.types.ListFederationsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``federations`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListFederations`` requests and continue to iterate + through the ``federations`` field on the + corresponding responses. + + All the usual :class:`google.cloud.metastore_v1beta.types.ListFederationsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., Awaitable[metastore_federation.ListFederationsResponse]], + request: metastore_federation.ListFederationsRequest, + response: metastore_federation.ListFederationsResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.metastore_v1beta.types.ListFederationsRequest): + The initial request object. + response (google.cloud.metastore_v1beta.types.ListFederationsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = metastore_federation.ListFederationsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages( + self, + ) -> AsyncIterator[metastore_federation.ListFederationsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + + def __aiter__(self) -> AsyncIterator[metastore_federation.Federation]: + async def async_generator(): + async for page in self.pages: + for response in page.federations: + yield response + + return async_generator() + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/__init__.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/__init__.py new file mode 100644 index 000000000000..7c7e97819d4b --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/__init__.py @@ -0,0 +1,34 @@ +# -*- 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. +# +from collections import OrderedDict +from typing import Dict, Type + +from .base import DataprocMetastoreFederationTransport +from .grpc import DataprocMetastoreFederationGrpcTransport +from .grpc_asyncio import DataprocMetastoreFederationGrpcAsyncIOTransport + +# Compile a registry of transports. +_transport_registry = ( + OrderedDict() +) # type: Dict[str, Type[DataprocMetastoreFederationTransport]] +_transport_registry["grpc"] = DataprocMetastoreFederationGrpcTransport +_transport_registry["grpc_asyncio"] = DataprocMetastoreFederationGrpcAsyncIOTransport + +__all__ = ( + "DataprocMetastoreFederationTransport", + "DataprocMetastoreFederationGrpcTransport", + "DataprocMetastoreFederationGrpcAsyncIOTransport", +) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/base.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/base.py new file mode 100644 index 000000000000..f8ee7a5f8146 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/base.py @@ -0,0 +1,227 @@ +# -*- 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. +# +import abc +from typing import Awaitable, Callable, Dict, Optional, Sequence, Union + +import google.api_core +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1, operations_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.longrunning import operations_pb2 # type: ignore +from google.oauth2 import service_account # type: ignore +import pkg_resources + +from google.cloud.metastore_v1beta.types import metastore_federation + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-dataproc-metastore", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +class DataprocMetastoreFederationTransport(abc.ABC): + """Abstract transport class for DataprocMetastoreFederation.""" + + AUTH_SCOPES = ("https://www.googleapis.com/auth/cloud-platform",) + + DEFAULT_HOST: str = "metastore.googleapis.com" + + def __init__( + self, + *, + host: str = DEFAULT_HOST, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = 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, + **kwargs, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A list of scopes. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + """ + + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} + + # Save the scopes. + self._scopes = scopes + + # If no credentials are provided, then determine the appropriate + # defaults. + if credentials and credentials_file: + raise core_exceptions.DuplicateCredentialArgs( + "'credentials_file' and 'credentials' are mutually exclusive" + ) + + if credentials_file is not None: + credentials, _ = google.auth.load_credentials_from_file( + credentials_file, **scopes_kwargs, quota_project_id=quota_project_id + ) + elif credentials is None: + credentials, _ = google.auth.default( + **scopes_kwargs, quota_project_id=quota_project_id + ) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience( + api_audience if api_audience else host + ) + + # If the credentials are service account credentials, then always try to use self signed JWT. + if ( + always_use_jwt_access + and isinstance(credentials, service_account.Credentials) + and hasattr(service_account.Credentials, "with_always_use_jwt_access") + ): + credentials = credentials.with_always_use_jwt_access(True) + + # Save the credentials. + self._credentials = credentials + + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + + def _prep_wrapped_messages(self, client_info): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.list_federations: gapic_v1.method.wrap_method( + self.list_federations, + default_timeout=None, + client_info=client_info, + ), + self.get_federation: gapic_v1.method.wrap_method( + self.get_federation, + default_timeout=None, + client_info=client_info, + ), + self.create_federation: gapic_v1.method.wrap_method( + self.create_federation, + default_timeout=None, + client_info=client_info, + ), + self.update_federation: gapic_v1.method.wrap_method( + self.update_federation, + default_timeout=None, + client_info=client_info, + ), + self.delete_federation: gapic_v1.method.wrap_method( + self.delete_federation, + default_timeout=None, + client_info=client_info, + ), + } + + def close(self): + """Closes resources associated with the transport. + + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! + """ + raise NotImplementedError() + + @property + def operations_client(self): + """Return the client designed to process long-running operations.""" + raise NotImplementedError() + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + Union[ + metastore_federation.ListFederationsResponse, + Awaitable[metastore_federation.ListFederationsResponse], + ], + ]: + raise NotImplementedError() + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], + Union[ + metastore_federation.Federation, Awaitable[metastore_federation.Federation] + ], + ]: + raise NotImplementedError() + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def kind(self) -> str: + raise NotImplementedError() + + +__all__ = ("DataprocMetastoreFederationTransport",) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/grpc.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/grpc.py new file mode 100644 index 000000000000..3516286fcf45 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/grpc.py @@ -0,0 +1,411 @@ +# -*- 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. +# +from typing import Callable, Dict, Optional, Sequence, Tuple, Union +import warnings + +from google.api_core import gapic_v1, grpc_helpers, operations_v1 +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.longrunning import operations_pb2 # type: ignore +import grpc # type: ignore + +from google.cloud.metastore_v1beta.types import metastore_federation + +from .base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport + + +class DataprocMetastoreFederationGrpcTransport(DataprocMetastoreFederationTransport): + """gRPC backend transport for DataprocMetastoreFederation. + + Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _stubs: Dict[str, Callable] + + def __init__( + self, + *, + host: str = "metastore.googleapis.com", + 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, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + channel (Optional[grpc.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @classmethod + def create_channel( + cls, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> grpc.Channel: + """Create and return a gRPC channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + grpc.Channel: A gRPC channel object. + + Raises: + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + + return grpc_helpers.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs, + ) + + @property + def grpc_channel(self) -> grpc.Channel: + """Return the channel designed to connect to this service.""" + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsClient(self.grpc_channel) + + # Return the client from cache. + return self._operations_client + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + metastore_federation.ListFederationsResponse, + ]: + r"""Return a callable for the list federations method over gRPC. + + Lists federations in a project and location. + + Returns: + Callable[[~.ListFederationsRequest], + ~.ListFederationsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_federations" not in self._stubs: + self._stubs["list_federations"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/ListFederations", + request_serializer=metastore_federation.ListFederationsRequest.serialize, + response_deserializer=metastore_federation.ListFederationsResponse.deserialize, + ) + return self._stubs["list_federations"] + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], metastore_federation.Federation + ]: + r"""Return a callable for the get federation method over gRPC. + + Gets the details of a single federation. + + Returns: + Callable[[~.GetFederationRequest], + ~.Federation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_federation" not in self._stubs: + self._stubs["get_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/GetFederation", + request_serializer=metastore_federation.GetFederationRequest.serialize, + response_deserializer=metastore_federation.Federation.deserialize, + ) + return self._stubs["get_federation"] + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the create federation method over gRPC. + + Creates a metastore federation in a project and + location. + + Returns: + Callable[[~.CreateFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "create_federation" not in self._stubs: + self._stubs["create_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/CreateFederation", + request_serializer=metastore_federation.CreateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["create_federation"] + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the update federation method over gRPC. + + Updates the fields of a federation. + + Returns: + Callable[[~.UpdateFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_federation" not in self._stubs: + self._stubs["update_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/UpdateFederation", + request_serializer=metastore_federation.UpdateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["update_federation"] + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], operations_pb2.Operation + ]: + r"""Return a callable for the delete federation method over gRPC. + + Deletes a single federation. + + Returns: + Callable[[~.DeleteFederationRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_federation" not in self._stubs: + self._stubs["delete_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/DeleteFederation", + request_serializer=metastore_federation.DeleteFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["delete_federation"] + + def close(self): + self.grpc_channel.close() + + @property + def kind(self) -> str: + return "grpc" + + +__all__ = ("DataprocMetastoreFederationGrpcTransport",) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/grpc_asyncio.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/grpc_asyncio.py new file mode 100644 index 000000000000..cf942e489ad8 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/services/dataproc_metastore_federation/transports/grpc_asyncio.py @@ -0,0 +1,418 @@ +# -*- 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. +# +from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union +import warnings + +from google.api_core import gapic_v1, grpc_helpers_async, operations_v1 +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.longrunning import operations_pb2 # type: ignore +import grpc # type: ignore +from grpc.experimental import aio # type: ignore + +from google.cloud.metastore_v1beta.types import metastore_federation + +from .base import DEFAULT_CLIENT_INFO, DataprocMetastoreFederationTransport +from .grpc import DataprocMetastoreFederationGrpcTransport + + +class DataprocMetastoreFederationGrpcAsyncIOTransport( + DataprocMetastoreFederationTransport +): + """gRPC AsyncIO backend transport for DataprocMetastoreFederation. + + Configures and manages metastore federation services. Dataproc + Metastore Federation Service allows federating a collection of + backend metastores like BigQuery, Dataplex Lakes, and other Dataproc + Metastores. The Federation Service exposes a gRPC URL through which + metadata from the backend metastores are served at query time. + + The Dataproc Metastore Federation API defines the following resource + model: + + - The service works with a collection of Google Cloud projects. + - Each project has a collection of available locations. + - Each location has a collection of federations. + - Dataproc Metastore Federations are resources with names of the + form: + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _grpc_channel: aio.Channel + _stubs: Dict[str, Callable] = {} + + @classmethod + def create_channel( + cls, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs, + ) -> aio.Channel: + """Create and return a gRPC AsyncIO channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + aio.Channel: A gRPC AsyncIO channel object. + """ + + return grpc_helpers_async.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs, + ) + + def __init__( + self, + *, + host: str = "metastore.googleapis.com", + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = 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, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + channel (Optional[aio.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsAsyncClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @property + def grpc_channel(self) -> aio.Channel: + """Create the channel designed to connect to this service. + + This property caches on the instance; repeated calls return + the same channel. + """ + # Return the channel from cache. + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsAsyncClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsAsyncClient( + self.grpc_channel + ) + + # Return the client from cache. + return self._operations_client + + @property + def list_federations( + self, + ) -> Callable[ + [metastore_federation.ListFederationsRequest], + Awaitable[metastore_federation.ListFederationsResponse], + ]: + r"""Return a callable for the list federations method over gRPC. + + Lists federations in a project and location. + + Returns: + Callable[[~.ListFederationsRequest], + Awaitable[~.ListFederationsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_federations" not in self._stubs: + self._stubs["list_federations"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/ListFederations", + request_serializer=metastore_federation.ListFederationsRequest.serialize, + response_deserializer=metastore_federation.ListFederationsResponse.deserialize, + ) + return self._stubs["list_federations"] + + @property + def get_federation( + self, + ) -> Callable[ + [metastore_federation.GetFederationRequest], + Awaitable[metastore_federation.Federation], + ]: + r"""Return a callable for the get federation method over gRPC. + + Gets the details of a single federation. + + Returns: + Callable[[~.GetFederationRequest], + Awaitable[~.Federation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_federation" not in self._stubs: + self._stubs["get_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/GetFederation", + request_serializer=metastore_federation.GetFederationRequest.serialize, + response_deserializer=metastore_federation.Federation.deserialize, + ) + return self._stubs["get_federation"] + + @property + def create_federation( + self, + ) -> Callable[ + [metastore_federation.CreateFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the create federation method over gRPC. + + Creates a metastore federation in a project and + location. + + Returns: + Callable[[~.CreateFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "create_federation" not in self._stubs: + self._stubs["create_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/CreateFederation", + request_serializer=metastore_federation.CreateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["create_federation"] + + @property + def update_federation( + self, + ) -> Callable[ + [metastore_federation.UpdateFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the update federation method over gRPC. + + Updates the fields of a federation. + + Returns: + Callable[[~.UpdateFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_federation" not in self._stubs: + self._stubs["update_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/UpdateFederation", + request_serializer=metastore_federation.UpdateFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["update_federation"] + + @property + def delete_federation( + self, + ) -> Callable[ + [metastore_federation.DeleteFederationRequest], + Awaitable[operations_pb2.Operation], + ]: + r"""Return a callable for the delete federation method over gRPC. + + Deletes a single federation. + + Returns: + Callable[[~.DeleteFederationRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_federation" not in self._stubs: + self._stubs["delete_federation"] = self.grpc_channel.unary_unary( + "/google.cloud.metastore.v1beta.DataprocMetastoreFederation/DeleteFederation", + request_serializer=metastore_federation.DeleteFederationRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["delete_federation"] + + def close(self): + return self.grpc_channel.close() + + +__all__ = ("DataprocMetastoreFederationGrpcAsyncIOTransport",) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/types/__init__.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/types/__init__.py index 739348662cdf..f98016dadb9f 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/types/__init__.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/types/__init__.py @@ -14,20 +14,24 @@ # limitations under the License. # from .metastore import ( + AuxiliaryVersionConfig, Backup, CreateBackupRequest, CreateMetadataImportRequest, CreateServiceRequest, DatabaseDumpSpec, DataCatalogConfig, + DataplexConfig, DeleteBackupRequest, DeleteServiceRequest, + EncryptionConfig, ExportMetadataRequest, GetBackupRequest, GetMetadataImportRequest, GetServiceRequest, HiveMetastoreConfig, KerberosConfig, + Lake, ListBackupsRequest, ListBackupsResponse, ListMetadataImportsRequest, @@ -40,30 +44,46 @@ MetadataImport, MetadataIntegration, MetadataManagementActivity, + NetworkConfig, OperationMetadata, Restore, RestoreServiceRequest, Secret, Service, + TelemetryConfig, UpdateMetadataImportRequest, UpdateServiceRequest, ) +from .metastore_federation import ( + BackendMetastore, + CreateFederationRequest, + DeleteFederationRequest, + Federation, + GetFederationRequest, + ListFederationsRequest, + ListFederationsResponse, + UpdateFederationRequest, +) __all__ = ( + "AuxiliaryVersionConfig", "Backup", "CreateBackupRequest", "CreateMetadataImportRequest", "CreateServiceRequest", "DatabaseDumpSpec", "DataCatalogConfig", + "DataplexConfig", "DeleteBackupRequest", "DeleteServiceRequest", + "EncryptionConfig", "ExportMetadataRequest", "GetBackupRequest", "GetMetadataImportRequest", "GetServiceRequest", "HiveMetastoreConfig", "KerberosConfig", + "Lake", "ListBackupsRequest", "ListBackupsResponse", "ListMetadataImportsRequest", @@ -76,11 +96,21 @@ "MetadataImport", "MetadataIntegration", "MetadataManagementActivity", + "NetworkConfig", "OperationMetadata", "Restore", "RestoreServiceRequest", "Secret", "Service", + "TelemetryConfig", "UpdateMetadataImportRequest", "UpdateServiceRequest", + "BackendMetastore", + "CreateFederationRequest", + "DeleteFederationRequest", + "Federation", + "GetFederationRequest", + "ListFederationsRequest", + "ListFederationsResponse", + "UpdateFederationRequest", ) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/types/metastore.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/types/metastore.py index 9419e3110be5..e3328b9f4cb7 100644 --- a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/types/metastore.py +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/types/metastore.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from typing import MutableMapping, MutableSequence + 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 @@ -25,10 +27,16 @@ "Service", "MetadataIntegration", "DataCatalogConfig", + "DataplexConfig", + "Lake", "MaintenanceWindow", "HiveMetastoreConfig", "KerberosConfig", "Secret", + "EncryptionConfig", + "AuxiliaryVersionConfig", + "NetworkConfig", + "TelemetryConfig", "MetadataManagementActivity", "MetadataImport", "MetadataExport", @@ -73,7 +81,7 @@ class Service(proto.Message): This field is a member of `oneof`_ ``metastore_config``. name (str): Immutable. The relative resource name of the metastore - service, of the form: + service, in the following format: ``projects/{project_number}/locations/{location_id}/services/{service_id}``. create_time (google.protobuf.timestamp_pb2.Timestamp): @@ -82,7 +90,7 @@ class Service(proto.Message): update_time (google.protobuf.timestamp_pb2.Timestamp): Output only. The time when the metastore service was last updated. - labels (Mapping[str, str]): + labels (MutableMapping[str, str]): User-defined labels for the metastore service. network (str): @@ -118,7 +126,9 @@ class Service(proto.Message): The one hour maintenance window of the metastore service. This specifies when the service can be restarted for maintenance - purposes in UTC time. + purposes in UTC time. Maintenance window is not + needed for services with the SPANNER database + type. uid (str): Output only. The globally unique resource identifier of the metastore service. @@ -128,6 +138,20 @@ class Service(proto.Message): release_channel (google.cloud.metastore_v1beta.types.Service.ReleaseChannel): Immutable. The release channel of the service. If unspecified, defaults to ``STABLE``. + encryption_config (google.cloud.metastore_v1beta.types.EncryptionConfig): + Immutable. Information used to configure the + Dataproc Metastore service to encrypt customer + data at rest. Cannot be updated. + network_config (google.cloud.metastore_v1beta.types.NetworkConfig): + The configuration specifying the network + settings for the Dataproc Metastore service. + database_type (google.cloud.metastore_v1beta.types.Service.DatabaseType): + Immutable. The database type that the + Metastore service stores its data. + telemetry_config (google.cloud.metastore_v1beta.types.TelemetryConfig): + The configuration specifying telemetry settings for the + Dataproc Metastore service. If unspecified defaults to + ``JSON``. """ class State(proto.Enum): @@ -157,85 +181,111 @@ class ReleaseChannel(proto.Enum): CANARY = 1 STABLE = 2 - hive_metastore_config = proto.Field( + class DatabaseType(proto.Enum): + r"""The backend database type for the metastore service.""" + DATABASE_TYPE_UNSPECIFIED = 0 + MYSQL = 1 + SPANNER = 2 + + hive_metastore_config: "HiveMetastoreConfig" = proto.Field( proto.MESSAGE, number=5, oneof="metastore_config", message="HiveMetastoreConfig", ) - 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, ) - update_time = proto.Field( + update_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - labels = proto.MapField( + labels: MutableMapping[str, str] = proto.MapField( proto.STRING, proto.STRING, number=4, ) - network = proto.Field( + network: str = proto.Field( proto.STRING, number=7, ) - endpoint_uri = proto.Field( + endpoint_uri: str = proto.Field( proto.STRING, number=8, ) - port = proto.Field( + port: int = proto.Field( proto.INT32, number=9, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=10, enum=State, ) - state_message = proto.Field( + state_message: str = proto.Field( proto.STRING, number=11, ) - artifact_gcs_uri = proto.Field( + artifact_gcs_uri: str = proto.Field( proto.STRING, number=12, ) - tier = proto.Field( + tier: Tier = proto.Field( proto.ENUM, number=13, enum=Tier, ) - metadata_integration = proto.Field( + metadata_integration: "MetadataIntegration" = proto.Field( proto.MESSAGE, number=14, message="MetadataIntegration", ) - maintenance_window = proto.Field( + maintenance_window: "MaintenanceWindow" = proto.Field( proto.MESSAGE, number=15, message="MaintenanceWindow", ) - uid = proto.Field( + uid: str = proto.Field( proto.STRING, number=16, ) - metadata_management_activity = proto.Field( + metadata_management_activity: "MetadataManagementActivity" = proto.Field( proto.MESSAGE, number=17, message="MetadataManagementActivity", ) - release_channel = proto.Field( + release_channel: ReleaseChannel = proto.Field( proto.ENUM, number=19, enum=ReleaseChannel, ) + encryption_config: "EncryptionConfig" = proto.Field( + proto.MESSAGE, + number=20, + message="EncryptionConfig", + ) + network_config: "NetworkConfig" = proto.Field( + proto.MESSAGE, + number=21, + message="NetworkConfig", + ) + database_type: DatabaseType = proto.Field( + proto.ENUM, + number=22, + enum=DatabaseType, + ) + telemetry_config: "TelemetryConfig" = proto.Field( + proto.MESSAGE, + number=23, + message="TelemetryConfig", + ) class MetadataIntegration(proto.Message): @@ -246,13 +296,21 @@ class MetadataIntegration(proto.Message): data_catalog_config (google.cloud.metastore_v1beta.types.DataCatalogConfig): The integration config for the Data Catalog service. + dataplex_config (google.cloud.metastore_v1beta.types.DataplexConfig): + The integration config for the Dataplex + service. """ - data_catalog_config = proto.Field( + data_catalog_config: "DataCatalogConfig" = proto.Field( proto.MESSAGE, number=1, message="DataCatalogConfig", ) + dataplex_config: "DataplexConfig" = proto.Field( + proto.MESSAGE, + number=2, + message="DataplexConfig", + ) class DataCatalogConfig(proto.Message): @@ -267,12 +325,47 @@ class DataCatalogConfig(proto.Message): Catalog. """ - enabled = proto.Field( + enabled: bool = proto.Field( proto.BOOL, number=2, ) +class DataplexConfig(proto.Message): + r"""Specifies how metastore metadata should be integrated with + the Dataplex service. + + Attributes: + lake_resources (MutableMapping[str, google.cloud.metastore_v1beta.types.Lake]): + A reference to the Lake resources that this metastore + service is attached to. The key is the lake resource name. + Example: + ``projects/{project_number}/locations/{location_id}/lakes/{lake_id}``. + """ + + lake_resources: MutableMapping[str, "Lake"] = proto.MapField( + proto.STRING, + proto.MESSAGE, + number=1, + message="Lake", + ) + + +class Lake(proto.Message): + r"""Represents a Lake resource + + Attributes: + name (str): + The Lake resource name. Example: + ``projects/{project_number}/locations/{location_id}/lakes/{lake_id}`` + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + class MaintenanceWindow(proto.Message): r"""Maintenance window. This specifies when Dataproc Metastore may perform system maintenance operation to the service. @@ -285,12 +378,12 @@ class MaintenanceWindow(proto.Message): The day of week, when the window starts. """ - hour_of_day = proto.Field( + hour_of_day: wrappers_pb2.Int32Value = proto.Field( proto.MESSAGE, number=1, message=wrappers_pb2.Int32Value, ) - day_of_week = proto.Field( + day_of_week: dayofweek_pb2.DayOfWeek = proto.Field( proto.ENUM, number=2, enum=dayofweek_pb2.DayOfWeek, @@ -304,11 +397,13 @@ class HiveMetastoreConfig(proto.Message): Attributes: version (str): Immutable. The Hive metastore schema version. - config_overrides (Mapping[str, str]): + config_overrides (MutableMapping[str, str]): A mapping of Hive metastore configuration key-value pairs to apply to the Hive metastore (configured in ``hive-site.xml``). The mappings override system defaults - (some keys cannot be overridden). + (some keys cannot be overridden). These overrides are also + applied to auxiliary versions and can be further customized + in the auxiliary version's ``AuxiliaryVersionConfig``. kerberos_config (google.cloud.metastore_v1beta.types.KerberosConfig): Information used to configure the Hive metastore service as a service principal in a Kerberos realm. To disable @@ -316,22 +411,55 @@ class HiveMetastoreConfig(proto.Message): field's path (``hive_metastore_config.kerberos_config``) in the request's ``update_mask`` while omitting this field from the request's ``service``. + endpoint_protocol (google.cloud.metastore_v1beta.types.HiveMetastoreConfig.EndpointProtocol): + The protocol to use for the metastore service endpoint. If + unspecified, defaults to ``THRIFT``. + auxiliary_versions (MutableMapping[str, google.cloud.metastore_v1beta.types.AuxiliaryVersionConfig]): + A mapping of Hive metastore version to the auxiliary version + configuration. When specified, a secondary Hive metastore + service is created along with the primary service. All + auxiliary versions must be less than the service's primary + version. The key is the auxiliary service name and it must + match the regular expression `a-z <[-a-z0-9]*[a-z0-9]>`__?. + This means that the first character must be a lowercase + letter, and all the following characters must be hyphens, + lowercase letters, or digits, except the last character, + which cannot be a hyphen. """ - version = proto.Field( + class EndpointProtocol(proto.Enum): + r"""Protocols available for serving the metastore service + endpoint. + """ + ENDPOINT_PROTOCOL_UNSPECIFIED = 0 + THRIFT = 1 + GRPC = 2 + + version: str = proto.Field( proto.STRING, number=1, ) - config_overrides = proto.MapField( + config_overrides: MutableMapping[str, str] = proto.MapField( proto.STRING, proto.STRING, number=2, ) - kerberos_config = proto.Field( + kerberos_config: "KerberosConfig" = proto.Field( proto.MESSAGE, number=3, message="KerberosConfig", ) + endpoint_protocol: EndpointProtocol = proto.Field( + proto.ENUM, + number=4, + enum=EndpointProtocol, + ) + auxiliary_versions: MutableMapping[str, "AuxiliaryVersionConfig"] = proto.MapField( + proto.STRING, + proto.MESSAGE, + number=5, + message="AuxiliaryVersionConfig", + ) class KerberosConfig(proto.Message): @@ -349,20 +477,20 @@ class KerberosConfig(proto.Message): krb5_config_gcs_uri (str): A Cloud Storage URI that specifies the path to a krb5.conf file. It is of the form - gs://{bucket_name}/path/to/krb5.conf, although the file does - not need to be named krb5.conf explicitly. + ``gs://{bucket_name}/path/to/krb5.conf``, although the file + does not need to be named krb5.conf explicitly. """ - keytab = proto.Field( + keytab: "Secret" = proto.Field( proto.MESSAGE, number=1, message="Secret", ) - principal = proto.Field( + principal: str = proto.Field( proto.STRING, number=2, ) - krb5_config_gcs_uri = proto.Field( + krb5_config_gcs_uri: str = proto.Field( proto.STRING, number=3, ) @@ -383,31 +511,160 @@ class Secret(proto.Message): This field is a member of `oneof`_ ``value``. """ - cloud_secret = proto.Field( + cloud_secret: str = proto.Field( proto.STRING, number=2, oneof="value", ) +class EncryptionConfig(proto.Message): + r"""Encryption settings for the service. + + Attributes: + kms_key (str): + The fully qualified customer provided Cloud KMS key name to + use for customer data encryption, in the following form: + + ``projects/{project_number}/locations/{location_id}/keyRings/{key_ring_id}/cryptoKeys/{crypto_key_id}``. + """ + + kms_key: str = proto.Field( + proto.STRING, + number=1, + ) + + +class AuxiliaryVersionConfig(proto.Message): + r"""Configuration information for the auxiliary service versions. + + Attributes: + version (str): + The Hive metastore version of the auxiliary + service. It must be less than the primary Hive + metastore service's version. + config_overrides (MutableMapping[str, str]): + A mapping of Hive metastore configuration key-value pairs to + apply to the auxiliary Hive metastore (configured in + ``hive-site.xml``) in addition to the primary version's + overrides. If keys are present in both the auxiliary + version's overrides and the primary version's overrides, the + value from the auxiliary version's overrides takes + precedence. + network_config (google.cloud.metastore_v1beta.types.NetworkConfig): + Output only. The network configuration + contains the endpoint URI(s) of the auxiliary + Hive metastore service. + """ + + version: str = proto.Field( + proto.STRING, + number=1, + ) + config_overrides: MutableMapping[str, str] = proto.MapField( + proto.STRING, + proto.STRING, + number=2, + ) + network_config: "NetworkConfig" = proto.Field( + proto.MESSAGE, + number=3, + message="NetworkConfig", + ) + + +class NetworkConfig(proto.Message): + r"""Network configuration for the Dataproc Metastore service. + + Attributes: + consumers (MutableSequence[google.cloud.metastore_v1beta.types.NetworkConfig.Consumer]): + Immutable. The consumer-side network + configuration for the Dataproc Metastore + instance. + """ + + class Consumer(proto.Message): + r"""Contains information of the customer's network + configurations. + + + .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields + + Attributes: + subnetwork (str): + Immutable. The subnetwork of the customer project from which + an IP address is reserved and used as the Dataproc Metastore + service's endpoint. It is accessible to hosts in the subnet + and to all hosts in a subnet in the same region and same + network. There must be at least one IP address available in + the subnet's primary range. The subnet is specified in the + following form: + + \`projects/{project_number}/regions/{region_id}/subnetworks/{subnetwork_id} + + This field is a member of `oneof`_ ``vpc_resource``. + endpoint_uri (str): + Output only. The URI of the endpoint used to + access the metastore service. + """ + + subnetwork: str = proto.Field( + proto.STRING, + number=1, + oneof="vpc_resource", + ) + endpoint_uri: str = proto.Field( + proto.STRING, + number=3, + ) + + consumers: MutableSequence[Consumer] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=Consumer, + ) + + +class TelemetryConfig(proto.Message): + r"""Telemetry Configuration for the Dataproc Metastore service. + + Attributes: + log_format (google.cloud.metastore_v1beta.types.TelemetryConfig.LogFormat): + The output format of the Dataproc Metastore + service's logs. + """ + + class LogFormat(proto.Enum): + r"""""" + LOG_FORMAT_UNSPECIFIED = 0 + LEGACY = 1 + JSON = 2 + + log_format: LogFormat = proto.Field( + proto.ENUM, + number=1, + enum=LogFormat, + ) + + class MetadataManagementActivity(proto.Message): r"""The metadata management activities of the metastore service. Attributes: - metadata_exports (Sequence[google.cloud.metastore_v1beta.types.MetadataExport]): + metadata_exports (MutableSequence[google.cloud.metastore_v1beta.types.MetadataExport]): Output only. The latest metadata exports of the metastore service. - restores (Sequence[google.cloud.metastore_v1beta.types.Restore]): + restores (MutableSequence[google.cloud.metastore_v1beta.types.Restore]): Output only. The latest restores of the metastore service. """ - metadata_exports = proto.RepeatedField( + metadata_exports: MutableSequence["MetadataExport"] = proto.RepeatedField( proto.MESSAGE, number=1, message="MetadataExport", ) - restores = proto.RepeatedField( + restores: MutableSequence["Restore"] = proto.RepeatedField( proto.MESSAGE, number=2, message="Restore", @@ -434,10 +691,13 @@ class MetadataImport(proto.Message): The description of the metadata import. create_time (google.protobuf.timestamp_pb2.Timestamp): Output only. The time when the metadata - import was created. + import was started. update_time (google.protobuf.timestamp_pb2.Timestamp): Output only. The time when the metadata import was last updated. + end_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The time when the metadata + import finished. state (google.cloud.metastore_v1beta.types.MetadataImport.State): Output only. The current state of the metadata import. @@ -474,50 +734,55 @@ class DatabaseType(proto.Enum): DATABASE_TYPE_UNSPECIFIED = 0 MYSQL = 1 - database_type = proto.Field( + database_type: "MetadataImport.DatabaseDump.DatabaseType" = proto.Field( proto.ENUM, number=1, enum="MetadataImport.DatabaseDump.DatabaseType", ) - gcs_uri = proto.Field( + gcs_uri: str = proto.Field( proto.STRING, number=2, ) - source_database = proto.Field( + source_database: str = proto.Field( proto.STRING, number=3, ) - type_ = proto.Field( + type_: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=4, enum="DatabaseDumpSpec.Type", ) - database_dump = proto.Field( + database_dump: DatabaseDump = proto.Field( proto.MESSAGE, number=6, oneof="metadata", message=DatabaseDump, ) - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - description = proto.Field( + description: str = proto.Field( proto.STRING, number=2, ) - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - update_time = proto.Field( + update_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=4, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=7, + message=timestamp_pb2.Timestamp, + ) + state: State = proto.Field( proto.ENUM, number=5, enum=State, @@ -556,27 +821,27 @@ class State(proto.Enum): FAILED = 3 CANCELLED = 4 - destination_gcs_uri = proto.Field( + destination_gcs_uri: str = proto.Field( proto.STRING, number=4, oneof="destination", ) - start_time = proto.Field( + start_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=3, enum=State, ) - database_dump_type = proto.Field( + database_dump_type: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=5, enum="DatabaseDumpSpec.Type", @@ -605,6 +870,9 @@ class Backup(proto.Message): the time of backup. description (str): The description of the backup. + restoring_services (MutableSequence[str]): + Output only. Services that are restoring from + the backup. """ class State(proto.Enum): @@ -614,35 +882,40 @@ class State(proto.Enum): DELETING = 2 ACTIVE = 3 FAILED = 4 + RESTORING = 5 - 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, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=3, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=4, enum=State, ) - service_revision = proto.Field( + service_revision: "Service" = proto.Field( proto.MESSAGE, number=5, message="Service", ) - description = proto.Field( + description: str = proto.Field( proto.STRING, number=6, ) + restoring_services: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=7, + ) class Restore(proto.Message): @@ -661,7 +934,7 @@ class Restore(proto.Message): Output only. The relative resource name of the metastore service backup to restore from, in the following form: - ``projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}`` + ``projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}``. type_ (google.cloud.metastore_v1beta.types.Restore.RestoreType): Output only. The type of restore. details (str): @@ -679,36 +952,36 @@ class State(proto.Enum): CANCELLED = 4 class RestoreType(proto.Enum): - r"""The type of restore.""" + r"""The type of restore. If unspecified, defaults to ``METADATA_ONLY``.""" RESTORE_TYPE_UNSPECIFIED = 0 FULL = 1 METADATA_ONLY = 2 - start_time = proto.Field( + start_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - state = proto.Field( + state: State = proto.Field( proto.ENUM, number=3, enum=State, ) - backup = proto.Field( + backup: str = proto.Field( proto.STRING, number=4, ) - type_ = proto.Field( + type_: RestoreType = proto.Field( proto.ENUM, number=5, enum=RestoreType, ) - details = proto.Field( + details: str = proto.Field( proto.STRING, number=6, ) @@ -751,23 +1024,23 @@ class ListServicesRequest(proto.Message): order. """ - 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, ) @@ -778,13 +1051,13 @@ class ListServicesResponse(proto.Message): [DataprocMetastore.ListServices][google.cloud.metastore.v1beta.DataprocMetastore.ListServices]. Attributes: - services (Sequence[google.cloud.metastore_v1beta.types.Service]): + services (MutableSequence[google.cloud.metastore_v1beta.types.Service]): The services in the specified location. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -792,16 +1065,16 @@ class ListServicesResponse(proto.Message): def raw_page(self): return self - services = proto.RepeatedField( + services: MutableSequence["Service"] = proto.RepeatedField( proto.MESSAGE, number=1, message="Service", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -819,7 +1092,7 @@ class GetServiceRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -865,20 +1138,20 @@ class CreateServiceRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - service_id = proto.Field( + service_id: str = proto.Field( proto.STRING, number=2, ) - service = proto.Field( + service: "Service" = proto.Field( proto.MESSAGE, number=3, message="Service", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -920,17 +1193,17 @@ class UpdateServiceRequest(proto.Message): supported. """ - update_mask = proto.Field( + update_mask: field_mask_pb2.FieldMask = proto.Field( proto.MESSAGE, number=1, message=field_mask_pb2.FieldMask, ) - service = proto.Field( + service: "Service" = proto.Field( proto.MESSAGE, number=2, message="Service", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) @@ -964,11 +1237,11 @@ class DeleteServiceRequest(proto.Message): supported. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=2, ) @@ -1011,23 +1284,23 @@ class ListMetadataImportsRequest(proto.Message): order. """ - 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, ) @@ -1038,13 +1311,13 @@ class ListMetadataImportsResponse(proto.Message): [DataprocMetastore.ListMetadataImports][google.cloud.metastore.v1beta.DataprocMetastore.ListMetadataImports]. Attributes: - metadata_imports (Sequence[google.cloud.metastore_v1beta.types.MetadataImport]): + metadata_imports (MutableSequence[google.cloud.metastore_v1beta.types.MetadataImport]): The imports in the specified service. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -1052,16 +1325,16 @@ class ListMetadataImportsResponse(proto.Message): def raw_page(self): return self - metadata_imports = proto.RepeatedField( + metadata_imports: MutableSequence["MetadataImport"] = proto.RepeatedField( proto.MESSAGE, number=1, message="MetadataImport", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -1079,7 +1352,7 @@ class GetMetadataImportRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}/metadataImports/{import_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -1094,7 +1367,7 @@ class CreateMetadataImportRequest(proto.Message): Required. The relative resource name of the service in which to create a metastore import, in the following form: - ``projects/{project_number}/locations/{location_id}/services/{service_id}`` + ``projects/{project_number}/locations/{location_id}/services/{service_id}``. metadata_import_id (str): Required. The ID of the metadata import, which is used as the final component of the @@ -1125,20 +1398,20 @@ class CreateMetadataImportRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - metadata_import_id = proto.Field( + metadata_import_id: str = proto.Field( proto.STRING, number=2, ) - metadata_import = proto.Field( + metadata_import: "MetadataImport" = proto.Field( proto.MESSAGE, number=3, message="MetadataImport", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1180,17 +1453,17 @@ class UpdateMetadataImportRequest(proto.Message): supported. """ - update_mask = proto.Field( + update_mask: field_mask_pb2.FieldMask = proto.Field( proto.MESSAGE, number=1, message=field_mask_pb2.FieldMask, ) - metadata_import = proto.Field( + metadata_import: "MetadataImport" = proto.Field( proto.MESSAGE, number=2, message="MetadataImport", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) @@ -1233,23 +1506,23 @@ class ListBackupsRequest(proto.Message): order. """ - 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, ) @@ -1260,13 +1533,13 @@ class ListBackupsResponse(proto.Message): [DataprocMetastore.ListBackups][google.cloud.metastore.v1beta.DataprocMetastore.ListBackups]. Attributes: - backups (Sequence[google.cloud.metastore_v1beta.types.Backup]): + backups (MutableSequence[google.cloud.metastore_v1beta.types.Backup]): The backups of the specified service. next_page_token (str): A token that can be sent as ``page_token`` to retrieve the next page. If this field is omitted, there are no subsequent pages. - unreachable (Sequence[str]): + unreachable (MutableSequence[str]): Locations that could not be reached. """ @@ -1274,16 +1547,16 @@ class ListBackupsResponse(proto.Message): def raw_page(self): return self - backups = proto.RepeatedField( + backups: MutableSequence["Backup"] = proto.RepeatedField( proto.MESSAGE, number=1, message="Backup", ) - next_page_token = proto.Field( + next_page_token: str = proto.Field( proto.STRING, number=2, ) - unreachable = proto.RepeatedField( + unreachable: MutableSequence[str] = proto.RepeatedField( proto.STRING, number=3, ) @@ -1301,7 +1574,7 @@ class GetBackupRequest(proto.Message): ``projects/{project_number}/locations/{location_id}/services/{service_id}/backups/{backup_id}``. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) @@ -1316,7 +1589,7 @@ class CreateBackupRequest(proto.Message): Required. The relative resource name of the service in which to create a backup of the following form: - ``projects/{project_number}/locations/{location_id}/services/{service_id}`` + ``projects/{project_number}/locations/{location_id}/services/{service_id}``. backup_id (str): Required. The ID of the backup, which is used as the final component of the backup's name. @@ -1347,20 +1620,20 @@ class CreateBackupRequest(proto.Message): supported. """ - parent = proto.Field( + parent: str = proto.Field( proto.STRING, number=1, ) - backup_id = proto.Field( + backup_id: str = proto.Field( proto.STRING, number=2, ) - backup = proto.Field( + backup: "Backup" = proto.Field( proto.MESSAGE, number=3, message="Backup", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1394,11 +1667,11 @@ class DeleteBackupRequest(proto.Message): supported. """ - name = proto.Field( + name: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=2, ) @@ -1423,7 +1696,7 @@ class ExportMetadataRequest(proto.Message): Required. The relative resource name of the metastore service to run export, in the following form: - ``projects/{project_id}/locations/{location_id}/services/{service_id}`` + ``projects/{project_id}/locations/{location_id}/services/{service_id}``. request_id (str): Optional. A request ID. Specify a unique request ID to allow the server to ignore the request if it has completed. The @@ -1445,20 +1718,20 @@ class ExportMetadataRequest(proto.Message): defaults to ``MYSQL``. """ - destination_gcs_folder = proto.Field( + destination_gcs_folder: str = proto.Field( proto.STRING, number=2, oneof="destination", ) - service = proto.Field( + service: str = proto.Field( proto.STRING, number=1, ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=3, ) - database_dump_type = proto.Field( + database_dump_type: "DatabaseDumpSpec.Type" = proto.Field( proto.ENUM, number=4, enum="DatabaseDumpSpec.Type", @@ -1473,12 +1746,12 @@ class RestoreServiceRequest(proto.Message): Required. The relative resource name of the metastore service to run restore, in the following form: - ``projects/{project_id}/locations/{location_id}/services/{service_id}`` + ``projects/{project_id}/locations/{location_id}/services/{service_id}``. backup (str): Required. The relative resource name of the metastore service backup to restore from, in the following form: - ``projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}`` + ``projects/{project_id}/locations/{location_id}/services/{service_id}/backups/{backup_id}``. restore_type (google.cloud.metastore_v1beta.types.Restore.RestoreType): Optional. The type of restore. If unspecified, defaults to ``METADATA_ONLY``. @@ -1500,20 +1773,20 @@ class RestoreServiceRequest(proto.Message): supported. """ - service = proto.Field( + service: str = proto.Field( proto.STRING, number=1, ) - backup = proto.Field( + backup: str = proto.Field( proto.STRING, number=2, ) - restore_type = proto.Field( + restore_type: "Restore.RestoreType" = proto.Field( proto.ENUM, number=3, enum="Restore.RestoreType", ) - request_id = proto.Field( + request_id: str = proto.Field( proto.STRING, number=4, ) @@ -1549,33 +1822,33 @@ class OperationMetadata(proto.Message): operation. """ - create_time = proto.Field( + create_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=1, message=timestamp_pb2.Timestamp, ) - end_time = proto.Field( + end_time: timestamp_pb2.Timestamp = proto.Field( proto.MESSAGE, number=2, message=timestamp_pb2.Timestamp, ) - target = proto.Field( + target: str = proto.Field( proto.STRING, number=3, ) - verb = proto.Field( + verb: str = proto.Field( proto.STRING, number=4, ) - status_message = proto.Field( + status_message: str = proto.Field( proto.STRING, number=5, ) - requested_cancellation = proto.Field( + requested_cancellation: bool = proto.Field( proto.BOOL, number=6, ) - api_version = proto.Field( + api_version: str = proto.Field( proto.STRING, number=7, ) @@ -1585,7 +1858,7 @@ class LocationMetadata(proto.Message): r"""Metadata about the service in a location. Attributes: - supported_hive_metastore_versions (Sequence[google.cloud.metastore_v1beta.types.LocationMetadata.HiveMetastoreVersion]): + supported_hive_metastore_versions (MutableSequence[google.cloud.metastore_v1beta.types.LocationMetadata.HiveMetastoreVersion]): The versions of Hive Metastore that can be used when creating a new metastore service in this location. The server guarantees that exactly one ``HiveMetastoreVersion`` @@ -1606,16 +1879,18 @@ class HiveMetastoreVersion(proto.Message): that omits the ``version``. """ - version = proto.Field( + version: str = proto.Field( proto.STRING, number=1, ) - is_default = proto.Field( + is_default: bool = proto.Field( proto.BOOL, number=2, ) - supported_hive_metastore_versions = proto.RepeatedField( + supported_hive_metastore_versions: MutableSequence[ + HiveMetastoreVersion + ] = proto.RepeatedField( proto.MESSAGE, number=1, message=HiveMetastoreVersion, @@ -1632,6 +1907,7 @@ class Type(proto.Enum): r"""The type of the database dump.""" TYPE_UNSPECIFIED = 0 MYSQL = 1 + AVRO = 2 __all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/types/metastore_federation.py b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/types/metastore_federation.py new file mode 100644 index 000000000000..cd94d9f40596 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/google/cloud/metastore_v1beta/types/metastore_federation.py @@ -0,0 +1,432 @@ +# -*- 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. +# +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.metastore.v1beta", + manifest={ + "Federation", + "BackendMetastore", + "ListFederationsRequest", + "ListFederationsResponse", + "GetFederationRequest", + "CreateFederationRequest", + "UpdateFederationRequest", + "DeleteFederationRequest", + }, +) + + +class Federation(proto.Message): + r"""Represents a federation of multiple backend metastores. + + Attributes: + name (str): + Immutable. The relative resource name of the federation, of + the form: + projects/{project_number}/locations/{location_id}/federations/{federation_id}`. + create_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The time when the metastore + federation was created. + update_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The time when the metastore + federation was last updated. + labels (MutableMapping[str, str]): + User-defined labels for the metastore + federation. + version (str): + Immutable. The Apache Hive metastore version + of the federation. All backend metastore + versions must be compatible with the federation + version. + backend_metastores (MutableMapping[int, google.cloud.metastore_v1beta.types.BackendMetastore]): + A map from ``BackendMetastore`` rank to + ``BackendMetastore``\ s from which the federation service + serves metadata at query time. The map key represents the + order in which ``BackendMetastore``\ s should be evaluated + to resolve database names at query time and should be + greater than or equal to zero. A ``BackendMetastore`` with a + lower number will be evaluated before a ``BackendMetastore`` + with a higher number. + endpoint_uri (str): + Output only. The federation endpoint. + state (google.cloud.metastore_v1beta.types.Federation.State): + Output only. The current state of the + federation. + state_message (str): + Output only. Additional information about the + current state of the metastore federation, if + available. + uid (str): + Output only. The globally unique resource + identifier of the metastore federation. + """ + + class State(proto.Enum): + r"""The current state of the federation.""" + STATE_UNSPECIFIED = 0 + CREATING = 1 + ACTIVE = 2 + UPDATING = 3 + DELETING = 4 + ERROR = 5 + + name: str = proto.Field( + proto.STRING, + number=1, + ) + create_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + update_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=3, + message=timestamp_pb2.Timestamp, + ) + labels: MutableMapping[str, str] = proto.MapField( + proto.STRING, + proto.STRING, + number=4, + ) + version: str = proto.Field( + proto.STRING, + number=5, + ) + backend_metastores: MutableMapping[int, "BackendMetastore"] = proto.MapField( + proto.INT32, + proto.MESSAGE, + number=6, + message="BackendMetastore", + ) + endpoint_uri: str = proto.Field( + proto.STRING, + number=7, + ) + state: State = proto.Field( + proto.ENUM, + number=8, + enum=State, + ) + state_message: str = proto.Field( + proto.STRING, + number=9, + ) + uid: str = proto.Field( + proto.STRING, + number=10, + ) + + +class BackendMetastore(proto.Message): + r"""Represents a backend metastore for the federation. + + Attributes: + name (str): + The relative resource name of the metastore that is being + federated. The formats of the relative resource names for + the currently supported metastores are listed below: + + - Dataplex + + - ``projects/{project_id}/locations/{location}/lakes/{lake_id}`` + + - BigQuery + + - ``projects/{project_id}`` + + - Dataproc Metastore + + - ``projects/{project_id}/locations/{location}/services/{service_id}`` + metastore_type (google.cloud.metastore_v1beta.types.BackendMetastore.MetastoreType): + The type of the backend metastore. + """ + + class MetastoreType(proto.Enum): + r"""The type of the backend metastore.""" + METASTORE_TYPE_UNSPECIFIED = 0 + BIGQUERY = 2 + DATAPROC_METASTORE = 3 + + name: str = proto.Field( + proto.STRING, + number=1, + ) + metastore_type: MetastoreType = proto.Field( + proto.ENUM, + number=2, + enum=MetastoreType, + ) + + +class ListFederationsRequest(proto.Message): + r"""Request message for ListFederations. + + Attributes: + parent (str): + Required. The relative resource name of the location of + metastore federations to list, in the following form: + ``projects/{project_number}/locations/{location_id}``. + page_size (int): + Optional. The maximum number of federations + to return. The response may contain less than + the maximum number. If unspecified, no more than + 500 services are returned. The maximum value is + 1000; values above 1000 are changed to 1000. + page_token (str): + Optional. A page token, received from a + previous ListFederationServices call. Provide + this token to retrieve the subsequent page. + To retrieve the first page, supply an empty page + token. + When paginating, other parameters provided to + ListFederationServices must match the call that + provided the page token. + filter (str): + Optional. The filter to apply to list + results. + order_by (str): + Optional. Specify the ordering of results as described in + `Sorting + Order `__. + If not specified, the results will be sorted in the default + order. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_size: int = proto.Field( + proto.INT32, + number=2, + ) + page_token: str = proto.Field( + proto.STRING, + number=3, + ) + filter: str = proto.Field( + proto.STRING, + number=4, + ) + order_by: str = proto.Field( + proto.STRING, + number=5, + ) + + +class ListFederationsResponse(proto.Message): + r"""Response message for ListFederations + + Attributes: + federations (MutableSequence[google.cloud.metastore_v1beta.types.Federation]): + The services in the specified location. + next_page_token (str): + A token that can be sent as ``page_token`` to retrieve the + next page. If this field is omitted, there are no subsequent + pages. + unreachable (MutableSequence[str]): + Locations that could not be reached. + """ + + @property + def raw_page(self): + return self + + federations: MutableSequence["Federation"] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message="Federation", + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + unreachable: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=3, + ) + + +class GetFederationRequest(proto.Message): + r"""Request message for GetFederation. + + Attributes: + name (str): + Required. The relative resource name of the metastore + federation to retrieve, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class CreateFederationRequest(proto.Message): + r"""Request message for CreateFederation. + + Attributes: + parent (str): + Required. The relative resource name of the location in + which to create a federation service, in the following form: + + ``projects/{project_number}/locations/{location_id}``. + federation_id (str): + Required. The ID of the metastore federation, + which is used as the final component of the + metastore federation's name. + This value must be between 2 and 63 characters + long inclusive, begin with a letter, end with a + letter or number, and consist of alpha-numeric + ASCII characters or hyphens. + federation (google.cloud.metastore_v1beta.types.Federation): + Required. The Metastore Federation to create. The ``name`` + field is ignored. The ID of the created metastore federation + must be provided in the request's ``federation_id`` field. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + federation_id: str = proto.Field( + proto.STRING, + number=2, + ) + federation: "Federation" = proto.Field( + proto.MESSAGE, + number=3, + message="Federation", + ) + request_id: str = proto.Field( + proto.STRING, + number=4, + ) + + +class UpdateFederationRequest(proto.Message): + r"""Request message for UpdateFederation. + + Attributes: + update_mask (google.protobuf.field_mask_pb2.FieldMask): + Required. A field mask used to specify the fields to be + overwritten in the metastore federation resource by the + update. Fields specified in the ``update_mask`` are relative + to the resource (not to the full request). A field is + overwritten if it is in the mask. + federation (google.cloud.metastore_v1beta.types.Federation): + Required. The metastore federation to update. The server + only merges fields in the service if they are specified in + ``update_mask``. + + The metastore federation's ``name`` field is used to + identify the metastore service to be updated. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=1, + message=field_mask_pb2.FieldMask, + ) + federation: "Federation" = proto.Field( + proto.MESSAGE, + number=2, + message="Federation", + ) + request_id: str = proto.Field( + proto.STRING, + number=3, + ) + + +class DeleteFederationRequest(proto.Message): + r"""Request message for DeleteFederation. + + Attributes: + name (str): + Required. The relative resource name of the metastore + federation to delete, in the following form: + + ``projects/{project_number}/locations/{location_id}/federations/{federation_id}``. + request_id (str): + Optional. A request ID. Specify a unique request ID to allow + the server to ignore the request if it has completed. The + server will ignore subsequent requests that provide a + duplicate request ID for at least 60 minutes after the first + request. + + For example, if an initial request times out, followed by + another request with the same request ID, the server ignores + the second request to prevent the creation of duplicate + commitments. + + The request ID must be a valid + `UUID `__ + A zero UUID (00000000-0000-0000-0000-000000000000) is not + supported. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + request_id: str = proto.Field( + proto.STRING, + number=2, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/packages/google-cloud-dataproc-metastore/owlbot.py b/packages/google-cloud-dataproc-metastore/owlbot.py new file mode 100644 index 000000000000..ce738f01d012 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/owlbot.py @@ -0,0 +1,56 @@ +# 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. + +import json +from pathlib import Path +import shutil + +import synthtool as s +import synthtool.gcp as gcp +from synthtool.languages import python + +# ---------------------------------------------------------------------------- +# Copy the generated client from the owl-bot staging directory +# ---------------------------------------------------------------------------- + +clean_up_generated_samples = True + +# 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 + s.move([library], excludes=["**/gapic_version.py"]) +s.remove_staging_dirs() + +# ---------------------------------------------------------------------------- +# Add templated files +# ---------------------------------------------------------------------------- + +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", ".github/release-please.yml"]) + +python.py_samples(skip_readmes=True) + +# 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-dataproc-metastore/release-please-config.json b/packages/google-cloud-dataproc-metastore/release-please-config.json new file mode 100644 index 000000000000..7dab673af4d5 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/release-please-config.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "packages": { + ".": { + "release-type": "python", + "extra-files": [ + "google/cloud/metastore/gapic_version.py", + { + "type": "json", + "path": "samples/generated_samples/snippet_metadata_google.cloud.metastore.v1.json", + "jsonpath": "$.clientLibrary.version" + }, + { + "type": "json", + "path": "samples/generated_samples/snippet_metadata_google.cloud.metastore.v1beta.json", + "jsonpath": "$.clientLibrary.version" + }, + { + "type": "json", + "path": "samples/generated_samples/snippet_metadata_google.cloud.metastore.v1alpha.json", + "jsonpath": "$.clientLibrary.version" + } + ] + } + }, + "release-type": "python", + "plugins": [ + { + "type": "sentence-case" + } + ], + "initial-version": "0.1.0" +} diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_backup_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_backup_async.py index 1d7091e95eb5..84dee8b9aace 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_backup_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_backup_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_CreateBackup_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_backup_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_backup_sync.py index 91fbcd0005ac..4413ea75d117 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_backup_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_backup_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_CreateBackup_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_metadata_import_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_metadata_import_async.py index 904d784779a2..f59322fe61fa 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_metadata_import_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_metadata_import_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_CreateMetadataImport_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_metadata_import_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_metadata_import_sync.py index 84a80f668a40..4ebc7ff9e15d 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_metadata_import_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_metadata_import_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_CreateMetadataImport_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_service_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_service_async.py index 6286dd04c1df..f9788719431c 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_service_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_CreateService_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_service_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_service_sync.py index 176d18f46056..834d1c27a359 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_service_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_create_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_CreateService_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_backup_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_backup_async.py index b6d4af24a133..1cbfc2504514 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_backup_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_backup_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_DeleteBackup_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_backup_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_backup_sync.py index 68c9a6f01f5f..c778e38c3e82 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_backup_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_backup_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_DeleteBackup_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_service_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_service_async.py index 7a684ed76ecb..efca5ed9022d 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_service_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_DeleteService_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_service_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_service_sync.py index efdbbe8128e4..eb60bd196451 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_service_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_delete_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_DeleteService_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_export_metadata_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_export_metadata_async.py index 505fdac75f80..2de8e60be05a 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_export_metadata_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_export_metadata_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_ExportMetadata_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_export_metadata_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_export_metadata_sync.py index 6806954b4bfe..7ad998dfc8d3 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_export_metadata_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_export_metadata_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_ExportMetadata_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_create_federation_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_create_federation_async.py new file mode 100644 index 000000000000..b7ca22cd98db --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_create_federation_async.py @@ -0,0 +1,57 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_CreateFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +async def sample_create_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_CreateFederation_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_create_federation_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_create_federation_sync.py new file mode 100644 index 000000000000..3ab09fbe763d --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_create_federation_sync.py @@ -0,0 +1,57 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_CreateFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +def sample_create_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_CreateFederation_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_delete_federation_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_delete_federation_async.py new file mode 100644 index 000000000000..5420dd50f054 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_delete_federation_async.py @@ -0,0 +1,56 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_DeleteFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +async def sample_delete_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_DeleteFederation_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_delete_federation_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_delete_federation_sync.py new file mode 100644 index 000000000000..88943550f63b --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_delete_federation_sync.py @@ -0,0 +1,56 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_DeleteFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +def sample_delete_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_DeleteFederation_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_get_federation_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_get_federation_async.py new file mode 100644 index 000000000000..32eb62c67780 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_get_federation_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_GetFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +async def sample_get_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = await client.get_federation(request=request) + + # Handle the response + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_GetFederation_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_get_federation_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_get_federation_sync.py new file mode 100644 index 000000000000..0fcfb479e740 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_get_federation_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_GetFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +def sample_get_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = client.get_federation(request=request) + + # Handle the response + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_GetFederation_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_list_federations_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_list_federations_async.py new file mode 100644 index 000000000000..022d09a74822 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_list_federations_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFederations +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_ListFederations_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +async def sample_list_federations(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_ListFederations_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_list_federations_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_list_federations_sync.py new file mode 100644 index 000000000000..7870e256357e --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_list_federations_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFederations +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_ListFederations_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +def sample_list_federations(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_ListFederations_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_update_federation_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_update_federation_async.py new file mode 100644 index 000000000000..9fd0c1368833 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_update_federation_async.py @@ -0,0 +1,55 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_UpdateFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +async def sample_update_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_UpdateFederation_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_update_federation_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_update_federation_sync.py new file mode 100644 index 000000000000..19d562db9c23 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_federation_update_federation_sync.py @@ -0,0 +1,55 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1_generated_DataprocMetastoreFederation_UpdateFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1 + + +def sample_update_federation(): + # Create a client + client = metastore_v1.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1_generated_DataprocMetastoreFederation_UpdateFederation_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_backup_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_backup_async.py index def36bb82f58..2a5b5b607a40 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_backup_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_backup_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_GetBackup_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_backup_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_backup_sync.py index 6c0986ef3901..130627f35fa3 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_backup_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_backup_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_GetBackup_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_metadata_import_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_metadata_import_async.py index 410a44aa12eb..2b47559b945e 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_metadata_import_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_metadata_import_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_GetMetadataImport_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_metadata_import_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_metadata_import_sync.py index 7ca7e97f5357..a8405ac26c1b 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_metadata_import_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_metadata_import_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_GetMetadataImport_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_service_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_service_async.py index 87f67ec8ec4a..fb7eb80dd836 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_service_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_GetService_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_service_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_service_sync.py index e92c66a87548..b6f159d5c852 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_service_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_get_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_GetService_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_backups_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_backups_async.py index c81ed5515f4b..195a24eec815 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_backups_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_backups_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_ListBackups_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_backups_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_backups_sync.py index b28de6093255..f8d6e870e256 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_backups_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_backups_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_ListBackups_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_metadata_imports_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_metadata_imports_async.py index 5ef012384e89..607070ae36dd 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_metadata_imports_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_metadata_imports_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_ListMetadataImports_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_metadata_imports_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_metadata_imports_sync.py index 44b04780d38d..ccd7e8b959c5 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_metadata_imports_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_metadata_imports_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_ListMetadataImports_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_services_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_services_async.py index 6a19d9c6214b..49bb65bcaff0 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_services_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_services_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_ListServices_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_services_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_services_sync.py index e5eb62e193d8..bd44a5d82e15 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_services_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_list_services_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_ListServices_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_restore_service_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_restore_service_async.py index e7b68c0395e9..c73f218a94be 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_restore_service_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_restore_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_RestoreService_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_restore_service_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_restore_service_sync.py index 6b001d995c48..18bc577bb9ae 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_restore_service_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_restore_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_RestoreService_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_metadata_import_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_metadata_import_async.py index 5e3770114826..83c8d2a69190 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_metadata_import_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_metadata_import_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_UpdateMetadataImport_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_metadata_import_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_metadata_import_sync.py index a31b74fb25c3..28a7d91ddb56 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_metadata_import_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_metadata_import_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_UpdateMetadataImport_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_service_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_service_async.py index 3b60a1640150..12a31230ceb1 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_service_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_UpdateService_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_service_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_service_sync.py index 425d46cbcae9..c1c2e3bdb94f 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_service_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1_generated_dataproc_metastore_update_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1_generated_DataprocMetastore_UpdateService_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_backup_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_backup_async.py index 17a2ac69df4a..1f85dc5ede0f 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_backup_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_backup_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_CreateBackup_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_backup_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_backup_sync.py index 233f29b9e02b..e0d19278002f 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_backup_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_backup_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_CreateBackup_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_metadata_import_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_metadata_import_async.py index e57cfc3a7367..e4ffa1195fe0 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_metadata_import_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_metadata_import_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_CreateMetadataImport_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_metadata_import_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_metadata_import_sync.py index 37ab47404217..617e51b480ca 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_metadata_import_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_metadata_import_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_CreateMetadataImport_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_service_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_service_async.py index d66878491dd4..7c8e5a4575da 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_service_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_CreateService_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_service_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_service_sync.py index 85f86bbf12a1..781c5da54442 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_service_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_create_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_CreateService_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_backup_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_backup_async.py index 7b1adaceda7b..30f05e739470 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_backup_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_backup_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_DeleteBackup_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_backup_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_backup_sync.py index ebe928f47cca..0a3890be79a8 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_backup_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_backup_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_DeleteBackup_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_service_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_service_async.py index da437d10a294..321dc1470fad 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_service_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_DeleteService_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_service_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_service_sync.py index 228349ed93da..2cb7e29d556c 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_service_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_delete_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_DeleteService_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_export_metadata_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_export_metadata_async.py index 93ce585ce331..f850435a0cc8 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_export_metadata_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_export_metadata_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_ExportMetadata_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_export_metadata_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_export_metadata_sync.py index 33e3c3660d15..82b1b356c4bc 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_export_metadata_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_export_metadata_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_ExportMetadata_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_async.py new file mode 100644 index 000000000000..4a02e3dee188 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_async.py @@ -0,0 +1,57 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_CreateFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +async def sample_create_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_CreateFederation_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_sync.py new file mode 100644 index 000000000000..7525aa0b2f19 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_sync.py @@ -0,0 +1,57 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_CreateFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +def sample_create_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_CreateFederation_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_async.py new file mode 100644 index 000000000000..5201c81129b4 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_async.py @@ -0,0 +1,56 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_DeleteFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +async def sample_delete_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_DeleteFederation_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_sync.py new file mode 100644 index 000000000000..a43c7d5d23bb --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_sync.py @@ -0,0 +1,56 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_DeleteFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +def sample_delete_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_DeleteFederation_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_async.py new file mode 100644 index 000000000000..85fcb9120ae3 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_GetFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +async def sample_get_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = await client.get_federation(request=request) + + # Handle the response + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_GetFederation_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_sync.py new file mode 100644 index 000000000000..3e84d213697e --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_GetFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +def sample_get_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = client.get_federation(request=request) + + # Handle the response + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_GetFederation_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_async.py new file mode 100644 index 000000000000..12b8c974173f --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFederations +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_ListFederations_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +async def sample_list_federations(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_ListFederations_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_sync.py new file mode 100644 index 000000000000..e7f46a184516 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFederations +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_ListFederations_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +def sample_list_federations(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_ListFederations_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_async.py new file mode 100644 index 000000000000..9ea30149477f --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_async.py @@ -0,0 +1,55 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_UpdateFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +async def sample_update_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1alpha.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_UpdateFederation_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_sync.py new file mode 100644 index 000000000000..043b7257d712 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_sync.py @@ -0,0 +1,55 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1alpha_generated_DataprocMetastoreFederation_UpdateFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1alpha + + +def sample_update_federation(): + # Create a client + client = metastore_v1alpha.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1alpha.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1alpha_generated_DataprocMetastoreFederation_UpdateFederation_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_backup_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_backup_async.py index 90bf977b9afb..60b0f223502e 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_backup_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_backup_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_GetBackup_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_backup_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_backup_sync.py index 19bb391ab6b6..0fc4889f9161 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_backup_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_backup_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_GetBackup_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_metadata_import_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_metadata_import_async.py index 13c31ee363cf..7c56851b1603 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_metadata_import_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_metadata_import_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_GetMetadataImport_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_metadata_import_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_metadata_import_sync.py index 059c9ff57982..fc35d7b46e48 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_metadata_import_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_metadata_import_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_GetMetadataImport_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_service_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_service_async.py index 521792024535..60b69fb65c87 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_service_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_GetService_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_service_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_service_sync.py index c00ede50a736..230e93f96310 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_service_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_get_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_GetService_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_backups_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_backups_async.py index 7f252f93a432..7b88c87c337d 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_backups_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_backups_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_ListBackups_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_backups_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_backups_sync.py index 93c6ef79389d..cd6f465a11d2 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_backups_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_backups_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_ListBackups_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_metadata_imports_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_metadata_imports_async.py index 87db7edd86a3..c8f49351941a 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_metadata_imports_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_metadata_imports_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_ListMetadataImports_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_metadata_imports_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_metadata_imports_sync.py index b519864e05fc..ceb4ff229069 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_metadata_imports_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_metadata_imports_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_ListMetadataImports_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_services_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_services_async.py index 595445f195fd..5358cffec59d 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_services_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_services_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_ListServices_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_services_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_services_sync.py index 44c910b52261..33f4f1da2b5a 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_services_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_list_services_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_ListServices_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_restore_service_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_restore_service_async.py index b2694bf6b75e..e6165ba2f00e 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_restore_service_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_restore_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_RestoreService_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_restore_service_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_restore_service_sync.py index 43c90448dbdc..bab5c0c91704 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_restore_service_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_restore_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_RestoreService_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_metadata_import_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_metadata_import_async.py index 5597bc450811..b77dc41e036a 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_metadata_import_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_metadata_import_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_UpdateMetadataImport_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_metadata_import_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_metadata_import_sync.py index bdf992b79ae3..88eb58f7a32b 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_metadata_import_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_metadata_import_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_UpdateMetadataImport_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_service_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_service_async.py index b8a9608ae20a..39f66a4b4f9c 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_service_async.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_service_async.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_UpdateService_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_service_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_service_sync.py index 9f5bd93bb06b..70a37c2892fd 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_service_sync.py +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1alpha_generated_dataproc_metastore_update_service_sync.py @@ -20,7 +20,7 @@ # It may require modifications to work in your environment. # To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-metastore +# python3 -m pip install google-cloud-dataproc-metastore # [START metastore_v1alpha_generated_DataprocMetastore_UpdateService_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_create_federation_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_create_federation_async.py new file mode 100644 index 000000000000..ba4eafade338 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_create_federation_async.py @@ -0,0 +1,57 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_CreateFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +async def sample_create_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_CreateFederation_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_create_federation_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_create_federation_sync.py new file mode 100644 index 000000000000..2ed2acecf565 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_create_federation_sync.py @@ -0,0 +1,57 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_CreateFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +def sample_create_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.CreateFederationRequest( + parent="parent_value", + federation_id="federation_id_value", + ) + + # Make the request + operation = client.create_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_CreateFederation_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_async.py new file mode 100644 index 000000000000..8efa6bd2e360 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_async.py @@ -0,0 +1,56 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_DeleteFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +async def sample_delete_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_DeleteFederation_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_sync.py new file mode 100644 index 000000000000..8bd5c31f8cad --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_sync.py @@ -0,0 +1,56 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_DeleteFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +def sample_delete_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.DeleteFederationRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_DeleteFederation_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_get_federation_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_get_federation_async.py new file mode 100644 index 000000000000..c08cb2bfff58 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_get_federation_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_GetFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +async def sample_get_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = await client.get_federation(request=request) + + # Handle the response + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_GetFederation_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_get_federation_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_get_federation_sync.py new file mode 100644 index 000000000000..d08b0db898fb --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_get_federation_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_GetFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +def sample_get_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.GetFederationRequest( + name="name_value", + ) + + # Make the request + response = client.get_federation(request=request) + + # Handle the response + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_GetFederation_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_list_federations_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_list_federations_async.py new file mode 100644 index 000000000000..57dcf17a2925 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_list_federations_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFederations +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_ListFederations_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +async def sample_list_federations(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_ListFederations_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_list_federations_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_list_federations_sync.py new file mode 100644 index 000000000000..13224ecebb7c --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_list_federations_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFederations +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_ListFederations_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +def sample_list_federations(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.ListFederationsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_federations(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_ListFederations_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_update_federation_async.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_update_federation_async.py new file mode 100644 index 000000000000..ab081cab290e --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_update_federation_async.py @@ -0,0 +1,55 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_UpdateFederation_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +async def sample_update_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationAsyncClient() + + # Initialize request argument(s) + request = metastore_v1beta.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = await operation.result() + + # Handle the response + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_UpdateFederation_async] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_update_federation_sync.py b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_update_federation_sync.py new file mode 100644 index 000000000000..06d2b0d2eab2 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/metastore_v1beta_generated_dataproc_metastore_federation_update_federation_sync.py @@ -0,0 +1,55 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFederation +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-dataproc-metastore + + +# [START metastore_v1beta_generated_DataprocMetastoreFederation_UpdateFederation_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import metastore_v1beta + + +def sample_update_federation(): + # Create a client + client = metastore_v1beta.DataprocMetastoreFederationClient() + + # Initialize request argument(s) + request = metastore_v1beta.UpdateFederationRequest( + ) + + # Make the request + operation = client.update_federation(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END metastore_v1beta_generated_DataprocMetastoreFederation_UpdateFederation_sync] diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_metastore_v1.json b/packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_google.cloud.metastore.v1.json similarity index 74% rename from packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_metastore_v1.json rename to packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_google.cloud.metastore.v1.json index cc0440dbaeb9..f1638aa8e399 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_metastore_v1.json +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_google.cloud.metastore.v1.json @@ -7,9 +7,839 @@ } ], "language": "PYTHON", - "name": "google-cloud-metastore" + "name": "google-cloud-dataproc-metastore", + "version": "0.1.0" }, "snippets": [ + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient.create_federation", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.CreateFederation", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "CreateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.CreateFederationRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1.types.Federation" + }, + { + "name": "federation_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "create_federation" + }, + "description": "Sample for CreateFederation", + "file": "metastore_v1_generated_dataproc_metastore_federation_create_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_CreateFederation_async", + "segments": [ + { + "end": 56, + "start": 27, + "type": "FULL" + }, + { + "end": 56, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 53, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 57, + "start": 54, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_create_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient.create_federation", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.CreateFederation", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "CreateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.CreateFederationRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1.types.Federation" + }, + { + "name": "federation_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "create_federation" + }, + "description": "Sample for CreateFederation", + "file": "metastore_v1_generated_dataproc_metastore_federation_create_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_CreateFederation_sync", + "segments": [ + { + "end": 56, + "start": 27, + "type": "FULL" + }, + { + "end": 56, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 53, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 57, + "start": 54, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_create_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient.delete_federation", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.DeleteFederation", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "DeleteFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.DeleteFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "delete_federation" + }, + "description": "Sample for DeleteFederation", + "file": "metastore_v1_generated_dataproc_metastore_federation_delete_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_DeleteFederation_async", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_delete_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient.delete_federation", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.DeleteFederation", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "DeleteFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.DeleteFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "delete_federation" + }, + "description": "Sample for DeleteFederation", + "file": "metastore_v1_generated_dataproc_metastore_federation_delete_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_DeleteFederation_sync", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_delete_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient.get_federation", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.GetFederation", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "GetFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.GetFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1.types.Federation", + "shortName": "get_federation" + }, + "description": "Sample for GetFederation", + "file": "metastore_v1_generated_dataproc_metastore_federation_get_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_GetFederation_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_get_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient.get_federation", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.GetFederation", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "GetFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.GetFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1.types.Federation", + "shortName": "get_federation" + }, + "description": "Sample for GetFederation", + "file": "metastore_v1_generated_dataproc_metastore_federation_get_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_GetFederation_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_get_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient.list_federations", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.ListFederations", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "ListFederations" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.ListFederationsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1.services.dataproc_metastore_federation.pagers.ListFederationsAsyncPager", + "shortName": "list_federations" + }, + "description": "Sample for ListFederations", + "file": "metastore_v1_generated_dataproc_metastore_federation_list_federations_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_ListFederations_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_list_federations_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient.list_federations", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.ListFederations", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "ListFederations" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.ListFederationsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1.services.dataproc_metastore_federation.pagers.ListFederationsPager", + "shortName": "list_federations" + }, + "description": "Sample for ListFederations", + "file": "metastore_v1_generated_dataproc_metastore_federation_list_federations_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_ListFederations_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_list_federations_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationAsyncClient.update_federation", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.UpdateFederation", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "UpdateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.UpdateFederationRequest" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1.types.Federation" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "update_federation" + }, + "description": "Sample for UpdateFederation", + "file": "metastore_v1_generated_dataproc_metastore_federation_update_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_UpdateFederation_async", + "segments": [ + { + "end": 54, + "start": 27, + "type": "FULL" + }, + { + "end": 54, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 51, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 55, + "start": 52, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_update_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1.DataprocMetastoreFederationClient.update_federation", + "method": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation.UpdateFederation", + "service": { + "fullName": "google.cloud.metastore.v1.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "UpdateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1.types.UpdateFederationRequest" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1.types.Federation" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "update_federation" + }, + "description": "Sample for UpdateFederation", + "file": "metastore_v1_generated_dataproc_metastore_federation_update_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1_generated_DataprocMetastoreFederation_UpdateFederation_sync", + "segments": [ + { + "end": 54, + "start": 27, + "type": "FULL" + }, + { + "end": 54, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 51, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 55, + "start": 52, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1_generated_dataproc_metastore_federation_update_federation_sync.py" + }, { "canonical": true, "clientMethod": { diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_metastore_v1alpha.json b/packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_google.cloud.metastore.v1alpha.json similarity index 74% rename from packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_metastore_v1alpha.json rename to packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_google.cloud.metastore.v1alpha.json index 126c24b9b85d..2a3a36b6c98e 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_metastore_v1alpha.json +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_google.cloud.metastore.v1alpha.json @@ -7,9 +7,839 @@ } ], "language": "PYTHON", - "name": "google-cloud-metastore" + "name": "google-cloud-dataproc-metastore", + "version": "0.1.0" }, "snippets": [ + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient.create_federation", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.CreateFederation", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "CreateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.CreateFederationRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1alpha.types.Federation" + }, + { + "name": "federation_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "create_federation" + }, + "description": "Sample for CreateFederation", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_CreateFederation_async", + "segments": [ + { + "end": 56, + "start": 27, + "type": "FULL" + }, + { + "end": 56, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 53, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 57, + "start": 54, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient.create_federation", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.CreateFederation", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "CreateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.CreateFederationRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1alpha.types.Federation" + }, + { + "name": "federation_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "create_federation" + }, + "description": "Sample for CreateFederation", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_CreateFederation_sync", + "segments": [ + { + "end": 56, + "start": 27, + "type": "FULL" + }, + { + "end": 56, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 53, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 57, + "start": 54, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_create_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient.delete_federation", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.DeleteFederation", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "DeleteFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.DeleteFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "delete_federation" + }, + "description": "Sample for DeleteFederation", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_DeleteFederation_async", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient.delete_federation", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.DeleteFederation", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "DeleteFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.DeleteFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "delete_federation" + }, + "description": "Sample for DeleteFederation", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_DeleteFederation_sync", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_delete_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient.get_federation", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.GetFederation", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "GetFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.GetFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1alpha.types.Federation", + "shortName": "get_federation" + }, + "description": "Sample for GetFederation", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_GetFederation_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient.get_federation", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.GetFederation", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "GetFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.GetFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1alpha.types.Federation", + "shortName": "get_federation" + }, + "description": "Sample for GetFederation", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_GetFederation_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_get_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient.list_federations", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.ListFederations", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "ListFederations" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.ListFederationsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.pagers.ListFederationsAsyncPager", + "shortName": "list_federations" + }, + "description": "Sample for ListFederations", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_ListFederations_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient.list_federations", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.ListFederations", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "ListFederations" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.ListFederationsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.pagers.ListFederationsPager", + "shortName": "list_federations" + }, + "description": "Sample for ListFederations", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_ListFederations_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_list_federations_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationAsyncClient.update_federation", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.UpdateFederation", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "UpdateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.UpdateFederationRequest" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1alpha.types.Federation" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "update_federation" + }, + "description": "Sample for UpdateFederation", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_UpdateFederation_async", + "segments": [ + { + "end": 54, + "start": 27, + "type": "FULL" + }, + { + "end": 54, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 51, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 55, + "start": 52, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1alpha.DataprocMetastoreFederationClient.update_federation", + "method": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation.UpdateFederation", + "service": { + "fullName": "google.cloud.metastore.v1alpha.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "UpdateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1alpha.types.UpdateFederationRequest" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1alpha.types.Federation" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "update_federation" + }, + "description": "Sample for UpdateFederation", + "file": "metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1alpha_generated_DataprocMetastoreFederation_UpdateFederation_sync", + "segments": [ + { + "end": 54, + "start": 27, + "type": "FULL" + }, + { + "end": 54, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 51, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 55, + "start": 52, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1alpha_generated_dataproc_metastore_federation_update_federation_sync.py" + }, { "canonical": true, "clientMethod": { diff --git a/packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_metastore_v1beta.json b/packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_google.cloud.metastore.v1beta.json similarity index 74% rename from packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_metastore_v1beta.json rename to packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_google.cloud.metastore.v1beta.json index 516c01e11b24..8b2bbc0cbdef 100644 --- a/packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_metastore_v1beta.json +++ b/packages/google-cloud-dataproc-metastore/samples/generated_samples/snippet_metadata_google.cloud.metastore.v1beta.json @@ -7,9 +7,839 @@ } ], "language": "PYTHON", - "name": "google-cloud-dataproc-metastore" + "name": "google-cloud-dataproc-metastore", + "version": "0.1.0" }, "snippets": [ + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient.create_federation", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.CreateFederation", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "CreateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.CreateFederationRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1beta.types.Federation" + }, + { + "name": "federation_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "create_federation" + }, + "description": "Sample for CreateFederation", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_create_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_CreateFederation_async", + "segments": [ + { + "end": 56, + "start": 27, + "type": "FULL" + }, + { + "end": 56, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 53, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 57, + "start": 54, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_create_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient.create_federation", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.CreateFederation", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "CreateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.CreateFederationRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1beta.types.Federation" + }, + { + "name": "federation_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "create_federation" + }, + "description": "Sample for CreateFederation", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_create_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_CreateFederation_sync", + "segments": [ + { + "end": 56, + "start": 27, + "type": "FULL" + }, + { + "end": 56, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 53, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 57, + "start": 54, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_create_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient.delete_federation", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.DeleteFederation", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "DeleteFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.DeleteFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "delete_federation" + }, + "description": "Sample for DeleteFederation", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_DeleteFederation_async", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient.delete_federation", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.DeleteFederation", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "DeleteFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.DeleteFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "delete_federation" + }, + "description": "Sample for DeleteFederation", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_DeleteFederation_sync", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_delete_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient.get_federation", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.GetFederation", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "GetFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.GetFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1beta.types.Federation", + "shortName": "get_federation" + }, + "description": "Sample for GetFederation", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_get_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_GetFederation_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_get_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient.get_federation", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.GetFederation", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "GetFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.GetFederationRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1beta.types.Federation", + "shortName": "get_federation" + }, + "description": "Sample for GetFederation", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_get_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_GetFederation_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_get_federation_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient.list_federations", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.ListFederations", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "ListFederations" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.ListFederationsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1beta.services.dataproc_metastore_federation.pagers.ListFederationsAsyncPager", + "shortName": "list_federations" + }, + "description": "Sample for ListFederations", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_list_federations_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_ListFederations_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_list_federations_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient.list_federations", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.ListFederations", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "ListFederations" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.ListFederationsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.metastore_v1beta.services.dataproc_metastore_federation.pagers.ListFederationsPager", + "shortName": "list_federations" + }, + "description": "Sample for ListFederations", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_list_federations_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_ListFederations_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_list_federations_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient", + "shortName": "DataprocMetastoreFederationAsyncClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationAsyncClient.update_federation", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.UpdateFederation", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "UpdateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.UpdateFederationRequest" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1beta.types.Federation" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "update_federation" + }, + "description": "Sample for UpdateFederation", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_update_federation_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_UpdateFederation_async", + "segments": [ + { + "end": 54, + "start": 27, + "type": "FULL" + }, + { + "end": 54, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 51, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 55, + "start": 52, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_update_federation_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient", + "shortName": "DataprocMetastoreFederationClient" + }, + "fullName": "google.cloud.metastore_v1beta.DataprocMetastoreFederationClient.update_federation", + "method": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation.UpdateFederation", + "service": { + "fullName": "google.cloud.metastore.v1beta.DataprocMetastoreFederation", + "shortName": "DataprocMetastoreFederation" + }, + "shortName": "UpdateFederation" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.metastore_v1beta.types.UpdateFederationRequest" + }, + { + "name": "federation", + "type": "google.cloud.metastore_v1beta.types.Federation" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "update_federation" + }, + "description": "Sample for UpdateFederation", + "file": "metastore_v1beta_generated_dataproc_metastore_federation_update_federation_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "metastore_v1beta_generated_DataprocMetastoreFederation_UpdateFederation_sync", + "segments": [ + { + "end": 54, + "start": 27, + "type": "FULL" + }, + { + "end": 54, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 51, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 55, + "start": 52, + "type": "RESPONSE_HANDLING" + } + ], + "title": "metastore_v1beta_generated_dataproc_metastore_federation_update_federation_sync.py" + }, { "canonical": true, "clientMethod": { diff --git a/packages/google-cloud-dataproc-metastore/scripts/fixup_metastore_v1_keywords.py b/packages/google-cloud-dataproc-metastore/scripts/fixup_metastore_v1_keywords.py index d73abae3dce6..cbca0a7e4ab5 100644 --- a/packages/google-cloud-dataproc-metastore/scripts/fixup_metastore_v1_keywords.py +++ b/packages/google-cloud-dataproc-metastore/scripts/fixup_metastore_v1_keywords.py @@ -40,18 +40,23 @@ class metastoreCallTransformer(cst.CSTTransformer): CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { 'create_backup': ('parent', 'backup_id', 'backup', 'request_id', ), + 'create_federation': ('parent', 'federation_id', 'federation', 'request_id', ), 'create_metadata_import': ('parent', 'metadata_import_id', 'metadata_import', 'request_id', ), 'create_service': ('parent', 'service_id', 'service', 'request_id', ), 'delete_backup': ('name', 'request_id', ), + 'delete_federation': ('name', 'request_id', ), 'delete_service': ('name', 'request_id', ), 'export_metadata': ('service', 'destination_gcs_folder', 'request_id', 'database_dump_type', ), 'get_backup': ('name', ), + 'get_federation': ('name', ), 'get_metadata_import': ('name', ), 'get_service': ('name', ), 'list_backups': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), + 'list_federations': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'list_metadata_imports': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'list_services': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'restore_service': ('service', 'backup', 'restore_type', 'request_id', ), + 'update_federation': ('update_mask', 'federation', 'request_id', ), 'update_metadata_import': ('update_mask', 'metadata_import', 'request_id', ), 'update_service': ('update_mask', 'service', 'request_id', ), } diff --git a/packages/google-cloud-dataproc-metastore/scripts/fixup_metastore_v1alpha_keywords.py b/packages/google-cloud-dataproc-metastore/scripts/fixup_metastore_v1alpha_keywords.py index d73abae3dce6..cbca0a7e4ab5 100644 --- a/packages/google-cloud-dataproc-metastore/scripts/fixup_metastore_v1alpha_keywords.py +++ b/packages/google-cloud-dataproc-metastore/scripts/fixup_metastore_v1alpha_keywords.py @@ -40,18 +40,23 @@ class metastoreCallTransformer(cst.CSTTransformer): CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { 'create_backup': ('parent', 'backup_id', 'backup', 'request_id', ), + 'create_federation': ('parent', 'federation_id', 'federation', 'request_id', ), 'create_metadata_import': ('parent', 'metadata_import_id', 'metadata_import', 'request_id', ), 'create_service': ('parent', 'service_id', 'service', 'request_id', ), 'delete_backup': ('name', 'request_id', ), + 'delete_federation': ('name', 'request_id', ), 'delete_service': ('name', 'request_id', ), 'export_metadata': ('service', 'destination_gcs_folder', 'request_id', 'database_dump_type', ), 'get_backup': ('name', ), + 'get_federation': ('name', ), 'get_metadata_import': ('name', ), 'get_service': ('name', ), 'list_backups': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), + 'list_federations': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'list_metadata_imports': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'list_services': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'restore_service': ('service', 'backup', 'restore_type', 'request_id', ), + 'update_federation': ('update_mask', 'federation', 'request_id', ), 'update_metadata_import': ('update_mask', 'metadata_import', 'request_id', ), 'update_service': ('update_mask', 'service', 'request_id', ), } diff --git a/packages/google-cloud-dataproc-metastore/scripts/fixup_metastore_v1beta_keywords.py b/packages/google-cloud-dataproc-metastore/scripts/fixup_metastore_v1beta_keywords.py index d73abae3dce6..cbca0a7e4ab5 100644 --- a/packages/google-cloud-dataproc-metastore/scripts/fixup_metastore_v1beta_keywords.py +++ b/packages/google-cloud-dataproc-metastore/scripts/fixup_metastore_v1beta_keywords.py @@ -40,18 +40,23 @@ class metastoreCallTransformer(cst.CSTTransformer): CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { 'create_backup': ('parent', 'backup_id', 'backup', 'request_id', ), + 'create_federation': ('parent', 'federation_id', 'federation', 'request_id', ), 'create_metadata_import': ('parent', 'metadata_import_id', 'metadata_import', 'request_id', ), 'create_service': ('parent', 'service_id', 'service', 'request_id', ), 'delete_backup': ('name', 'request_id', ), + 'delete_federation': ('name', 'request_id', ), 'delete_service': ('name', 'request_id', ), 'export_metadata': ('service', 'destination_gcs_folder', 'request_id', 'database_dump_type', ), 'get_backup': ('name', ), + 'get_federation': ('name', ), 'get_metadata_import': ('name', ), 'get_service': ('name', ), 'list_backups': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), + 'list_federations': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'list_metadata_imports': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'list_services': ('parent', 'page_size', 'page_token', 'filter', 'order_by', ), 'restore_service': ('service', 'backup', 'restore_type', 'request_id', ), + 'update_federation': ('update_mask', 'federation', 'request_id', ), 'update_metadata_import': ('update_mask', 'metadata_import', 'request_id', ), 'update_service': ('update_mask', 'service', 'request_id', ), } diff --git a/packages/google-cloud-dataproc-metastore/setup.py b/packages/google-cloud-dataproc-metastore/setup.py index 1ff37ba3cc17..0b14fb2c2f8a 100644 --- a/packages/google-cloud-dataproc-metastore/setup.py +++ b/packages/google-cloud-dataproc-metastore/setup.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- - -# Copyright 2020 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. @@ -14,22 +13,34 @@ # See the License for the specific language governing permissions and # limitations under the License. # - import io import os import setuptools # type: ignore +package_root = os.path.abspath(os.path.dirname(__file__)) + name = "google-cloud-dataproc-metastore" -version = "1.6.3" -description = "Dataproc Metastore API client library" -release_status = "Development Status :: 5 - Production/Stable" -url = "https://github.com/googleapis/python-dataproc-metastore" + + +description = "Google Cloud Dataproc Metastore API client library" + +version = {} +with open(os.path.join(package_root, "google/cloud/metastore/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.*", + "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", ] +url = "https://github.com/googleapis/python-dataproc-metastore" package_root = os.path.abspath(os.path.dirname(__file__)) @@ -37,6 +48,16 @@ with io.open(readme_filename, encoding="utf-8") as readme_file: readme = readme_file.read() +packages = [ + package + for package in setuptools.PEP420PackageFinder.find() + if package.startswith("google") +] + +namespaces = ["google"] +if "google.cloud" in packages: + namespaces.append("google.cloud") + setuptools.setup( name=name, version=version, @@ -46,26 +67,24 @@ author_email="googleapis-packages@google.com", license="Apache 2.0", url=url, - packages=[ - package - for package in setuptools.PEP420PackageFinder.find() - if package.startswith("google") - ], - namespace_packages=("google", "google.cloud"), - platforms="Posix; MacOS X; Windows", - include_package_data=True, - install_requires=dependencies, - python_requires=">=3.7", classifiers=[ release_status, "Intended Audience :: Developers", - "Operating System :: OS Independent", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Operating System :: OS Independent", "Topic :: Internet", - "Topic :: Software Development :: Libraries :: Python Modules", ], + platforms="Posix; MacOS X; Windows", + packages=packages, + python_requires=">=3.7", + namespace_packages=namespaces, + install_requires=dependencies, + include_package_data=True, zip_safe=False, ) diff --git a/packages/google-cloud-dataproc-metastore/testing/constraints-3.10.txt b/packages/google-cloud-dataproc-metastore/testing/constraints-3.10.txt index e69de29bb2d1..ed7f9aed2559 100644 --- a/packages/google-cloud-dataproc-metastore/testing/constraints-3.10.txt +++ b/packages/google-cloud-dataproc-metastore/testing/constraints-3.10.txt @@ -0,0 +1,6 @@ +# -*- 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 diff --git a/packages/google-cloud-dataproc-metastore/testing/constraints-3.11.txt b/packages/google-cloud-dataproc-metastore/testing/constraints-3.11.txt index e69de29bb2d1..ed7f9aed2559 100644 --- a/packages/google-cloud-dataproc-metastore/testing/constraints-3.11.txt +++ b/packages/google-cloud-dataproc-metastore/testing/constraints-3.11.txt @@ -0,0 +1,6 @@ +# -*- 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 diff --git a/packages/google-cloud-dataproc-metastore/testing/constraints-3.7.txt b/packages/google-cloud-dataproc-metastore/testing/constraints-3.7.txt index a12652ce2cc3..6f3158cc2034 100644 --- a/packages/google-cloud-dataproc-metastore/testing/constraints-3.7.txt +++ b/packages/google-cloud-dataproc-metastore/testing/constraints-3.7.txt @@ -1,24 +1,9 @@ -# Copyright 2021 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. -# # 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 +# 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 protobuf==3.19.5 diff --git a/packages/google-cloud-dataproc-metastore/testing/constraints-3.8.txt b/packages/google-cloud-dataproc-metastore/testing/constraints-3.8.txt index e69de29bb2d1..ed7f9aed2559 100644 --- a/packages/google-cloud-dataproc-metastore/testing/constraints-3.8.txt +++ b/packages/google-cloud-dataproc-metastore/testing/constraints-3.8.txt @@ -0,0 +1,6 @@ +# -*- 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 diff --git a/packages/google-cloud-dataproc-metastore/testing/constraints-3.9.txt b/packages/google-cloud-dataproc-metastore/testing/constraints-3.9.txt index e69de29bb2d1..ed7f9aed2559 100644 --- a/packages/google-cloud-dataproc-metastore/testing/constraints-3.9.txt +++ b/packages/google-cloud-dataproc-metastore/testing/constraints-3.9.txt @@ -0,0 +1,6 @@ +# -*- 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 diff --git a/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1/test_dataproc_metastore.py b/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1/test_dataproc_metastore.py index f85e6ec2ce2a..f048a59381b6 100644 --- a/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1/test_dataproc_metastore.py +++ b/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1/test_dataproc_metastore.py @@ -41,6 +41,7 @@ from google.auth.exceptions import MutualTLSChannelError from google.longrunning import operations_pb2 from google.oauth2 import service_account +from google.protobuf import empty_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 @@ -1164,6 +1165,7 @@ def test_get_service(request_type, transport: str = "grpc"): tier=metastore.Service.Tier.DEVELOPER, uid="uid_value", release_channel=metastore.Service.ReleaseChannel.CANARY, + database_type=metastore.Service.DatabaseType.MYSQL, hive_metastore_config=metastore.HiveMetastoreConfig( version="version_value" ), @@ -1187,6 +1189,7 @@ def test_get_service(request_type, transport: str = "grpc"): assert response.tier == metastore.Service.Tier.DEVELOPER assert response.uid == "uid_value" assert response.release_channel == metastore.Service.ReleaseChannel.CANARY + assert response.database_type == metastore.Service.DatabaseType.MYSQL def test_get_service_empty_call(): @@ -1233,6 +1236,7 @@ async def test_get_service_async( tier=metastore.Service.Tier.DEVELOPER, uid="uid_value", release_channel=metastore.Service.ReleaseChannel.CANARY, + database_type=metastore.Service.DatabaseType.MYSQL, ) ) response = await client.get_service(request) @@ -1254,6 +1258,7 @@ async def test_get_service_async( assert response.tier == metastore.Service.Tier.DEVELOPER assert response.uid == "uid_value" assert response.release_channel == metastore.Service.ReleaseChannel.CANARY + assert response.database_type == metastore.Service.DatabaseType.MYSQL @pytest.mark.asyncio @@ -5570,8 +5575,34 @@ def test_parse_service_path(): assert expected == actual +def test_subnetwork_path(): + project = "whelk" + region = "octopus" + subnetwork = "oyster" + expected = "projects/{project}/regions/{region}/subnetworks/{subnetwork}".format( + project=project, + region=region, + subnetwork=subnetwork, + ) + actual = DataprocMetastoreClient.subnetwork_path(project, region, subnetwork) + assert expected == actual + + +def test_parse_subnetwork_path(): + expected = { + "project": "nudibranch", + "region": "cuttlefish", + "subnetwork": "mussel", + } + path = DataprocMetastoreClient.subnetwork_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreClient.parse_subnetwork_path(path) + assert expected == actual + + def test_common_billing_account_path(): - billing_account = "whelk" + billing_account = "winkle" expected = "billingAccounts/{billing_account}".format( billing_account=billing_account, ) @@ -5581,7 +5612,7 @@ def test_common_billing_account_path(): def test_parse_common_billing_account_path(): expected = { - "billing_account": "octopus", + "billing_account": "nautilus", } path = DataprocMetastoreClient.common_billing_account_path(**expected) @@ -5591,7 +5622,7 @@ def test_parse_common_billing_account_path(): def test_common_folder_path(): - folder = "oyster" + folder = "scallop" expected = "folders/{folder}".format( folder=folder, ) @@ -5601,7 +5632,7 @@ def test_common_folder_path(): def test_parse_common_folder_path(): expected = { - "folder": "nudibranch", + "folder": "abalone", } path = DataprocMetastoreClient.common_folder_path(**expected) @@ -5611,7 +5642,7 @@ def test_parse_common_folder_path(): def test_common_organization_path(): - organization = "cuttlefish" + organization = "squid" expected = "organizations/{organization}".format( organization=organization, ) @@ -5621,7 +5652,7 @@ def test_common_organization_path(): def test_parse_common_organization_path(): expected = { - "organization": "mussel", + "organization": "clam", } path = DataprocMetastoreClient.common_organization_path(**expected) @@ -5631,7 +5662,7 @@ def test_parse_common_organization_path(): def test_common_project_path(): - project = "winkle" + project = "whelk" expected = "projects/{project}".format( project=project, ) @@ -5641,7 +5672,7 @@ def test_common_project_path(): def test_parse_common_project_path(): expected = { - "project": "nautilus", + "project": "octopus", } path = DataprocMetastoreClient.common_project_path(**expected) @@ -5651,8 +5682,8 @@ def test_parse_common_project_path(): def test_common_location_path(): - project = "scallop" - location = "abalone" + project = "oyster" + location = "nudibranch" expected = "projects/{project}/locations/{location}".format( project=project, location=location, @@ -5663,8 +5694,8 @@ def test_common_location_path(): def test_parse_common_location_path(): expected = { - "project": "squid", - "location": "clam", + "project": "cuttlefish", + "location": "mussel", } path = DataprocMetastoreClient.common_location_path(**expected) diff --git a/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1/test_dataproc_metastore_federation.py b/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1/test_dataproc_metastore_federation.py new file mode 100644 index 000000000000..a3ca18a87956 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1/test_dataproc_metastore_federation.py @@ -0,0 +1,2931 @@ +# -*- 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. +# +import os + +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER + import mock + +import math + +from google.api_core import ( + future, + gapic_v1, + grpc_helpers, + grpc_helpers_async, + operation, + operations_v1, + path_template, +) +from google.api_core import client_options +from google.api_core import exceptions as core_exceptions +from google.api_core import operation_async # type: ignore +import google.auth +from google.auth import credentials as ga_credentials +from google.auth.exceptions import MutualTLSChannelError +from google.longrunning import operations_pb2 +from google.oauth2 import service_account +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +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.metastore_v1.services.dataproc_metastore_federation import ( + DataprocMetastoreFederationAsyncClient, + DataprocMetastoreFederationClient, + pagers, + transports, +) +from google.cloud.metastore_v1.types import metastore, metastore_federation + + +def client_cert_source_callback(): + return b"cert bytes", b"key bytes" + + +# If default endpoint is localhost, then default mtls endpoint will be the same. +# This method modifies the default endpoint so the client can produce a different +# mtls endpoint for endpoint testing purposes. +def modify_default_endpoint(client): + return ( + "foo.googleapis.com" + if ("localhost" in client.DEFAULT_ENDPOINT) + else client.DEFAULT_ENDPOINT + ) + + +def test__get_default_mtls_endpoint(): + api_endpoint = "example.googleapis.com" + api_mtls_endpoint = "example.mtls.googleapis.com" + sandbox_endpoint = "example.sandbox.googleapis.com" + sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" + non_googleapi = "api.example.com" + + assert DataprocMetastoreFederationClient._get_default_mtls_endpoint(None) is None + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(api_endpoint) + == api_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(api_mtls_endpoint) + == api_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(sandbox_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint( + sandbox_mtls_endpoint + ) + == sandbox_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(non_googleapi) + == non_googleapi + ) + + +@pytest.mark.parametrize( + "client_class,transport_name", + [ + (DataprocMetastoreFederationClient, "grpc"), + (DataprocMetastoreFederationAsyncClient, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_from_service_account_info( + client_class, transport_name +): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object( + service_account.Credentials, "from_service_account_info" + ) as factory: + factory.return_value = creds + info = {"valid": True} + client = client_class.from_service_account_info(info, transport=transport_name) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ("metastore.googleapis.com:443") + + +@pytest.mark.parametrize( + "transport_class,transport_name", + [ + (transports.DataprocMetastoreFederationGrpcTransport, "grpc"), + (transports.DataprocMetastoreFederationGrpcAsyncIOTransport, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_service_account_always_use_jwt( + transport_class, transport_name +): + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=True) + use_jwt.assert_called_once_with(True) + + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=False) + use_jwt.assert_not_called() + + +@pytest.mark.parametrize( + "client_class,transport_name", + [ + (DataprocMetastoreFederationClient, "grpc"), + (DataprocMetastoreFederationAsyncClient, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_from_service_account_file( + client_class, transport_name +): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object( + service_account.Credentials, "from_service_account_file" + ) as factory: + factory.return_value = creds + client = client_class.from_service_account_file( + "dummy/file/path.json", transport=transport_name + ) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + client = client_class.from_service_account_json( + "dummy/file/path.json", transport=transport_name + ) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ("metastore.googleapis.com:443") + + +def test_dataproc_metastore_federation_client_get_transport_class(): + transport = DataprocMetastoreFederationClient.get_transport_class() + available_transports = [ + transports.DataprocMetastoreFederationGrpcTransport, + ] + assert transport in available_transports + + transport = DataprocMetastoreFederationClient.get_transport_class("grpc") + assert transport == transports.DataprocMetastoreFederationGrpcTransport + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +def test_dataproc_metastore_federation_client_client_options( + client_class, transport_class, transport_name +): + # Check that if channel is provided we won't create a new one. + with mock.patch.object( + DataprocMetastoreFederationClient, "get_transport_class" + ) as gtc: + transport = transport_class(credentials=ga_credentials.AnonymousCredentials()) + client = client_class(transport=transport) + gtc.assert_not_called() + + # Check that if channel is provided via str we will create a new one. + with mock.patch.object( + DataprocMetastoreFederationClient, "get_transport_class" + ) as gtc: + client = client_class(transport=transport_name) + gtc.assert_called() + + # Check the case api_endpoint is provided. + options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name, client_options=options) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has + # unsupported value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): + with pytest.raises(MutualTLSChannelError): + client = client_class(transport=transport_name) + + # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"} + ): + with pytest.raises(ValueError): + client = client_class(transport=transport_name) + + # Check the case quota_project_id is provided + options = client_options.ClientOptions(quota_project_id="octopus") + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + # Check the case api_endpoint is provided + options = client_options.ClientOptions( + api_audience="https://language.googleapis.com" + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience="https://language.googleapis.com", + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,use_client_cert_env", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + "true", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + "true", + ), + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + "false", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + "false", + ), + ], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) +def test_dataproc_metastore_federation_client_mtls_env_auto( + client_class, transport_class, transport_name, use_client_cert_env +): + # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default + # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. + + # Check the case client_cert_source is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + options = client_options.ClientOptions( + client_cert_source=client_cert_source_callback + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + + if use_client_cert_env == "false": + expected_client_cert_source = None + expected_host = client.DEFAULT_ENDPOINT + else: + expected_client_cert_source = client_cert_source_callback + expected_host = client.DEFAULT_MTLS_ENDPOINT + + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case ADC client cert is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + with mock.patch( + "google.auth.transport.mtls.default_client_cert_source", + return_value=client_cert_source_callback, + ): + if use_client_cert_env == "false": + expected_host = client.DEFAULT_ENDPOINT + expected_client_cert_source = None + else: + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_client_cert_source = client_cert_source_callback + + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case client_cert_source and ADC client cert are not provided. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + ): + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class", + [DataprocMetastoreFederationClient, DataprocMetastoreFederationAsyncClient], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +def test_dataproc_metastore_federation_client_get_mtls_endpoint_and_cert_source( + client_class, +): + mock_client_cert_source = mock.Mock() + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + mock_api_endpoint = "foo" + options = client_options.ClientOptions( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + ) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source( + options + ) + assert api_endpoint == mock_api_endpoint + assert cert_source == mock_client_cert_source + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): + mock_client_cert_source = mock.Mock() + mock_api_endpoint = "foo" + options = client_options.ClientOptions( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + ) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source( + options + ) + assert api_endpoint == mock_api_endpoint + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + ): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + with mock.patch( + "google.auth.transport.mtls.default_client_cert_source", + return_value=mock_client_cert_source, + ): + ( + api_endpoint, + cert_source, + ) = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source == mock_client_cert_source + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +def test_dataproc_metastore_federation_client_client_options_scopes( + client_class, transport_class, transport_name +): + # Check the case scopes are provided. + options = client_options.ClientOptions( + scopes=["1", "2"], + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=["1", "2"], + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,grpc_helpers", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + grpc_helpers, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_client_client_options_credentials_file( + client_class, transport_class, transport_name, grpc_helpers +): + # Check the case credentials file is provided. + options = client_options.ClientOptions(credentials_file="credentials.json") + + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +def test_dataproc_metastore_federation_client_client_options_from_dict(): + with mock.patch( + "google.cloud.metastore_v1.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationGrpcTransport.__init__" + ) as grpc_transport: + grpc_transport.return_value = None + client = DataprocMetastoreFederationClient( + client_options={"api_endpoint": "squid.clam.whelk"} + ) + grpc_transport.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,grpc_helpers", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + grpc_helpers, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_client_create_channel_credentials_file( + client_class, transport_class, transport_name, grpc_helpers +): + # Check the case credentials file is provided. + options = client_options.ClientOptions(credentials_file="credentials.json") + + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # test that the credentials from file are saved and used as the credentials. + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel" + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + file_creds = ga_credentials.AnonymousCredentials() + load_creds.return_value = (file_creds, None) + adc.return_value = (creds, None) + client = client_class(client_options=options, transport=transport_name) + create_channel.assert_called_with( + "metastore.googleapis.com:443", + credentials=file_creds, + credentials_file=None, + quota_project_id=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=None, + default_host="metastore.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.ListFederationsRequest, + dict, + ], +) +def test_list_federations(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse( + next_page_token="next_page_token_value", + unreachable=["unreachable_value"], + ) + response = client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFederationsPager) + assert response.next_page_token == "next_page_token_value" + assert response.unreachable == ["unreachable_value"] + + +def test_list_federations_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + client.list_federations() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + +@pytest.mark.asyncio +async def test_list_federations_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.ListFederationsRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse( + next_page_token="next_page_token_value", + unreachable=["unreachable_value"], + ) + ) + response = await client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFederationsAsyncPager) + assert response.next_page_token == "next_page_token_value" + assert response.unreachable == ["unreachable_value"] + + +@pytest.mark.asyncio +async def test_list_federations_async_from_dict(): + await test_list_federations_async(request_type=dict) + + +def test_list_federations_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.ListFederationsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + call.return_value = metastore_federation.ListFederationsResponse() + client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_list_federations_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.ListFederationsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse() + ) + await client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_list_federations_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_federations( + parent="parent_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + + +def test_list_federations_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_federations( + metastore_federation.ListFederationsRequest(), + parent="parent_value", + ) + + +@pytest.mark.asyncio +async def test_list_federations_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_federations( + parent="parent_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_list_federations_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_federations( + metastore_federation.ListFederationsRequest(), + parent="parent_value", + ) + + +def test_list_federations_pager(transport_name: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_federations(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, metastore_federation.Federation) for i in results) + + +def test_list_federations_pages(transport_name: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + pages = list(client.list_federations(request={}).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.asyncio +async def test_list_federations_async_pager(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_federations), "__call__", new_callable=mock.AsyncMock + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_federations( + request={}, + ) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, metastore_federation.Federation) for i in responses) + + +@pytest.mark.asyncio +async def test_list_federations_async_pages(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_federations), "__call__", new_callable=mock.AsyncMock + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in ( + await client.list_federations(request={}) + ).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.GetFederationRequest, + dict, + ], +) +def test_get_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation( + name="name_value", + version="version_value", + endpoint_uri="endpoint_uri_value", + state=metastore_federation.Federation.State.CREATING, + state_message="state_message_value", + uid="uid_value", + ) + response = client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, metastore_federation.Federation) + assert response.name == "name_value" + assert response.version == "version_value" + assert response.endpoint_uri == "endpoint_uri_value" + assert response.state == metastore_federation.Federation.State.CREATING + assert response.state_message == "state_message_value" + assert response.uid == "uid_value" + + +def test_get_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + client.get_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + +@pytest.mark.asyncio +async def test_get_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.GetFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation( + name="name_value", + version="version_value", + endpoint_uri="endpoint_uri_value", + state=metastore_federation.Federation.State.CREATING, + state_message="state_message_value", + uid="uid_value", + ) + ) + response = await client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, metastore_federation.Federation) + assert response.name == "name_value" + assert response.version == "version_value" + assert response.endpoint_uri == "endpoint_uri_value" + assert response.state == metastore_federation.Federation.State.CREATING + assert response.state_message == "state_message_value" + assert response.uid == "uid_value" + + +@pytest.mark.asyncio +async def test_get_federation_async_from_dict(): + await test_get_federation_async(request_type=dict) + + +def test_get_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.GetFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + call.return_value = metastore_federation.Federation() + client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_get_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.GetFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation() + ) + await client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +def test_get_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +def test_get_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_federation( + metastore_federation.GetFederationRequest(), + name="name_value", + ) + + +@pytest.mark.asyncio +async def test_get_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_get_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_federation( + metastore_federation.GetFederationRequest(), + name="name_value", + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.CreateFederationRequest, + dict, + ], +) +def test_create_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_create_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + client.create_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + +@pytest.mark.asyncio +async def test_create_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.CreateFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_create_federation_async_from_dict(): + await test_create_federation_async(request_type=dict) + + +def test_create_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.CreateFederationRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_create_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.CreateFederationRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_create_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_federation( + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].federation_id + mock_val = "federation_id_value" + assert arg == mock_val + + +def test_create_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_federation( + metastore_federation.CreateFederationRequest(), + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + +@pytest.mark.asyncio +async def test_create_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_federation( + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].federation_id + mock_val = "federation_id_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_create_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_federation( + metastore_federation.CreateFederationRequest(), + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.UpdateFederationRequest, + dict, + ], +) +def test_update_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_update_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + client.update_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + +@pytest.mark.asyncio +async def test_update_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.UpdateFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_update_federation_async_from_dict(): + await test_update_federation_async(request_type=dict) + + +def test_update_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.UpdateFederationRequest() + + request.federation.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "federation.name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_update_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.UpdateFederationRequest() + + request.federation.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "federation.name=name_value", + ) in kw["metadata"] + + +def test_update_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_federation( + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + assert arg == mock_val + + +def test_update_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_federation( + metastore_federation.UpdateFederationRequest(), + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + +@pytest.mark.asyncio +async def test_update_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_federation( + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_update_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_federation( + metastore_federation.UpdateFederationRequest(), + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.DeleteFederationRequest, + dict, + ], +) +def test_delete_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_delete_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + client.delete_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + +@pytest.mark.asyncio +async def test_delete_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.DeleteFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_delete_federation_async_from_dict(): + await test_delete_federation_async(request_type=dict) + + +def test_delete_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.DeleteFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_delete_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.DeleteFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +def test_delete_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +def test_delete_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_federation( + metastore_federation.DeleteFederationRequest(), + name="name_value", + ) + + +@pytest.mark.asyncio +async def test_delete_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_delete_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.delete_federation( + metastore_federation.DeleteFederationRequest(), + name="name_value", + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = DataprocMetastoreFederationClient(transport=transport) + assert client.transport is transport + + +def test_transport_get_channel(): + # A client may be instantiated with a custom transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + transport = transports.DataprocMetastoreFederationGrpcAsyncIOTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class() + adc.assert_called_once() + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + ], +) +def test_transport_kind(transport_name): + transport = DataprocMetastoreFederationClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + +def test_transport_grpc_default(): + # A client should use the gRPC transport by default. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert isinstance( + client.transport, + transports.DataprocMetastoreFederationGrpcTransport, + ) + + +def test_dataproc_metastore_federation_base_transport_error(): + # Passing both a credentials object and credentials_file should raise an error + with pytest.raises(core_exceptions.DuplicateCredentialArgs): + transport = transports.DataprocMetastoreFederationTransport( + credentials=ga_credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_dataproc_metastore_federation_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.metastore_v1.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.DataprocMetastoreFederationTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "list_federations", + "get_federation", + "create_federation", + "update_federation", + "delete_federation", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + with pytest.raises(NotImplementedError): + transport.close() + + # Additionally, the LRO client (a property) should + # also raise NotImplementedError + with pytest.raises(NotImplementedError): + transport.operations_client + + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + + +def test_dataproc_metastore_federation_base_transport_with_credentials_file(): + # Instantiate the base transport with a credentials file + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch( + "google.cloud.metastore_v1.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.DataprocMetastoreFederationTransport( + credentials_file="credentials.json", + quota_project_id="octopus", + ) + load_creds.assert_called_once_with( + "credentials.json", + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +def test_dataproc_metastore_federation_base_transport_with_adc(): + # Test the default credentials are used if credentials and credentials_file are None. + with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( + "google.cloud.metastore_v1.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.DataprocMetastoreFederationTransport() + adc.assert_called_once() + + +def test_dataproc_metastore_federation_auth_adc(): + # If no credentials are provided, we should use ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + DataprocMetastoreFederationClient() + adc.assert_called_once_with( + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id=None, + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_auth_adc(transport_class): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + adc.assert_called_once_with( + scopes=["1", "2"], + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_auth_gdch_credentials(transport_class): + host = "https://language.com" + api_audience_tests = [None, "https://language2.com"] + api_audience_expect = [host, "https://language2.com"] + for t, e in zip(api_audience_tests, api_audience_expect): + with mock.patch.object(google.auth, "default", autospec=True) as adc: + gdch_mock = mock.MagicMock() + type(gdch_mock).with_gdch_audience = mock.PropertyMock( + return_value=gdch_mock + ) + adc.return_value = (gdch_mock, None) + transport_class(host=host, api_audience=t) + gdch_mock.with_gdch_audience.assert_called_once_with(e) + + +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.DataprocMetastoreFederationGrpcTransport, grpc_helpers), + ( + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_transport_create_channel( + transport_class, grpc_helpers +): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + + create_channel.assert_called_with( + "metastore.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=["1", "2"], + default_host="metastore.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_grpc_transport_client_cert_source_for_mtls( + transport_class, +): + cred = ga_credentials.AnonymousCredentials() + + # Check ssl_channel_credentials is used if provided. + with mock.patch.object(transport_class, "create_channel") as mock_create_channel: + mock_ssl_channel_creds = mock.Mock() + transport_class( + host="squid.clam.whelk", + credentials=cred, + ssl_channel_credentials=mock_ssl_channel_creds, + ) + mock_create_channel.assert_called_once_with( + "squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_channel_creds, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls + # is used. + with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): + with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: + transport_class( + credentials=cred, + client_cert_source_for_mtls=client_cert_source_callback, + ) + expected_cert, expected_key = client_cert_source_callback() + mock_ssl_cred.assert_called_once_with( + certificate_chain=expected_cert, private_key=expected_key + ) + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_dataproc_metastore_federation_host_no_port(transport_name): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="metastore.googleapis.com" + ), + transport=transport_name, + ) + assert client.transport._host == ("metastore.googleapis.com:443") + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_dataproc_metastore_federation_host_with_port(transport_name): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="metastore.googleapis.com:8000" + ), + transport=transport_name, + ) + assert client.transport._host == ("metastore.googleapis.com:8000") + + +def test_dataproc_metastore_federation_grpc_transport_channel(): + channel = grpc.secure_channel("http://localhost/", grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.DataprocMetastoreFederationGrpcTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +def test_dataproc_metastore_federation_grpc_asyncio_transport_channel(): + channel = aio.secure_channel("http://localhost/", grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.DataprocMetastoreFederationGrpcAsyncIOTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_channel_mtls_with_client_cert_source( + transport_class, +): + with mock.patch( + "grpc.ssl_channel_credentials", autospec=True + ) as grpc_ssl_channel_cred: + with mock.patch.object( + transport_class, "create_channel" + ) as grpc_create_channel: + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + cred = ga_credentials.AnonymousCredentials() + with pytest.warns(DeprecationWarning): + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (cred, None) + transport = transport_class( + host="squid.clam.whelk", + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + adc.assert_called_once() + + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + assert transport._ssl_channel_credentials == mock_ssl_cred + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_channel_mtls_with_adc(transport_class): + mock_ssl_cred = mock.Mock() + with mock.patch.multiple( + "google.auth.transport.grpc.SslCredentials", + __init__=mock.Mock(return_value=None), + ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), + ): + with mock.patch.object( + transport_class, "create_channel" + ) as grpc_create_channel: + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + mock_cred = mock.Mock() + + with pytest.warns(DeprecationWarning): + transport = transport_class( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=None, + ) + + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + + +def test_dataproc_metastore_federation_grpc_lro_client(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_dataproc_metastore_federation_grpc_lro_async_client(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsAsyncClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_federation_path(): + project = "squid" + location = "clam" + federation = "whelk" + expected = ( + "projects/{project}/locations/{location}/federations/{federation}".format( + project=project, + location=location, + federation=federation, + ) + ) + actual = DataprocMetastoreFederationClient.federation_path( + project, location, federation + ) + assert expected == actual + + +def test_parse_federation_path(): + expected = { + "project": "octopus", + "location": "oyster", + "federation": "nudibranch", + } + path = DataprocMetastoreFederationClient.federation_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_federation_path(path) + assert expected == actual + + +def test_common_billing_account_path(): + billing_account = "cuttlefish" + expected = "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + actual = DataprocMetastoreFederationClient.common_billing_account_path( + billing_account + ) + assert expected == actual + + +def test_parse_common_billing_account_path(): + expected = { + "billing_account": "mussel", + } + path = DataprocMetastoreFederationClient.common_billing_account_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_billing_account_path(path) + assert expected == actual + + +def test_common_folder_path(): + folder = "winkle" + expected = "folders/{folder}".format( + folder=folder, + ) + actual = DataprocMetastoreFederationClient.common_folder_path(folder) + assert expected == actual + + +def test_parse_common_folder_path(): + expected = { + "folder": "nautilus", + } + path = DataprocMetastoreFederationClient.common_folder_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_folder_path(path) + assert expected == actual + + +def test_common_organization_path(): + organization = "scallop" + expected = "organizations/{organization}".format( + organization=organization, + ) + actual = DataprocMetastoreFederationClient.common_organization_path(organization) + assert expected == actual + + +def test_parse_common_organization_path(): + expected = { + "organization": "abalone", + } + path = DataprocMetastoreFederationClient.common_organization_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_organization_path(path) + assert expected == actual + + +def test_common_project_path(): + project = "squid" + expected = "projects/{project}".format( + project=project, + ) + actual = DataprocMetastoreFederationClient.common_project_path(project) + assert expected == actual + + +def test_parse_common_project_path(): + expected = { + "project": "clam", + } + path = DataprocMetastoreFederationClient.common_project_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_project_path(path) + assert expected == actual + + +def test_common_location_path(): + project = "whelk" + location = "octopus" + expected = "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + actual = DataprocMetastoreFederationClient.common_location_path(project, location) + assert expected == actual + + +def test_parse_common_location_path(): + expected = { + "project": "oyster", + "location": "nudibranch", + } + path = DataprocMetastoreFederationClient.common_location_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_location_path(path) + assert expected == actual + + +def test_client_with_default_client_info(): + client_info = gapic_v1.client_info.ClientInfo() + + with mock.patch.object( + transports.DataprocMetastoreFederationTransport, "_prep_wrapped_messages" + ) as prep: + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + with mock.patch.object( + transports.DataprocMetastoreFederationTransport, "_prep_wrapped_messages" + ) as prep: + transport_class = DataprocMetastoreFederationClient.get_transport_class() + transport = transport_class( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + +@pytest.mark.asyncio +async def test_transport_close_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + with mock.patch.object( + type(getattr(client.transport, "grpc_channel")), "close" + ) as close: + async with client: + close.assert_not_called() + close.assert_called_once() + + +def test_transport_close(): + transports = { + "grpc": "_grpc_channel", + } + + for transport, close_name in transports.items(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + with mock.patch.object( + type(getattr(client.transport, close_name)), "close" + ) as close: + with client: + close.assert_not_called() + close.assert_called_once() + + +def test_client_ctx(): + transports = [ + "grpc", + ] + for transport in transports: + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + # Test client calls underlying transport. + with mock.patch.object(type(client.transport), "close") as close: + close.assert_not_called() + with client: + pass + close.assert_called() + + +@pytest.mark.parametrize( + "client_class,transport_class", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ), + ], +) +def test_api_key_credentials(client_class, transport_class): + with mock.patch.object( + google.auth._default, "get_api_key_credentials", create=True + ) as get_api_key_credentials: + mock_cred = mock.Mock() + get_api_key_credentials.return_value = mock_cred + options = client_options.ClientOptions() + options.api_key = "api_key" + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options) + patched.assert_called_once_with( + credentials=mock_cred, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) diff --git a/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1alpha/test_dataproc_metastore.py b/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1alpha/test_dataproc_metastore.py index 3d06b20137ae..7e436f665066 100644 --- a/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1alpha/test_dataproc_metastore.py +++ b/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1alpha/test_dataproc_metastore.py @@ -41,6 +41,7 @@ from google.auth.exceptions import MutualTLSChannelError from google.longrunning import operations_pb2 from google.oauth2 import service_account +from google.protobuf import empty_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 diff --git a/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1alpha/test_dataproc_metastore_federation.py b/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1alpha/test_dataproc_metastore_federation.py new file mode 100644 index 000000000000..0e724589e29e --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1alpha/test_dataproc_metastore_federation.py @@ -0,0 +1,2931 @@ +# -*- 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. +# +import os + +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER + import mock + +import math + +from google.api_core import ( + future, + gapic_v1, + grpc_helpers, + grpc_helpers_async, + operation, + operations_v1, + path_template, +) +from google.api_core import client_options +from google.api_core import exceptions as core_exceptions +from google.api_core import operation_async # type: ignore +import google.auth +from google.auth import credentials as ga_credentials +from google.auth.exceptions import MutualTLSChannelError +from google.longrunning import operations_pb2 +from google.oauth2 import service_account +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +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.metastore_v1alpha.services.dataproc_metastore_federation import ( + DataprocMetastoreFederationAsyncClient, + DataprocMetastoreFederationClient, + pagers, + transports, +) +from google.cloud.metastore_v1alpha.types import metastore, metastore_federation + + +def client_cert_source_callback(): + return b"cert bytes", b"key bytes" + + +# If default endpoint is localhost, then default mtls endpoint will be the same. +# This method modifies the default endpoint so the client can produce a different +# mtls endpoint for endpoint testing purposes. +def modify_default_endpoint(client): + return ( + "foo.googleapis.com" + if ("localhost" in client.DEFAULT_ENDPOINT) + else client.DEFAULT_ENDPOINT + ) + + +def test__get_default_mtls_endpoint(): + api_endpoint = "example.googleapis.com" + api_mtls_endpoint = "example.mtls.googleapis.com" + sandbox_endpoint = "example.sandbox.googleapis.com" + sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" + non_googleapi = "api.example.com" + + assert DataprocMetastoreFederationClient._get_default_mtls_endpoint(None) is None + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(api_endpoint) + == api_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(api_mtls_endpoint) + == api_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(sandbox_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint( + sandbox_mtls_endpoint + ) + == sandbox_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(non_googleapi) + == non_googleapi + ) + + +@pytest.mark.parametrize( + "client_class,transport_name", + [ + (DataprocMetastoreFederationClient, "grpc"), + (DataprocMetastoreFederationAsyncClient, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_from_service_account_info( + client_class, transport_name +): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object( + service_account.Credentials, "from_service_account_info" + ) as factory: + factory.return_value = creds + info = {"valid": True} + client = client_class.from_service_account_info(info, transport=transport_name) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ("metastore.googleapis.com:443") + + +@pytest.mark.parametrize( + "transport_class,transport_name", + [ + (transports.DataprocMetastoreFederationGrpcTransport, "grpc"), + (transports.DataprocMetastoreFederationGrpcAsyncIOTransport, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_service_account_always_use_jwt( + transport_class, transport_name +): + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=True) + use_jwt.assert_called_once_with(True) + + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=False) + use_jwt.assert_not_called() + + +@pytest.mark.parametrize( + "client_class,transport_name", + [ + (DataprocMetastoreFederationClient, "grpc"), + (DataprocMetastoreFederationAsyncClient, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_from_service_account_file( + client_class, transport_name +): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object( + service_account.Credentials, "from_service_account_file" + ) as factory: + factory.return_value = creds + client = client_class.from_service_account_file( + "dummy/file/path.json", transport=transport_name + ) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + client = client_class.from_service_account_json( + "dummy/file/path.json", transport=transport_name + ) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ("metastore.googleapis.com:443") + + +def test_dataproc_metastore_federation_client_get_transport_class(): + transport = DataprocMetastoreFederationClient.get_transport_class() + available_transports = [ + transports.DataprocMetastoreFederationGrpcTransport, + ] + assert transport in available_transports + + transport = DataprocMetastoreFederationClient.get_transport_class("grpc") + assert transport == transports.DataprocMetastoreFederationGrpcTransport + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +def test_dataproc_metastore_federation_client_client_options( + client_class, transport_class, transport_name +): + # Check that if channel is provided we won't create a new one. + with mock.patch.object( + DataprocMetastoreFederationClient, "get_transport_class" + ) as gtc: + transport = transport_class(credentials=ga_credentials.AnonymousCredentials()) + client = client_class(transport=transport) + gtc.assert_not_called() + + # Check that if channel is provided via str we will create a new one. + with mock.patch.object( + DataprocMetastoreFederationClient, "get_transport_class" + ) as gtc: + client = client_class(transport=transport_name) + gtc.assert_called() + + # Check the case api_endpoint is provided. + options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name, client_options=options) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has + # unsupported value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): + with pytest.raises(MutualTLSChannelError): + client = client_class(transport=transport_name) + + # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"} + ): + with pytest.raises(ValueError): + client = client_class(transport=transport_name) + + # Check the case quota_project_id is provided + options = client_options.ClientOptions(quota_project_id="octopus") + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + # Check the case api_endpoint is provided + options = client_options.ClientOptions( + api_audience="https://language.googleapis.com" + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience="https://language.googleapis.com", + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,use_client_cert_env", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + "true", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + "true", + ), + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + "false", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + "false", + ), + ], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) +def test_dataproc_metastore_federation_client_mtls_env_auto( + client_class, transport_class, transport_name, use_client_cert_env +): + # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default + # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. + + # Check the case client_cert_source is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + options = client_options.ClientOptions( + client_cert_source=client_cert_source_callback + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + + if use_client_cert_env == "false": + expected_client_cert_source = None + expected_host = client.DEFAULT_ENDPOINT + else: + expected_client_cert_source = client_cert_source_callback + expected_host = client.DEFAULT_MTLS_ENDPOINT + + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case ADC client cert is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + with mock.patch( + "google.auth.transport.mtls.default_client_cert_source", + return_value=client_cert_source_callback, + ): + if use_client_cert_env == "false": + expected_host = client.DEFAULT_ENDPOINT + expected_client_cert_source = None + else: + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_client_cert_source = client_cert_source_callback + + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case client_cert_source and ADC client cert are not provided. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + ): + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class", + [DataprocMetastoreFederationClient, DataprocMetastoreFederationAsyncClient], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +def test_dataproc_metastore_federation_client_get_mtls_endpoint_and_cert_source( + client_class, +): + mock_client_cert_source = mock.Mock() + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + mock_api_endpoint = "foo" + options = client_options.ClientOptions( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + ) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source( + options + ) + assert api_endpoint == mock_api_endpoint + assert cert_source == mock_client_cert_source + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): + mock_client_cert_source = mock.Mock() + mock_api_endpoint = "foo" + options = client_options.ClientOptions( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + ) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source( + options + ) + assert api_endpoint == mock_api_endpoint + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + ): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + with mock.patch( + "google.auth.transport.mtls.default_client_cert_source", + return_value=mock_client_cert_source, + ): + ( + api_endpoint, + cert_source, + ) = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source == mock_client_cert_source + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +def test_dataproc_metastore_federation_client_client_options_scopes( + client_class, transport_class, transport_name +): + # Check the case scopes are provided. + options = client_options.ClientOptions( + scopes=["1", "2"], + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=["1", "2"], + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,grpc_helpers", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + grpc_helpers, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_client_client_options_credentials_file( + client_class, transport_class, transport_name, grpc_helpers +): + # Check the case credentials file is provided. + options = client_options.ClientOptions(credentials_file="credentials.json") + + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +def test_dataproc_metastore_federation_client_client_options_from_dict(): + with mock.patch( + "google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationGrpcTransport.__init__" + ) as grpc_transport: + grpc_transport.return_value = None + client = DataprocMetastoreFederationClient( + client_options={"api_endpoint": "squid.clam.whelk"} + ) + grpc_transport.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,grpc_helpers", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + grpc_helpers, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_client_create_channel_credentials_file( + client_class, transport_class, transport_name, grpc_helpers +): + # Check the case credentials file is provided. + options = client_options.ClientOptions(credentials_file="credentials.json") + + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # test that the credentials from file are saved and used as the credentials. + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel" + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + file_creds = ga_credentials.AnonymousCredentials() + load_creds.return_value = (file_creds, None) + adc.return_value = (creds, None) + client = client_class(client_options=options, transport=transport_name) + create_channel.assert_called_with( + "metastore.googleapis.com:443", + credentials=file_creds, + credentials_file=None, + quota_project_id=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=None, + default_host="metastore.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.ListFederationsRequest, + dict, + ], +) +def test_list_federations(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse( + next_page_token="next_page_token_value", + unreachable=["unreachable_value"], + ) + response = client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFederationsPager) + assert response.next_page_token == "next_page_token_value" + assert response.unreachable == ["unreachable_value"] + + +def test_list_federations_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + client.list_federations() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + +@pytest.mark.asyncio +async def test_list_federations_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.ListFederationsRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse( + next_page_token="next_page_token_value", + unreachable=["unreachable_value"], + ) + ) + response = await client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFederationsAsyncPager) + assert response.next_page_token == "next_page_token_value" + assert response.unreachable == ["unreachable_value"] + + +@pytest.mark.asyncio +async def test_list_federations_async_from_dict(): + await test_list_federations_async(request_type=dict) + + +def test_list_federations_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.ListFederationsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + call.return_value = metastore_federation.ListFederationsResponse() + client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_list_federations_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.ListFederationsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse() + ) + await client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_list_federations_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_federations( + parent="parent_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + + +def test_list_federations_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_federations( + metastore_federation.ListFederationsRequest(), + parent="parent_value", + ) + + +@pytest.mark.asyncio +async def test_list_federations_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_federations( + parent="parent_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_list_federations_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_federations( + metastore_federation.ListFederationsRequest(), + parent="parent_value", + ) + + +def test_list_federations_pager(transport_name: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_federations(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, metastore_federation.Federation) for i in results) + + +def test_list_federations_pages(transport_name: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + pages = list(client.list_federations(request={}).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.asyncio +async def test_list_federations_async_pager(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_federations), "__call__", new_callable=mock.AsyncMock + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_federations( + request={}, + ) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, metastore_federation.Federation) for i in responses) + + +@pytest.mark.asyncio +async def test_list_federations_async_pages(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_federations), "__call__", new_callable=mock.AsyncMock + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in ( + await client.list_federations(request={}) + ).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.GetFederationRequest, + dict, + ], +) +def test_get_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation( + name="name_value", + version="version_value", + endpoint_uri="endpoint_uri_value", + state=metastore_federation.Federation.State.CREATING, + state_message="state_message_value", + uid="uid_value", + ) + response = client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, metastore_federation.Federation) + assert response.name == "name_value" + assert response.version == "version_value" + assert response.endpoint_uri == "endpoint_uri_value" + assert response.state == metastore_federation.Federation.State.CREATING + assert response.state_message == "state_message_value" + assert response.uid == "uid_value" + + +def test_get_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + client.get_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + +@pytest.mark.asyncio +async def test_get_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.GetFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation( + name="name_value", + version="version_value", + endpoint_uri="endpoint_uri_value", + state=metastore_federation.Federation.State.CREATING, + state_message="state_message_value", + uid="uid_value", + ) + ) + response = await client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, metastore_federation.Federation) + assert response.name == "name_value" + assert response.version == "version_value" + assert response.endpoint_uri == "endpoint_uri_value" + assert response.state == metastore_federation.Federation.State.CREATING + assert response.state_message == "state_message_value" + assert response.uid == "uid_value" + + +@pytest.mark.asyncio +async def test_get_federation_async_from_dict(): + await test_get_federation_async(request_type=dict) + + +def test_get_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.GetFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + call.return_value = metastore_federation.Federation() + client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_get_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.GetFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation() + ) + await client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +def test_get_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +def test_get_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_federation( + metastore_federation.GetFederationRequest(), + name="name_value", + ) + + +@pytest.mark.asyncio +async def test_get_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_get_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_federation( + metastore_federation.GetFederationRequest(), + name="name_value", + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.CreateFederationRequest, + dict, + ], +) +def test_create_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_create_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + client.create_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + +@pytest.mark.asyncio +async def test_create_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.CreateFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_create_federation_async_from_dict(): + await test_create_federation_async(request_type=dict) + + +def test_create_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.CreateFederationRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_create_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.CreateFederationRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_create_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_federation( + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].federation_id + mock_val = "federation_id_value" + assert arg == mock_val + + +def test_create_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_federation( + metastore_federation.CreateFederationRequest(), + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + +@pytest.mark.asyncio +async def test_create_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_federation( + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].federation_id + mock_val = "federation_id_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_create_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_federation( + metastore_federation.CreateFederationRequest(), + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.UpdateFederationRequest, + dict, + ], +) +def test_update_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_update_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + client.update_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + +@pytest.mark.asyncio +async def test_update_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.UpdateFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_update_federation_async_from_dict(): + await test_update_federation_async(request_type=dict) + + +def test_update_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.UpdateFederationRequest() + + request.federation.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "federation.name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_update_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.UpdateFederationRequest() + + request.federation.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "federation.name=name_value", + ) in kw["metadata"] + + +def test_update_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_federation( + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + assert arg == mock_val + + +def test_update_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_federation( + metastore_federation.UpdateFederationRequest(), + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + +@pytest.mark.asyncio +async def test_update_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_federation( + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_update_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_federation( + metastore_federation.UpdateFederationRequest(), + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.DeleteFederationRequest, + dict, + ], +) +def test_delete_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_delete_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + client.delete_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + +@pytest.mark.asyncio +async def test_delete_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.DeleteFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_delete_federation_async_from_dict(): + await test_delete_federation_async(request_type=dict) + + +def test_delete_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.DeleteFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_delete_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.DeleteFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +def test_delete_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +def test_delete_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_federation( + metastore_federation.DeleteFederationRequest(), + name="name_value", + ) + + +@pytest.mark.asyncio +async def test_delete_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_delete_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.delete_federation( + metastore_federation.DeleteFederationRequest(), + name="name_value", + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = DataprocMetastoreFederationClient(transport=transport) + assert client.transport is transport + + +def test_transport_get_channel(): + # A client may be instantiated with a custom transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + transport = transports.DataprocMetastoreFederationGrpcAsyncIOTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class() + adc.assert_called_once() + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + ], +) +def test_transport_kind(transport_name): + transport = DataprocMetastoreFederationClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + +def test_transport_grpc_default(): + # A client should use the gRPC transport by default. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert isinstance( + client.transport, + transports.DataprocMetastoreFederationGrpcTransport, + ) + + +def test_dataproc_metastore_federation_base_transport_error(): + # Passing both a credentials object and credentials_file should raise an error + with pytest.raises(core_exceptions.DuplicateCredentialArgs): + transport = transports.DataprocMetastoreFederationTransport( + credentials=ga_credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_dataproc_metastore_federation_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.DataprocMetastoreFederationTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "list_federations", + "get_federation", + "create_federation", + "update_federation", + "delete_federation", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + with pytest.raises(NotImplementedError): + transport.close() + + # Additionally, the LRO client (a property) should + # also raise NotImplementedError + with pytest.raises(NotImplementedError): + transport.operations_client + + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + + +def test_dataproc_metastore_federation_base_transport_with_credentials_file(): + # Instantiate the base transport with a credentials file + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch( + "google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.DataprocMetastoreFederationTransport( + credentials_file="credentials.json", + quota_project_id="octopus", + ) + load_creds.assert_called_once_with( + "credentials.json", + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +def test_dataproc_metastore_federation_base_transport_with_adc(): + # Test the default credentials are used if credentials and credentials_file are None. + with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( + "google.cloud.metastore_v1alpha.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.DataprocMetastoreFederationTransport() + adc.assert_called_once() + + +def test_dataproc_metastore_federation_auth_adc(): + # If no credentials are provided, we should use ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + DataprocMetastoreFederationClient() + adc.assert_called_once_with( + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id=None, + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_auth_adc(transport_class): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + adc.assert_called_once_with( + scopes=["1", "2"], + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_auth_gdch_credentials(transport_class): + host = "https://language.com" + api_audience_tests = [None, "https://language2.com"] + api_audience_expect = [host, "https://language2.com"] + for t, e in zip(api_audience_tests, api_audience_expect): + with mock.patch.object(google.auth, "default", autospec=True) as adc: + gdch_mock = mock.MagicMock() + type(gdch_mock).with_gdch_audience = mock.PropertyMock( + return_value=gdch_mock + ) + adc.return_value = (gdch_mock, None) + transport_class(host=host, api_audience=t) + gdch_mock.with_gdch_audience.assert_called_once_with(e) + + +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.DataprocMetastoreFederationGrpcTransport, grpc_helpers), + ( + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_transport_create_channel( + transport_class, grpc_helpers +): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + + create_channel.assert_called_with( + "metastore.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=["1", "2"], + default_host="metastore.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_grpc_transport_client_cert_source_for_mtls( + transport_class, +): + cred = ga_credentials.AnonymousCredentials() + + # Check ssl_channel_credentials is used if provided. + with mock.patch.object(transport_class, "create_channel") as mock_create_channel: + mock_ssl_channel_creds = mock.Mock() + transport_class( + host="squid.clam.whelk", + credentials=cred, + ssl_channel_credentials=mock_ssl_channel_creds, + ) + mock_create_channel.assert_called_once_with( + "squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_channel_creds, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls + # is used. + with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): + with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: + transport_class( + credentials=cred, + client_cert_source_for_mtls=client_cert_source_callback, + ) + expected_cert, expected_key = client_cert_source_callback() + mock_ssl_cred.assert_called_once_with( + certificate_chain=expected_cert, private_key=expected_key + ) + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_dataproc_metastore_federation_host_no_port(transport_name): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="metastore.googleapis.com" + ), + transport=transport_name, + ) + assert client.transport._host == ("metastore.googleapis.com:443") + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_dataproc_metastore_federation_host_with_port(transport_name): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="metastore.googleapis.com:8000" + ), + transport=transport_name, + ) + assert client.transport._host == ("metastore.googleapis.com:8000") + + +def test_dataproc_metastore_federation_grpc_transport_channel(): + channel = grpc.secure_channel("http://localhost/", grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.DataprocMetastoreFederationGrpcTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +def test_dataproc_metastore_federation_grpc_asyncio_transport_channel(): + channel = aio.secure_channel("http://localhost/", grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.DataprocMetastoreFederationGrpcAsyncIOTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_channel_mtls_with_client_cert_source( + transport_class, +): + with mock.patch( + "grpc.ssl_channel_credentials", autospec=True + ) as grpc_ssl_channel_cred: + with mock.patch.object( + transport_class, "create_channel" + ) as grpc_create_channel: + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + cred = ga_credentials.AnonymousCredentials() + with pytest.warns(DeprecationWarning): + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (cred, None) + transport = transport_class( + host="squid.clam.whelk", + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + adc.assert_called_once() + + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + assert transport._ssl_channel_credentials == mock_ssl_cred + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_channel_mtls_with_adc(transport_class): + mock_ssl_cred = mock.Mock() + with mock.patch.multiple( + "google.auth.transport.grpc.SslCredentials", + __init__=mock.Mock(return_value=None), + ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), + ): + with mock.patch.object( + transport_class, "create_channel" + ) as grpc_create_channel: + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + mock_cred = mock.Mock() + + with pytest.warns(DeprecationWarning): + transport = transport_class( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=None, + ) + + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + + +def test_dataproc_metastore_federation_grpc_lro_client(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_dataproc_metastore_federation_grpc_lro_async_client(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsAsyncClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_federation_path(): + project = "squid" + location = "clam" + federation = "whelk" + expected = ( + "projects/{project}/locations/{location}/federations/{federation}".format( + project=project, + location=location, + federation=federation, + ) + ) + actual = DataprocMetastoreFederationClient.federation_path( + project, location, federation + ) + assert expected == actual + + +def test_parse_federation_path(): + expected = { + "project": "octopus", + "location": "oyster", + "federation": "nudibranch", + } + path = DataprocMetastoreFederationClient.federation_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_federation_path(path) + assert expected == actual + + +def test_common_billing_account_path(): + billing_account = "cuttlefish" + expected = "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + actual = DataprocMetastoreFederationClient.common_billing_account_path( + billing_account + ) + assert expected == actual + + +def test_parse_common_billing_account_path(): + expected = { + "billing_account": "mussel", + } + path = DataprocMetastoreFederationClient.common_billing_account_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_billing_account_path(path) + assert expected == actual + + +def test_common_folder_path(): + folder = "winkle" + expected = "folders/{folder}".format( + folder=folder, + ) + actual = DataprocMetastoreFederationClient.common_folder_path(folder) + assert expected == actual + + +def test_parse_common_folder_path(): + expected = { + "folder": "nautilus", + } + path = DataprocMetastoreFederationClient.common_folder_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_folder_path(path) + assert expected == actual + + +def test_common_organization_path(): + organization = "scallop" + expected = "organizations/{organization}".format( + organization=organization, + ) + actual = DataprocMetastoreFederationClient.common_organization_path(organization) + assert expected == actual + + +def test_parse_common_organization_path(): + expected = { + "organization": "abalone", + } + path = DataprocMetastoreFederationClient.common_organization_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_organization_path(path) + assert expected == actual + + +def test_common_project_path(): + project = "squid" + expected = "projects/{project}".format( + project=project, + ) + actual = DataprocMetastoreFederationClient.common_project_path(project) + assert expected == actual + + +def test_parse_common_project_path(): + expected = { + "project": "clam", + } + path = DataprocMetastoreFederationClient.common_project_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_project_path(path) + assert expected == actual + + +def test_common_location_path(): + project = "whelk" + location = "octopus" + expected = "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + actual = DataprocMetastoreFederationClient.common_location_path(project, location) + assert expected == actual + + +def test_parse_common_location_path(): + expected = { + "project": "oyster", + "location": "nudibranch", + } + path = DataprocMetastoreFederationClient.common_location_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_location_path(path) + assert expected == actual + + +def test_client_with_default_client_info(): + client_info = gapic_v1.client_info.ClientInfo() + + with mock.patch.object( + transports.DataprocMetastoreFederationTransport, "_prep_wrapped_messages" + ) as prep: + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + with mock.patch.object( + transports.DataprocMetastoreFederationTransport, "_prep_wrapped_messages" + ) as prep: + transport_class = DataprocMetastoreFederationClient.get_transport_class() + transport = transport_class( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + +@pytest.mark.asyncio +async def test_transport_close_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + with mock.patch.object( + type(getattr(client.transport, "grpc_channel")), "close" + ) as close: + async with client: + close.assert_not_called() + close.assert_called_once() + + +def test_transport_close(): + transports = { + "grpc": "_grpc_channel", + } + + for transport, close_name in transports.items(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + with mock.patch.object( + type(getattr(client.transport, close_name)), "close" + ) as close: + with client: + close.assert_not_called() + close.assert_called_once() + + +def test_client_ctx(): + transports = [ + "grpc", + ] + for transport in transports: + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + # Test client calls underlying transport. + with mock.patch.object(type(client.transport), "close") as close: + close.assert_not_called() + with client: + pass + close.assert_called() + + +@pytest.mark.parametrize( + "client_class,transport_class", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ), + ], +) +def test_api_key_credentials(client_class, transport_class): + with mock.patch.object( + google.auth._default, "get_api_key_credentials", create=True + ) as get_api_key_credentials: + mock_cred = mock.Mock() + get_api_key_credentials.return_value = mock_cred + options = client_options.ClientOptions() + options.api_key = "api_key" + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options) + patched.assert_called_once_with( + credentials=mock_cred, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) diff --git a/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1beta/test_dataproc_metastore.py b/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1beta/test_dataproc_metastore.py index 69f10b0847e1..28fb38c84dd2 100644 --- a/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1beta/test_dataproc_metastore.py +++ b/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1beta/test_dataproc_metastore.py @@ -41,6 +41,7 @@ from google.auth.exceptions import MutualTLSChannelError from google.longrunning import operations_pb2 from google.oauth2 import service_account +from google.protobuf import empty_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 @@ -1164,6 +1165,7 @@ def test_get_service(request_type, transport: str = "grpc"): tier=metastore.Service.Tier.DEVELOPER, uid="uid_value", release_channel=metastore.Service.ReleaseChannel.CANARY, + database_type=metastore.Service.DatabaseType.MYSQL, hive_metastore_config=metastore.HiveMetastoreConfig( version="version_value" ), @@ -1187,6 +1189,7 @@ def test_get_service(request_type, transport: str = "grpc"): assert response.tier == metastore.Service.Tier.DEVELOPER assert response.uid == "uid_value" assert response.release_channel == metastore.Service.ReleaseChannel.CANARY + assert response.database_type == metastore.Service.DatabaseType.MYSQL def test_get_service_empty_call(): @@ -1233,6 +1236,7 @@ async def test_get_service_async( tier=metastore.Service.Tier.DEVELOPER, uid="uid_value", release_channel=metastore.Service.ReleaseChannel.CANARY, + database_type=metastore.Service.DatabaseType.MYSQL, ) ) response = await client.get_service(request) @@ -1254,6 +1258,7 @@ async def test_get_service_async( assert response.tier == metastore.Service.Tier.DEVELOPER assert response.uid == "uid_value" assert response.release_channel == metastore.Service.ReleaseChannel.CANARY + assert response.database_type == metastore.Service.DatabaseType.MYSQL @pytest.mark.asyncio @@ -4237,6 +4242,7 @@ def test_get_backup(request_type, transport: str = "grpc"): name="name_value", state=metastore.Backup.State.CREATING, description="description_value", + restoring_services=["restoring_services_value"], ) response = client.get_backup(request) @@ -4250,6 +4256,7 @@ def test_get_backup(request_type, transport: str = "grpc"): assert response.name == "name_value" assert response.state == metastore.Backup.State.CREATING assert response.description == "description_value" + assert response.restoring_services == ["restoring_services_value"] def test_get_backup_empty_call(): @@ -4289,6 +4296,7 @@ async def test_get_backup_async( name="name_value", state=metastore.Backup.State.CREATING, description="description_value", + restoring_services=["restoring_services_value"], ) ) response = await client.get_backup(request) @@ -4303,6 +4311,7 @@ async def test_get_backup_async( assert response.name == "name_value" assert response.state == metastore.Backup.State.CREATING assert response.description == "description_value" + assert response.restoring_services == ["restoring_services_value"] @pytest.mark.asyncio @@ -5486,11 +5495,37 @@ def test_parse_backup_path(): assert expected == actual -def test_metadata_import_path(): +def test_lake_path(): project = "winkle" location = "nautilus" - service = "scallop" - metadata_import = "abalone" + lake = "scallop" + expected = "projects/{project}/locations/{location}/lakes/{lake}".format( + project=project, + location=location, + lake=lake, + ) + actual = DataprocMetastoreClient.lake_path(project, location, lake) + assert expected == actual + + +def test_parse_lake_path(): + expected = { + "project": "abalone", + "location": "squid", + "lake": "clam", + } + path = DataprocMetastoreClient.lake_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreClient.parse_lake_path(path) + assert expected == actual + + +def test_metadata_import_path(): + project = "whelk" + location = "octopus" + service = "oyster" + metadata_import = "nudibranch" expected = "projects/{project}/locations/{location}/services/{service}/metadataImports/{metadata_import}".format( project=project, location=location, @@ -5505,10 +5540,10 @@ def test_metadata_import_path(): def test_parse_metadata_import_path(): expected = { - "project": "squid", - "location": "clam", - "service": "whelk", - "metadata_import": "octopus", + "project": "cuttlefish", + "location": "mussel", + "service": "winkle", + "metadata_import": "nautilus", } path = DataprocMetastoreClient.metadata_import_path(**expected) @@ -5518,8 +5553,8 @@ def test_parse_metadata_import_path(): def test_network_path(): - project = "oyster" - network = "nudibranch" + project = "scallop" + network = "abalone" expected = "projects/{project}/global/networks/{network}".format( project=project, network=network, @@ -5530,8 +5565,8 @@ def test_network_path(): def test_parse_network_path(): expected = { - "project": "cuttlefish", - "network": "mussel", + "project": "squid", + "network": "clam", } path = DataprocMetastoreClient.network_path(**expected) @@ -5541,9 +5576,9 @@ def test_parse_network_path(): def test_service_path(): - project = "winkle" - location = "nautilus" - service = "scallop" + project = "whelk" + location = "octopus" + service = "oyster" expected = "projects/{project}/locations/{location}/services/{service}".format( project=project, location=location, @@ -5555,9 +5590,9 @@ def test_service_path(): def test_parse_service_path(): expected = { - "project": "abalone", - "location": "squid", - "service": "clam", + "project": "nudibranch", + "location": "cuttlefish", + "service": "mussel", } path = DataprocMetastoreClient.service_path(**expected) @@ -5566,6 +5601,32 @@ def test_parse_service_path(): assert expected == actual +def test_subnetwork_path(): + project = "winkle" + region = "nautilus" + subnetwork = "scallop" + expected = "projects/{project}/regions/{region}/subnetworks/{subnetwork}".format( + project=project, + region=region, + subnetwork=subnetwork, + ) + actual = DataprocMetastoreClient.subnetwork_path(project, region, subnetwork) + assert expected == actual + + +def test_parse_subnetwork_path(): + expected = { + "project": "abalone", + "region": "squid", + "subnetwork": "clam", + } + path = DataprocMetastoreClient.subnetwork_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreClient.parse_subnetwork_path(path) + assert expected == actual + + def test_common_billing_account_path(): billing_account = "whelk" expected = "billingAccounts/{billing_account}".format( diff --git a/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1beta/test_dataproc_metastore_federation.py b/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1beta/test_dataproc_metastore_federation.py new file mode 100644 index 000000000000..5270c2a0d903 --- /dev/null +++ b/packages/google-cloud-dataproc-metastore/tests/unit/gapic/metastore_v1beta/test_dataproc_metastore_federation.py @@ -0,0 +1,2931 @@ +# -*- 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. +# +import os + +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER + import mock + +import math + +from google.api_core import ( + future, + gapic_v1, + grpc_helpers, + grpc_helpers_async, + operation, + operations_v1, + path_template, +) +from google.api_core import client_options +from google.api_core import exceptions as core_exceptions +from google.api_core import operation_async # type: ignore +import google.auth +from google.auth import credentials as ga_credentials +from google.auth.exceptions import MutualTLSChannelError +from google.longrunning import operations_pb2 +from google.oauth2 import service_account +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +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.metastore_v1beta.services.dataproc_metastore_federation import ( + DataprocMetastoreFederationAsyncClient, + DataprocMetastoreFederationClient, + pagers, + transports, +) +from google.cloud.metastore_v1beta.types import metastore, metastore_federation + + +def client_cert_source_callback(): + return b"cert bytes", b"key bytes" + + +# If default endpoint is localhost, then default mtls endpoint will be the same. +# This method modifies the default endpoint so the client can produce a different +# mtls endpoint for endpoint testing purposes. +def modify_default_endpoint(client): + return ( + "foo.googleapis.com" + if ("localhost" in client.DEFAULT_ENDPOINT) + else client.DEFAULT_ENDPOINT + ) + + +def test__get_default_mtls_endpoint(): + api_endpoint = "example.googleapis.com" + api_mtls_endpoint = "example.mtls.googleapis.com" + sandbox_endpoint = "example.sandbox.googleapis.com" + sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" + non_googleapi = "api.example.com" + + assert DataprocMetastoreFederationClient._get_default_mtls_endpoint(None) is None + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(api_endpoint) + == api_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(api_mtls_endpoint) + == api_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(sandbox_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint( + sandbox_mtls_endpoint + ) + == sandbox_mtls_endpoint + ) + assert ( + DataprocMetastoreFederationClient._get_default_mtls_endpoint(non_googleapi) + == non_googleapi + ) + + +@pytest.mark.parametrize( + "client_class,transport_name", + [ + (DataprocMetastoreFederationClient, "grpc"), + (DataprocMetastoreFederationAsyncClient, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_from_service_account_info( + client_class, transport_name +): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object( + service_account.Credentials, "from_service_account_info" + ) as factory: + factory.return_value = creds + info = {"valid": True} + client = client_class.from_service_account_info(info, transport=transport_name) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ("metastore.googleapis.com:443") + + +@pytest.mark.parametrize( + "transport_class,transport_name", + [ + (transports.DataprocMetastoreFederationGrpcTransport, "grpc"), + (transports.DataprocMetastoreFederationGrpcAsyncIOTransport, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_service_account_always_use_jwt( + transport_class, transport_name +): + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=True) + use_jwt.assert_called_once_with(True) + + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=False) + use_jwt.assert_not_called() + + +@pytest.mark.parametrize( + "client_class,transport_name", + [ + (DataprocMetastoreFederationClient, "grpc"), + (DataprocMetastoreFederationAsyncClient, "grpc_asyncio"), + ], +) +def test_dataproc_metastore_federation_client_from_service_account_file( + client_class, transport_name +): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object( + service_account.Credentials, "from_service_account_file" + ) as factory: + factory.return_value = creds + client = client_class.from_service_account_file( + "dummy/file/path.json", transport=transport_name + ) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + client = client_class.from_service_account_json( + "dummy/file/path.json", transport=transport_name + ) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ("metastore.googleapis.com:443") + + +def test_dataproc_metastore_federation_client_get_transport_class(): + transport = DataprocMetastoreFederationClient.get_transport_class() + available_transports = [ + transports.DataprocMetastoreFederationGrpcTransport, + ] + assert transport in available_transports + + transport = DataprocMetastoreFederationClient.get_transport_class("grpc") + assert transport == transports.DataprocMetastoreFederationGrpcTransport + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +def test_dataproc_metastore_federation_client_client_options( + client_class, transport_class, transport_name +): + # Check that if channel is provided we won't create a new one. + with mock.patch.object( + DataprocMetastoreFederationClient, "get_transport_class" + ) as gtc: + transport = transport_class(credentials=ga_credentials.AnonymousCredentials()) + client = client_class(transport=transport) + gtc.assert_not_called() + + # Check that if channel is provided via str we will create a new one. + with mock.patch.object( + DataprocMetastoreFederationClient, "get_transport_class" + ) as gtc: + client = client_class(transport=transport_name) + gtc.assert_called() + + # Check the case api_endpoint is provided. + options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name, client_options=options) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has + # unsupported value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): + with pytest.raises(MutualTLSChannelError): + client = client_class(transport=transport_name) + + # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"} + ): + with pytest.raises(ValueError): + client = client_class(transport=transport_name) + + # Check the case quota_project_id is provided + options = client_options.ClientOptions(quota_project_id="octopus") + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + # Check the case api_endpoint is provided + options = client_options.ClientOptions( + api_audience="https://language.googleapis.com" + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience="https://language.googleapis.com", + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,use_client_cert_env", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + "true", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + "true", + ), + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + "false", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + "false", + ), + ], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) +def test_dataproc_metastore_federation_client_mtls_env_auto( + client_class, transport_class, transport_name, use_client_cert_env +): + # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default + # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. + + # Check the case client_cert_source is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + options = client_options.ClientOptions( + client_cert_source=client_cert_source_callback + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + + if use_client_cert_env == "false": + expected_client_cert_source = None + expected_host = client.DEFAULT_ENDPOINT + else: + expected_client_cert_source = client_cert_source_callback + expected_host = client.DEFAULT_MTLS_ENDPOINT + + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case ADC client cert is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + with mock.patch( + "google.auth.transport.mtls.default_client_cert_source", + return_value=client_cert_source_callback, + ): + if use_client_cert_env == "false": + expected_host = client.DEFAULT_ENDPOINT + expected_client_cert_source = None + else: + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_client_cert_source = client_cert_source_callback + + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case client_cert_source and ADC client cert are not provided. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + ): + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class", + [DataprocMetastoreFederationClient, DataprocMetastoreFederationAsyncClient], +) +@mock.patch.object( + DataprocMetastoreFederationClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationClient), +) +@mock.patch.object( + DataprocMetastoreFederationAsyncClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(DataprocMetastoreFederationAsyncClient), +) +def test_dataproc_metastore_federation_client_get_mtls_endpoint_and_cert_source( + client_class, +): + mock_client_cert_source = mock.Mock() + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + mock_api_endpoint = "foo" + options = client_options.ClientOptions( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + ) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source( + options + ) + assert api_endpoint == mock_api_endpoint + assert cert_source == mock_client_cert_source + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): + mock_client_cert_source = mock.Mock() + mock_api_endpoint = "foo" + options = client_options.ClientOptions( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + ) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source( + options + ) + assert api_endpoint == mock_api_endpoint + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + ): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + with mock.patch( + "google.auth.transport.mtls.default_client_cert_source", + return_value=mock_client_cert_source, + ): + ( + api_endpoint, + cert_source, + ) = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source == mock_client_cert_source + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + ), + ], +) +def test_dataproc_metastore_federation_client_client_options_scopes( + client_class, transport_class, transport_name +): + # Check the case scopes are provided. + options = client_options.ClientOptions( + scopes=["1", "2"], + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=["1", "2"], + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,grpc_helpers", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + grpc_helpers, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_client_client_options_credentials_file( + client_class, transport_class, transport_name, grpc_helpers +): + # Check the case credentials file is provided. + options = client_options.ClientOptions(credentials_file="credentials.json") + + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +def test_dataproc_metastore_federation_client_client_options_from_dict(): + with mock.patch( + "google.cloud.metastore_v1beta.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationGrpcTransport.__init__" + ) as grpc_transport: + grpc_transport.return_value = None + client = DataprocMetastoreFederationClient( + client_options={"api_endpoint": "squid.clam.whelk"} + ) + grpc_transport.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,grpc_helpers", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + "grpc", + grpc_helpers, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + "grpc_asyncio", + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_client_create_channel_credentials_file( + client_class, transport_class, transport_name, grpc_helpers +): + # Check the case credentials file is provided. + options = client_options.ClientOptions(credentials_file="credentials.json") + + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # test that the credentials from file are saved and used as the credentials. + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel" + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + file_creds = ga_credentials.AnonymousCredentials() + load_creds.return_value = (file_creds, None) + adc.return_value = (creds, None) + client = client_class(client_options=options, transport=transport_name) + create_channel.assert_called_with( + "metastore.googleapis.com:443", + credentials=file_creds, + credentials_file=None, + quota_project_id=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=None, + default_host="metastore.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.ListFederationsRequest, + dict, + ], +) +def test_list_federations(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse( + next_page_token="next_page_token_value", + unreachable=["unreachable_value"], + ) + response = client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFederationsPager) + assert response.next_page_token == "next_page_token_value" + assert response.unreachable == ["unreachable_value"] + + +def test_list_federations_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + client.list_federations() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + +@pytest.mark.asyncio +async def test_list_federations_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.ListFederationsRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse( + next_page_token="next_page_token_value", + unreachable=["unreachable_value"], + ) + ) + response = await client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.ListFederationsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFederationsAsyncPager) + assert response.next_page_token == "next_page_token_value" + assert response.unreachable == ["unreachable_value"] + + +@pytest.mark.asyncio +async def test_list_federations_async_from_dict(): + await test_list_federations_async(request_type=dict) + + +def test_list_federations_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.ListFederationsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + call.return_value = metastore_federation.ListFederationsResponse() + client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_list_federations_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.ListFederationsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse() + ) + await client.list_federations(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_list_federations_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_federations( + parent="parent_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + + +def test_list_federations_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_federations( + metastore_federation.ListFederationsRequest(), + parent="parent_value", + ) + + +@pytest.mark.asyncio +async def test_list_federations_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.ListFederationsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.ListFederationsResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_federations( + parent="parent_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_list_federations_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_federations( + metastore_federation.ListFederationsRequest(), + parent="parent_value", + ) + + +def test_list_federations_pager(transport_name: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_federations(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, metastore_federation.Federation) for i in results) + + +def test_list_federations_pages(transport_name: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_federations), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + pages = list(client.list_federations(request={}).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.asyncio +async def test_list_federations_async_pager(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_federations), "__call__", new_callable=mock.AsyncMock + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_federations( + request={}, + ) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, metastore_federation.Federation) for i in responses) + + +@pytest.mark.asyncio +async def test_list_federations_async_pages(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_federations), "__call__", new_callable=mock.AsyncMock + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + next_page_token="abc", + ), + metastore_federation.ListFederationsResponse( + federations=[], + next_page_token="def", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + ], + next_page_token="ghi", + ), + metastore_federation.ListFederationsResponse( + federations=[ + metastore_federation.Federation(), + metastore_federation.Federation(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in ( + await client.list_federations(request={}) + ).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.GetFederationRequest, + dict, + ], +) +def test_get_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation( + name="name_value", + version="version_value", + endpoint_uri="endpoint_uri_value", + state=metastore_federation.Federation.State.CREATING, + state_message="state_message_value", + uid="uid_value", + ) + response = client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, metastore_federation.Federation) + assert response.name == "name_value" + assert response.version == "version_value" + assert response.endpoint_uri == "endpoint_uri_value" + assert response.state == metastore_federation.Federation.State.CREATING + assert response.state_message == "state_message_value" + assert response.uid == "uid_value" + + +def test_get_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + client.get_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + +@pytest.mark.asyncio +async def test_get_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.GetFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation( + name="name_value", + version="version_value", + endpoint_uri="endpoint_uri_value", + state=metastore_federation.Federation.State.CREATING, + state_message="state_message_value", + uid="uid_value", + ) + ) + response = await client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.GetFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, metastore_federation.Federation) + assert response.name == "name_value" + assert response.version == "version_value" + assert response.endpoint_uri == "endpoint_uri_value" + assert response.state == metastore_federation.Federation.State.CREATING + assert response.state_message == "state_message_value" + assert response.uid == "uid_value" + + +@pytest.mark.asyncio +async def test_get_federation_async_from_dict(): + await test_get_federation_async(request_type=dict) + + +def test_get_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.GetFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + call.return_value = metastore_federation.Federation() + client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_get_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.GetFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation() + ) + await client.get_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +def test_get_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +def test_get_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_federation( + metastore_federation.GetFederationRequest(), + name="name_value", + ) + + +@pytest.mark.asyncio +async def test_get_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_federation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = metastore_federation.Federation() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + metastore_federation.Federation() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_get_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_federation( + metastore_federation.GetFederationRequest(), + name="name_value", + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.CreateFederationRequest, + dict, + ], +) +def test_create_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_create_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + client.create_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + +@pytest.mark.asyncio +async def test_create_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.CreateFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.CreateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_create_federation_async_from_dict(): + await test_create_federation_async(request_type=dict) + + +def test_create_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.CreateFederationRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_create_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.CreateFederationRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.create_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_create_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_federation( + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].federation_id + mock_val = "federation_id_value" + assert arg == mock_val + + +def test_create_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_federation( + metastore_federation.CreateFederationRequest(), + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + +@pytest.mark.asyncio +async def test_create_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_federation( + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].federation_id + mock_val = "federation_id_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_create_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_federation( + metastore_federation.CreateFederationRequest(), + parent="parent_value", + federation=metastore_federation.Federation(name="name_value"), + federation_id="federation_id_value", + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.UpdateFederationRequest, + dict, + ], +) +def test_update_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_update_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + client.update_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + +@pytest.mark.asyncio +async def test_update_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.UpdateFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.UpdateFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_update_federation_async_from_dict(): + await test_update_federation_async(request_type=dict) + + +def test_update_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.UpdateFederationRequest() + + request.federation.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "federation.name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_update_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.UpdateFederationRequest() + + request.federation.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.update_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "federation.name=name_value", + ) in kw["metadata"] + + +def test_update_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_federation( + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + assert arg == mock_val + + +def test_update_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_federation( + metastore_federation.UpdateFederationRequest(), + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + +@pytest.mark.asyncio +async def test_update_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_federation( + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].federation + mock_val = metastore_federation.Federation(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_update_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_federation( + metastore_federation.UpdateFederationRequest(), + federation=metastore_federation.Federation(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + +@pytest.mark.parametrize( + "request_type", + [ + metastore_federation.DeleteFederationRequest, + dict, + ], +) +def test_delete_federation(request_type, transport: str = "grpc"): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_delete_federation_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + client.delete_federation() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + +@pytest.mark.asyncio +async def test_delete_federation_async( + transport: str = "grpc_asyncio", + request_type=metastore_federation.DeleteFederationRequest, +): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == metastore_federation.DeleteFederationRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_delete_federation_async_from_dict(): + await test_delete_federation_async(request_type=dict) + + +def test_delete_federation_field_headers(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.DeleteFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + call.return_value = operations_pb2.Operation(name="operations/op") + client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_delete_federation_field_headers_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = metastore_federation.DeleteFederationRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/op") + ) + await client.delete_federation(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +def test_delete_federation_flattened(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +def test_delete_federation_flattened_error(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_federation( + metastore_federation.DeleteFederationRequest(), + name="name_value", + ) + + +@pytest.mark.asyncio +async def test_delete_federation_flattened_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_federation), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/op") + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_federation( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_delete_federation_flattened_error_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.delete_federation( + metastore_federation.DeleteFederationRequest(), + name="name_value", + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = DataprocMetastoreFederationClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = DataprocMetastoreFederationClient(transport=transport) + assert client.transport is transport + + +def test_transport_get_channel(): + # A client may be instantiated with a custom transport instance. + transport = transports.DataprocMetastoreFederationGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + transport = transports.DataprocMetastoreFederationGrpcAsyncIOTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class() + adc.assert_called_once() + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + ], +) +def test_transport_kind(transport_name): + transport = DataprocMetastoreFederationClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + +def test_transport_grpc_default(): + # A client should use the gRPC transport by default. + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert isinstance( + client.transport, + transports.DataprocMetastoreFederationGrpcTransport, + ) + + +def test_dataproc_metastore_federation_base_transport_error(): + # Passing both a credentials object and credentials_file should raise an error + with pytest.raises(core_exceptions.DuplicateCredentialArgs): + transport = transports.DataprocMetastoreFederationTransport( + credentials=ga_credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_dataproc_metastore_federation_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.metastore_v1beta.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.DataprocMetastoreFederationTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "list_federations", + "get_federation", + "create_federation", + "update_federation", + "delete_federation", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + with pytest.raises(NotImplementedError): + transport.close() + + # Additionally, the LRO client (a property) should + # also raise NotImplementedError + with pytest.raises(NotImplementedError): + transport.operations_client + + # Catch all for all remaining methods and properties + remainder = [ + "kind", + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + + +def test_dataproc_metastore_federation_base_transport_with_credentials_file(): + # Instantiate the base transport with a credentials file + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch( + "google.cloud.metastore_v1beta.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.DataprocMetastoreFederationTransport( + credentials_file="credentials.json", + quota_project_id="octopus", + ) + load_creds.assert_called_once_with( + "credentials.json", + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +def test_dataproc_metastore_federation_base_transport_with_adc(): + # Test the default credentials are used if credentials and credentials_file are None. + with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( + "google.cloud.metastore_v1beta.services.dataproc_metastore_federation.transports.DataprocMetastoreFederationTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.DataprocMetastoreFederationTransport() + adc.assert_called_once() + + +def test_dataproc_metastore_federation_auth_adc(): + # If no credentials are provided, we should use ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + DataprocMetastoreFederationClient() + adc.assert_called_once_with( + scopes=None, + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id=None, + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_auth_adc(transport_class): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + adc.assert_called_once_with( + scopes=["1", "2"], + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + quota_project_id="octopus", + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_auth_gdch_credentials(transport_class): + host = "https://language.com" + api_audience_tests = [None, "https://language2.com"] + api_audience_expect = [host, "https://language2.com"] + for t, e in zip(api_audience_tests, api_audience_expect): + with mock.patch.object(google.auth, "default", autospec=True) as adc: + gdch_mock = mock.MagicMock() + type(gdch_mock).with_gdch_audience = mock.PropertyMock( + return_value=gdch_mock + ) + adc.return_value = (gdch_mock, None) + transport_class(host=host, api_audience=t) + gdch_mock.with_gdch_audience.assert_called_once_with(e) + + +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.DataprocMetastoreFederationGrpcTransport, grpc_helpers), + ( + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + grpc_helpers_async, + ), + ], +) +def test_dataproc_metastore_federation_transport_create_channel( + transport_class, grpc_helpers +): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + + create_channel.assert_called_with( + "metastore.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + default_scopes=("https://www.googleapis.com/auth/cloud-platform",), + scopes=["1", "2"], + default_host="metastore.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_grpc_transport_client_cert_source_for_mtls( + transport_class, +): + cred = ga_credentials.AnonymousCredentials() + + # Check ssl_channel_credentials is used if provided. + with mock.patch.object(transport_class, "create_channel") as mock_create_channel: + mock_ssl_channel_creds = mock.Mock() + transport_class( + host="squid.clam.whelk", + credentials=cred, + ssl_channel_credentials=mock_ssl_channel_creds, + ) + mock_create_channel.assert_called_once_with( + "squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_channel_creds, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls + # is used. + with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): + with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: + transport_class( + credentials=cred, + client_cert_source_for_mtls=client_cert_source_callback, + ) + expected_cert, expected_key = client_cert_source_callback() + mock_ssl_cred.assert_called_once_with( + certificate_chain=expected_cert, private_key=expected_key + ) + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_dataproc_metastore_federation_host_no_port(transport_name): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="metastore.googleapis.com" + ), + transport=transport_name, + ) + assert client.transport._host == ("metastore.googleapis.com:443") + + +@pytest.mark.parametrize( + "transport_name", + [ + "grpc", + "grpc_asyncio", + ], +) +def test_dataproc_metastore_federation_host_with_port(transport_name): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="metastore.googleapis.com:8000" + ), + transport=transport_name, + ) + assert client.transport._host == ("metastore.googleapis.com:8000") + + +def test_dataproc_metastore_federation_grpc_transport_channel(): + channel = grpc.secure_channel("http://localhost/", grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.DataprocMetastoreFederationGrpcTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +def test_dataproc_metastore_federation_grpc_asyncio_transport_channel(): + channel = aio.secure_channel("http://localhost/", grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.DataprocMetastoreFederationGrpcAsyncIOTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_channel_mtls_with_client_cert_source( + transport_class, +): + with mock.patch( + "grpc.ssl_channel_credentials", autospec=True + ) as grpc_ssl_channel_cred: + with mock.patch.object( + transport_class, "create_channel" + ) as grpc_create_channel: + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + cred = ga_credentials.AnonymousCredentials() + with pytest.warns(DeprecationWarning): + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (cred, None) + transport = transport_class( + host="squid.clam.whelk", + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + adc.assert_called_once() + + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + assert transport._ssl_channel_credentials == mock_ssl_cred + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize( + "transport_class", + [ + transports.DataprocMetastoreFederationGrpcTransport, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ], +) +def test_dataproc_metastore_federation_transport_channel_mtls_with_adc(transport_class): + mock_ssl_cred = mock.Mock() + with mock.patch.multiple( + "google.auth.transport.grpc.SslCredentials", + __init__=mock.Mock(return_value=None), + ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), + ): + with mock.patch.object( + transport_class, "create_channel" + ) as grpc_create_channel: + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + mock_cred = mock.Mock() + + with pytest.warns(DeprecationWarning): + transport = transport_class( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=None, + ) + + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + + +def test_dataproc_metastore_federation_grpc_lro_client(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_dataproc_metastore_federation_grpc_lro_async_client(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsAsyncClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_federation_path(): + project = "squid" + location = "clam" + federation = "whelk" + expected = ( + "projects/{project}/locations/{location}/federations/{federation}".format( + project=project, + location=location, + federation=federation, + ) + ) + actual = DataprocMetastoreFederationClient.federation_path( + project, location, federation + ) + assert expected == actual + + +def test_parse_federation_path(): + expected = { + "project": "octopus", + "location": "oyster", + "federation": "nudibranch", + } + path = DataprocMetastoreFederationClient.federation_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_federation_path(path) + assert expected == actual + + +def test_common_billing_account_path(): + billing_account = "cuttlefish" + expected = "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + actual = DataprocMetastoreFederationClient.common_billing_account_path( + billing_account + ) + assert expected == actual + + +def test_parse_common_billing_account_path(): + expected = { + "billing_account": "mussel", + } + path = DataprocMetastoreFederationClient.common_billing_account_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_billing_account_path(path) + assert expected == actual + + +def test_common_folder_path(): + folder = "winkle" + expected = "folders/{folder}".format( + folder=folder, + ) + actual = DataprocMetastoreFederationClient.common_folder_path(folder) + assert expected == actual + + +def test_parse_common_folder_path(): + expected = { + "folder": "nautilus", + } + path = DataprocMetastoreFederationClient.common_folder_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_folder_path(path) + assert expected == actual + + +def test_common_organization_path(): + organization = "scallop" + expected = "organizations/{organization}".format( + organization=organization, + ) + actual = DataprocMetastoreFederationClient.common_organization_path(organization) + assert expected == actual + + +def test_parse_common_organization_path(): + expected = { + "organization": "abalone", + } + path = DataprocMetastoreFederationClient.common_organization_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_organization_path(path) + assert expected == actual + + +def test_common_project_path(): + project = "squid" + expected = "projects/{project}".format( + project=project, + ) + actual = DataprocMetastoreFederationClient.common_project_path(project) + assert expected == actual + + +def test_parse_common_project_path(): + expected = { + "project": "clam", + } + path = DataprocMetastoreFederationClient.common_project_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_project_path(path) + assert expected == actual + + +def test_common_location_path(): + project = "whelk" + location = "octopus" + expected = "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + actual = DataprocMetastoreFederationClient.common_location_path(project, location) + assert expected == actual + + +def test_parse_common_location_path(): + expected = { + "project": "oyster", + "location": "nudibranch", + } + path = DataprocMetastoreFederationClient.common_location_path(**expected) + + # Check that the path construction is reversible. + actual = DataprocMetastoreFederationClient.parse_common_location_path(path) + assert expected == actual + + +def test_client_with_default_client_info(): + client_info = gapic_v1.client_info.ClientInfo() + + with mock.patch.object( + transports.DataprocMetastoreFederationTransport, "_prep_wrapped_messages" + ) as prep: + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + with mock.patch.object( + transports.DataprocMetastoreFederationTransport, "_prep_wrapped_messages" + ) as prep: + transport_class = DataprocMetastoreFederationClient.get_transport_class() + transport = transport_class( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + +@pytest.mark.asyncio +async def test_transport_close_async(): + client = DataprocMetastoreFederationAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + with mock.patch.object( + type(getattr(client.transport, "grpc_channel")), "close" + ) as close: + async with client: + close.assert_not_called() + close.assert_called_once() + + +def test_transport_close(): + transports = { + "grpc": "_grpc_channel", + } + + for transport, close_name in transports.items(): + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + with mock.patch.object( + type(getattr(client.transport, close_name)), "close" + ) as close: + with client: + close.assert_not_called() + close.assert_called_once() + + +def test_client_ctx(): + transports = [ + "grpc", + ] + for transport in transports: + client = DataprocMetastoreFederationClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + # Test client calls underlying transport. + with mock.patch.object(type(client.transport), "close") as close: + close.assert_not_called() + with client: + pass + close.assert_called() + + +@pytest.mark.parametrize( + "client_class,transport_class", + [ + ( + DataprocMetastoreFederationClient, + transports.DataprocMetastoreFederationGrpcTransport, + ), + ( + DataprocMetastoreFederationAsyncClient, + transports.DataprocMetastoreFederationGrpcAsyncIOTransport, + ), + ], +) +def test_api_key_credentials(client_class, transport_class): + with mock.patch.object( + google.auth._default, "get_api_key_credentials", create=True + ) as get_api_key_credentials: + mock_cred = mock.Mock() + get_api_key_credentials.return_value = mock_cred + options = client_options.ClientOptions() + options.api_key = "api_key" + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options) + patched.assert_called_once_with( + credentials=mock_cred, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + )