From b8eb0edd78cae97fb274660da5ccec72070b1068 Mon Sep 17 00:00:00 2001 From: "gcf-owl-bot[bot]" <78513119+gcf-owl-bot[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 01:14:14 +0000 Subject: [PATCH] chore: Update gapic-generator-python to v1.11.8 (#11840) BEGIN_COMMIT_OVERRIDE chore: Update gapic-generator-python to v1.11.8 END_COMMIT_OVERRIDE - [ ] Regenerate this pull request now. PiperOrigin-RevId: 574178735 Source-Link: https://togithub.com/googleapis/googleapis/commit/7307199008ee2d57a4337066de29f9cd8c444bc6 Source-Link: https://togithub.com/googleapis/googleapis-gen/commit/ce3af21b7c559a87c2befc076be0e3aeda3a26f0 Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLWRvY3VtZW50YWkvLk93bEJvdC55YW1sIiwiaCI6ImNlM2FmMjFiN2M1NTlhODdjMmJlZmMwNzZiZTBlM2FlZGEzYTI2ZjAifQ== Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLWRvbWFpbnMvLk93bEJvdC55YW1sIiwiaCI6ImNlM2FmMjFiN2M1NTlhODdjMmJlZmMwNzZiZTBlM2FlZGEzYTI2ZjAifQ== Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLWVkZ2Vjb250YWluZXIvLk93bEJvdC55YW1sIiwiaCI6ImNlM2FmMjFiN2M1NTlhODdjMmJlZmMwNzZiZTBlM2FlZGEzYTI2ZjAifQ== Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLWVudGVycHJpc2Vrbm93bGVkZ2VncmFwaC8uT3dsQm90LnlhbWwiLCJoIjoiY2UzYWYyMWI3YzU1OWE4N2MyYmVmYzA3NmJlMGUzYWVkYTNhMjZmMCJ9 Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLWVzc2VudGlhbC1jb250YWN0cy8uT3dsQm90LnlhbWwiLCJoIjoiY2UzYWYyMWI3YzU1OWE4N2MyYmVmYzA3NmJlMGUzYWVkYTNhMjZmMCJ9 Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLWV2ZW50YXJjLy5Pd2xCb3QueWFtbCIsImgiOiJjZTNhZjIxYjdjNTU5YTg3YzJiZWZjMDc2YmUwZTNhZWRhM2EyNmYwIn0= Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLWZ1bmN0aW9ucy8uT3dsQm90LnlhbWwiLCJoIjoiY2UzYWYyMWI3YzU1OWE4N2MyYmVmYzA3NmJlMGUzYWVkYTNhMjZmMCJ9 Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLWdrZS1iYWNrdXAvLk93bEJvdC55YW1sIiwiaCI6ImNlM2FmMjFiN2M1NTlhODdjMmJlZmMwNzZiZTBlM2FlZGEzYTI2ZjAifQ== Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLWdrZS1tdWx0aWNsb3VkLy5Pd2xCb3QueWFtbCIsImgiOiJjZTNhZjIxYjdjNTU5YTg3YzJiZWZjMDc2YmUwZTNhZWRhM2EyNmYwIn0= Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLWdzdWl0ZWFkZG9ucy8uT3dsQm90LnlhbWwiLCJoIjoiY2UzYWYyMWI3YzU1OWE4N2MyYmVmYzA3NmJlMGUzYWVkYTNhMjZmMCJ9 Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLWlhbS8uT3dsQm90LnlhbWwiLCJoIjoiY2UzYWYyMWI3YzU1OWE4N2MyYmVmYzA3NmJlMGUzYWVkYTNhMjZmMCJ9 Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLWlhcC8uT3dsQm90LnlhbWwiLCJoIjoiY2UzYWYyMWI3YzU1OWE4N2MyYmVmYzA3NmJlMGUzYWVkYTNhMjZmMCJ9 Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLWlkcy8uT3dsQm90LnlhbWwiLCJoIjoiY2UzYWYyMWI3YzU1OWE4N2MyYmVmYzA3NmJlMGUzYWVkYTNhMjZmMCJ9 Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLW1lbWNhY2hlLy5Pd2xCb3QueWFtbCIsImgiOiJjZTNhZjIxYjdjNTU5YTg3YzJiZWZjMDc2YmUwZTNhZWRhM2EyNmYwIn0= Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLW1pZ3JhdGlvbmNlbnRlci8uT3dsQm90LnlhbWwiLCJoIjoiY2UzYWYyMWI3YzU1OWE4N2MyYmVmYzA3NmJlMGUzYWVkYTNhMjZmMCJ9 Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLW5ldGFwcC8uT3dsQm90LnlhbWwiLCJoIjoiY2UzYWYyMWI3YzU1OWE4N2MyYmVmYzA3NmJlMGUzYWVkYTNhMjZmMCJ9 Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLW5ldHdvcmstbWFuYWdlbWVudC8uT3dsQm90LnlhbWwiLCJoIjoiY2UzYWYyMWI3YzU1OWE4N2MyYmVmYzA3NmJlMGUzYWVkYTNhMjZmMCJ9 Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLW5ldHdvcmstc2VjdXJpdHkvLk93bEJvdC55YW1sIiwiaCI6ImNlM2FmMjFiN2M1NTlhODdjMmJlZmMwNzZiZTBlM2FlZGEzYTI2ZjAifQ== Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLW5ldHdvcmstc2VydmljZXMvLk93bEJvdC55YW1sIiwiaCI6ImNlM2FmMjFiN2M1NTlhODdjMmJlZmMwNzZiZTBlM2FlZGEzYTI2ZjAifQ== Copy-Tag: eyJwIjoicGFja2FnZXMvZ29vZ2xlLWNsb3VkLW5vdGVib29rcy8uT3dsQm90LnlhbWwiLCJoIjoiY2UzYWYyMWI3YzU1OWE4N2MyYmVmYzA3NmJlMGUzYWVkYTNhMjZmMCJ9 --- .../google/cloud/documentai/gapic_version.py | 2 +- .../cloud/documentai_v1/gapic_version.py | 2 +- .../cloud/documentai_v1beta2/gapic_version.py | 2 +- .../cloud/documentai_v1beta3/gapic_version.py | 2 +- ...t_metadata_google.cloud.documentai.v1.json | 2 +- ...adata_google.cloud.documentai.v1beta2.json | 2 +- ...adata_google.cloud.documentai.v1beta3.json | 2 +- .../test_document_processor_service.py | 253 +- .../test_document_processor_service.py | 253 +- .../test_document_service.py | 244 +- .../google-cloud-domains/CONTRIBUTING.rst | 4 +- .../google-cloud-domains/domains-v1-py.tar.gz | 0 .../google/cloud/domains/gapic_version.py | 2 +- .../google/cloud/domains_v1/gapic_version.py | 2 +- .../cloud/domains_v1beta1/gapic_version.py | 2 +- packages/google-cloud-domains/noxfile.py | 23 +- ...ppet_metadata_google.cloud.domains.v1.json | 2 +- ...metadata_google.cloud.domains.v1beta1.json | 2 +- .../unit/gapic/domains_v1/test_domains.py | 242 +- .../gapic/domains_v1beta1/test_domains.py | 242 +- .../CONTRIBUTING.rst | 4 +- .../cloud/edgecontainer/gapic_version.py | 2 +- .../cloud/edgecontainer_v1/gapic_version.py | 2 +- .../google-cloud-edgecontainer/noxfile.py | 23 +- ...etadata_google.cloud.edgecontainer.v1.json | 2 +- .../edgecontainer_v1/test_edge_container.py | 597 ++- .../CONTRIBUTING.rst | 4 +- .../enterpriseknowledgegraph/gapic_version.py | 2 +- .../gapic_version.py | 2 +- .../noxfile.py | 23 +- ...gle.cloud.enterpriseknowledgegraph.v1.json | 2 +- ...test_enterprise_knowledge_graph_service.py | 214 +- .../CONTRIBUTING.rst | 4 +- .../cloud/essential_contacts/gapic_version.py | 2 +- .../essential_contacts_v1/gapic_version.py | 2 +- .../noxfile.py | 23 +- ...ata_google.cloud.essentialcontacts.v1.json | 2 +- .../test_essential_contacts_service.py | 220 +- .../google-cloud-eventarc/CONTRIBUTING.rst | 4 +- .../google/cloud/eventarc/gapic_version.py | 2 +- .../google/cloud/eventarc_v1/gapic_version.py | 2 +- packages/google-cloud-eventarc/noxfile.py | 23 +- ...pet_metadata_google.cloud.eventarc.v1.json | 2 +- .../unit/gapic/eventarc_v1/test_eventarc.py | 667 ++- .../google-cloud-functions/CONTRIBUTING.rst | 4 +- .../google/cloud/functions/gapic_version.py | 2 +- .../cloud/functions_v1/gapic_version.py | 2 +- .../cloud/functions_v2/gapic_version.py | 2 +- packages/google-cloud-functions/noxfile.py | 23 +- ...et_metadata_google.cloud.functions.v1.json | 2 +- ...et_metadata_google.cloud.functions.v2.json | 2 +- .../test_cloud_functions_service.py | 305 +- .../functions_v2/test_function_service.py | 383 +- .../google-cloud-gke-backup/CONTRIBUTING.rst | 4 +- .../google/cloud/gke_backup/gapic_version.py | 4 +- .../cloud/gke_backup_v1/gapic_version.py | 4 +- packages/google-cloud-gke-backup/noxfile.py | 23 +- ...ated_backup_for_gke_create_backup_async.py | 56 + ...backup_for_gke_create_backup_plan_async.py | 61 + ..._backup_for_gke_create_backup_plan_sync.py | 61 + ...rated_backup_for_gke_create_backup_sync.py | 56 + ...ted_backup_for_gke_create_restore_async.py | 61 + ...ackup_for_gke_create_restore_plan_async.py | 63 + ...backup_for_gke_create_restore_plan_sync.py | 63 + ...ated_backup_for_gke_create_restore_sync.py | 61 + ...ated_backup_for_gke_delete_backup_async.py | 56 + ...backup_for_gke_delete_backup_plan_async.py | 56 + ..._backup_for_gke_delete_backup_plan_sync.py | 56 + ...rated_backup_for_gke_delete_backup_sync.py | 56 + ...ted_backup_for_gke_delete_restore_async.py | 56 + ...ackup_for_gke_delete_restore_plan_async.py | 56 + ...backup_for_gke_delete_restore_plan_sync.py | 56 + ...ated_backup_for_gke_delete_restore_sync.py | 56 + ...nerated_backup_for_gke_get_backup_async.py | 52 + ...ed_backup_for_gke_get_backup_plan_async.py | 52 + ...ted_backup_for_gke_get_backup_plan_sync.py | 52 + ...enerated_backup_for_gke_get_backup_sync.py | 52 + ...erated_backup_for_gke_get_restore_async.py | 52 + ...d_backup_for_gke_get_restore_plan_async.py | 52 + ...ed_backup_for_gke_get_restore_plan_sync.py | 52 + ...nerated_backup_for_gke_get_restore_sync.py | 52 + ..._backup_for_gke_get_volume_backup_async.py | 52 + ...d_backup_for_gke_get_volume_backup_sync.py | 52 + ...backup_for_gke_get_volume_restore_async.py | 52 + ..._backup_for_gke_get_volume_restore_sync.py | 52 + ..._backup_for_gke_list_backup_plans_async.py | 53 + ...d_backup_for_gke_list_backup_plans_sync.py | 53 + ...rated_backup_for_gke_list_backups_async.py | 53 + ...erated_backup_for_gke_list_backups_sync.py | 53 + ...backup_for_gke_list_restore_plans_async.py | 53 + ..._backup_for_gke_list_restore_plans_sync.py | 53 + ...ated_backup_for_gke_list_restores_async.py | 53 + ...rated_backup_for_gke_list_restores_sync.py | 53 + ...ackup_for_gke_list_volume_backups_async.py | 53 + ...backup_for_gke_list_volume_backups_sync.py | 53 + ...ckup_for_gke_list_volume_restores_async.py | 53 + ...ackup_for_gke_list_volume_restores_sync.py | 53 + ...ated_backup_for_gke_update_backup_async.py | 59 + ...backup_for_gke_update_backup_plan_async.py | 59 + ..._backup_for_gke_update_backup_plan_sync.py | 59 + ...rated_backup_for_gke_update_backup_sync.py | 59 + ...ted_backup_for_gke_update_restore_async.py | 59 + ...ackup_for_gke_update_restore_plan_async.py | 61 + ...backup_for_gke_update_restore_plan_sync.py | 61 + ...ated_backup_for_gke_update_restore_sync.py | 59 + ...et_metadata_google.cloud.gkebackup.v1.json | 3975 +++++++++++++++++ .../gke_backup_v1/test_backup_for_gke.py | 1156 ++--- .../CONTRIBUTING.rst | 4 +- .../cloud/gke_multicloud/gapic_version.py | 2 +- .../cloud/gke_multicloud_v1/gapic_version.py | 2 +- .../google-cloud-gke-multicloud/noxfile.py | 23 +- ...etadata_google.cloud.gkemulticloud.v1.json | 2 +- .../test_attached_clusters.py | 250 +- .../gke_multicloud_v1/test_aws_clusters.py | 573 +-- .../gke_multicloud_v1/test_azure_clusters.py | 671 +-- .../cloud/gsuiteaddons/gapic_version.py | 4 +- .../cloud/gsuiteaddons_v1/gapic_version.py | 4 +- ...g_suite_add_ons_create_deployment_async.py | 53 + ..._g_suite_add_ons_create_deployment_sync.py | 53 + ...g_suite_add_ons_delete_deployment_async.py | 50 + ..._g_suite_add_ons_delete_deployment_sync.py | 50 + ...g_suite_add_ons_get_authorization_async.py | 52 + ..._g_suite_add_ons_get_authorization_sync.py | 52 + ...ed_g_suite_add_ons_get_deployment_async.py | 52 + ...ted_g_suite_add_ons_get_deployment_sync.py | 52 + ..._suite_add_ons_get_install_status_async.py | 52 + ...g_suite_add_ons_get_install_status_sync.py | 52 + ..._suite_add_ons_install_deployment_async.py | 50 + ...g_suite_add_ons_install_deployment_sync.py | 50 + ..._g_suite_add_ons_list_deployments_async.py | 53 + ...d_g_suite_add_ons_list_deployments_sync.py | 53 + ..._suite_add_ons_replace_deployment_async.py | 51 + ...g_suite_add_ons_replace_deployment_sync.py | 51 + ...uite_add_ons_uninstall_deployment_async.py | 50 + ...suite_add_ons_uninstall_deployment_sync.py | 50 + ...metadata_google.cloud.gsuiteaddons.v1.json | 1462 ++++++ .../gsuiteaddons_v1/test_g_suite_add_ons.py | 422 +- packages/google-cloud-iam/CONTRIBUTING.rst | 4 +- packages/google-cloud-iam/docs/index.rst | 10 +- .../google/cloud/iam/gapic_version.py | 2 +- .../cloud/iam_credentials/gapic_version.py | 2 +- .../cloud/iam_credentials_v1/gapic_version.py | 2 +- .../google/cloud/iam_v2/gapic_version.py | 2 +- .../google/cloud/iam_v2beta/gapic_version.py | 2 +- packages/google-cloud-iam/noxfile.py | 23 +- ...et_metadata_google.iam.credentials.v1.json | 2 +- .../snippet_metadata_google.iam.v2.json | 2 +- .../snippet_metadata_google.iam.v2beta.json | 2 +- .../test_iam_credentials.py | 60 +- .../tests/unit/gapic/iam_v2/test_policies.py | 246 +- packages/google-cloud-iap/CONTRIBUTING.rst | 4 +- .../google/cloud/iap/gapic_version.py | 2 +- .../google/cloud/iap_v1/gapic_version.py | 2 +- packages/google-cloud-iap/noxfile.py | 23 +- .../snippet_metadata_google.cloud.iap.v1.json | 2 +- ...test_identity_aware_proxy_admin_service.py | 349 +- ...est_identity_aware_proxy_o_auth_service.py | 221 +- packages/google-cloud-ids/CONTRIBUTING.rst | 4 +- .../google/cloud/ids/gapic_version.py | 2 +- .../google/cloud/ids_v1/gapic_version.py | 2 +- packages/google-cloud-ids/noxfile.py | 23 +- .../snippet_metadata_google.cloud.ids.v1.json | 2 +- .../tests/unit/gapic/ids_v1/test_ids.py | 110 +- .../google-cloud-memcache/CONTRIBUTING.rst | 4 +- .../google/cloud/memcache/gapic_version.py | 2 +- .../google/cloud/memcache_v1/gapic_version.py | 2 +- .../cloud/memcache_v1beta2/gapic_version.py | 2 +- packages/google-cloud-memcache/noxfile.py | 23 +- ...pet_metadata_google.cloud.memcache.v1.json | 2 +- ...etadata_google.cloud.memcache.v1beta2.json | 2 +- .../gapic/memcache_v1/test_cloud_memcache.py | 262 +- .../memcache_v1beta2/test_cloud_memcache.py | 266 +- .../CONTRIBUTING.rst | 4 +- .../cloud/migrationcenter/gapic_version.py | 2 +- .../cloud/migrationcenter_v1/gapic_version.py | 2 +- .../google-cloud-migrationcenter/noxfile.py | 23 +- ...adata_google.cloud.migrationcenter.v1.json | 2 +- .../test_migration_center.py | 2190 ++++----- packages/google-cloud-netapp/CONTRIBUTING.rst | 4 +- .../google/cloud/netapp/gapic_version.py | 2 +- .../google/cloud/netapp_v1/gapic_version.py | 2 +- packages/google-cloud-netapp/noxfile.py | 23 +- ...ippet_metadata_google.cloud.netapp.v1.json | 2 +- .../unit/gapic/netapp_v1/test_net_app.py | 1348 ++++-- .../CONTRIBUTING.rst | 4 +- .../cloud/network_management/gapic_version.py | 2 +- .../network_management_v1/gapic_version.py | 2 +- .../noxfile.py | 23 +- ...ata_google.cloud.networkmanagement.v1.json | 2 +- .../test_reachability_service.py | 926 ++-- .../CONTRIBUTING.rst | 4 +- .../cloud/network_security/gapic_version.py | 2 +- .../network_security_v1/gapic_version.py | 2 +- .../network_security_v1beta1/gapic_version.py | 2 +- .../google-cloud-network-security/noxfile.py | 23 +- ...adata_google.cloud.networksecurity.v1.json | 2 +- ..._google.cloud.networksecurity.v1beta1.json | 2 +- .../test_network_security.py | 646 ++- .../test_network_services.py | 1909 +++++--- .../google-cloud-notebooks/CONTRIBUTING.rst | 4 +- .../google/cloud/notebooks/gapic_version.py | 2 +- .../cloud/notebooks_v1/gapic_version.py | 2 +- .../cloud/notebooks_v1beta1/gapic_version.py | 2 +- .../cloud/notebooks_v2/gapic_version.py | 2 +- packages/google-cloud-notebooks/noxfile.py | 23 +- ...et_metadata_google.cloud.notebooks.v1.json | 2 +- ...tadata_google.cloud.notebooks.v1beta1.json | 2 +- ...et_metadata_google.cloud.notebooks.v2.json | 2 +- .../test_notebook_service.py | 237 +- .../notebooks_v2/test_notebook_service.py | 316 +- 210 files changed, 18655 insertions(+), 6781 deletions(-) create mode 100644 packages/google-cloud-domains/domains-v1-py.tar.gz create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_backup_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_backup_plan_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_backup_plan_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_backup_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_restore_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_restore_plan_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_restore_plan_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_restore_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_backup_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_backup_plan_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_backup_plan_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_backup_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_restore_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_restore_plan_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_restore_plan_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_restore_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_backup_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_backup_plan_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_backup_plan_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_backup_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_restore_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_restore_plan_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_restore_plan_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_restore_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_volume_backup_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_volume_backup_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_volume_restore_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_volume_restore_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_backup_plans_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_backup_plans_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_backups_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_backups_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_restore_plans_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_restore_plans_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_restores_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_restores_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_volume_backups_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_volume_backups_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_volume_restores_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_volume_restores_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_backup_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_backup_plan_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_backup_plan_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_backup_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_restore_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_restore_plan_async.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_restore_plan_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_restore_sync.py create mode 100644 packages/google-cloud-gke-backup/samples/generated_samples/snippet_metadata_google.cloud.gkebackup.v1.json create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_create_deployment_async.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_create_deployment_sync.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_delete_deployment_async.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_delete_deployment_sync.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_authorization_async.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_authorization_sync.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_deployment_async.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_deployment_sync.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_install_status_async.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_install_status_sync.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_install_deployment_async.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_install_deployment_sync.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_list_deployments_async.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_list_deployments_sync.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_replace_deployment_async.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_replace_deployment_sync.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_uninstall_deployment_async.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_uninstall_deployment_sync.py create mode 100644 packages/google-cloud-gsuiteaddons/samples/generated_samples/snippet_metadata_google.cloud.gsuiteaddons.v1.json diff --git a/packages/google-cloud-documentai/google/cloud/documentai/gapic_version.py b/packages/google-cloud-documentai/google/cloud/documentai/gapic_version.py index 69b62cea3ea2..360a0d13ebdd 100644 --- a/packages/google-cloud-documentai/google/cloud/documentai/gapic_version.py +++ b/packages/google-cloud-documentai/google/cloud/documentai/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "2.20.1" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-documentai/google/cloud/documentai_v1/gapic_version.py b/packages/google-cloud-documentai/google/cloud/documentai_v1/gapic_version.py index 69b62cea3ea2..360a0d13ebdd 100644 --- a/packages/google-cloud-documentai/google/cloud/documentai_v1/gapic_version.py +++ b/packages/google-cloud-documentai/google/cloud/documentai_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "2.20.1" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-documentai/google/cloud/documentai_v1beta2/gapic_version.py b/packages/google-cloud-documentai/google/cloud/documentai_v1beta2/gapic_version.py index 69b62cea3ea2..360a0d13ebdd 100644 --- a/packages/google-cloud-documentai/google/cloud/documentai_v1beta2/gapic_version.py +++ b/packages/google-cloud-documentai/google/cloud/documentai_v1beta2/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "2.20.1" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-documentai/google/cloud/documentai_v1beta3/gapic_version.py b/packages/google-cloud-documentai/google/cloud/documentai_v1beta3/gapic_version.py index 69b62cea3ea2..360a0d13ebdd 100644 --- a/packages/google-cloud-documentai/google/cloud/documentai_v1beta3/gapic_version.py +++ b/packages/google-cloud-documentai/google/cloud/documentai_v1beta3/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "2.20.1" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-documentai/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1.json b/packages/google-cloud-documentai/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1.json index 9bdd53d2802f..96d60af285a2 100644 --- a/packages/google-cloud-documentai/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1.json +++ b/packages/google-cloud-documentai/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-documentai", - "version": "2.20.1" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-documentai/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1beta2.json b/packages/google-cloud-documentai/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1beta2.json index 25f9047d7547..ef56bd7e3eb3 100644 --- a/packages/google-cloud-documentai/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1beta2.json +++ b/packages/google-cloud-documentai/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1beta2.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-documentai", - "version": "2.20.1" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-documentai/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1beta3.json b/packages/google-cloud-documentai/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1beta3.json index ce8a6680ba5f..f47545a8ed3e 100644 --- a/packages/google-cloud-documentai/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1beta3.json +++ b/packages/google-cloud-documentai/samples/generated_samples/snippet_metadata_google.cloud.documentai.v1beta3.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-documentai", - "version": "2.20.1" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-documentai/tests/unit/gapic/documentai_v1/test_document_processor_service.py b/packages/google-cloud-documentai/tests/unit/gapic/documentai_v1/test_document_processor_service.py index 545dc0cc8832..5cd138f8821a 100644 --- a/packages/google-cloud-documentai/tests/unit/gapic/documentai_v1/test_document_processor_service.py +++ b/packages/google-cloud-documentai/tests/unit/gapic/documentai_v1/test_document_processor_service.py @@ -6679,8 +6679,9 @@ def test_process_document_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ProcessResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = document_processor_service.ProcessResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6755,10 +6756,9 @@ def test_process_document_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ProcessResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = document_processor_service.ProcessResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6885,8 +6885,9 @@ def test_process_document_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ProcessResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = document_processor_service.ProcessResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7217,10 +7218,11 @@ def test_fetch_processor_types_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.FetchProcessorTypesResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.FetchProcessorTypesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7294,10 +7296,11 @@ def test_fetch_processor_types_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.FetchProcessorTypesResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.FetchProcessorTypesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7425,10 +7428,11 @@ def test_fetch_processor_types_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.FetchProcessorTypesResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.FetchProcessorTypesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7493,10 +7497,11 @@ def test_list_processor_types_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListProcessorTypesResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorTypesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7578,10 +7583,11 @@ def test_list_processor_types_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListProcessorTypesResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorTypesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7717,10 +7723,11 @@ def test_list_processor_types_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListProcessorTypesResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorTypesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7848,8 +7855,9 @@ def test_get_processor_type_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = processor_type.ProcessorType.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor_type.ProcessorType.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7929,8 +7937,9 @@ def test_get_processor_type_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = processor_type.ProcessorType.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor_type.ProcessorType.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8058,8 +8067,9 @@ def test_get_processor_type_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = processor_type.ProcessorType.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor_type.ProcessorType.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8124,10 +8134,11 @@ def test_list_processors_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListProcessorsResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorsResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8209,10 +8220,11 @@ def test_list_processors_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListProcessorsResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorsResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8348,10 +8360,11 @@ def test_list_processors_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListProcessorsResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorsResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8479,8 +8492,9 @@ def test_get_processor_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = processor.Processor.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor.Processor.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8561,8 +8575,9 @@ def test_get_processor_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = processor.Processor.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor.Processor.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8687,8 +8702,9 @@ def test_get_processor_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = processor.Processor.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor.Processor.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9038,8 +9054,9 @@ def test_get_processor_version_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = processor.ProcessorVersion.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor.ProcessorVersion.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9119,8 +9136,9 @@ def test_get_processor_version_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = processor.ProcessorVersion.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor.ProcessorVersion.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9250,8 +9268,9 @@ def test_get_processor_version_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = processor.ProcessorVersion.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor.ProcessorVersion.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9316,10 +9335,11 @@ def test_list_processor_versions_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListProcessorVersionsResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorVersionsResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9401,12 +9421,11 @@ def test_list_processor_versions_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = ( - document_processor_service.ListProcessorVersionsResponse.pb( - return_value - ) + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorVersionsResponse.pb( + return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9546,10 +9565,11 @@ def test_list_processor_versions_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListProcessorVersionsResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorVersionsResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10493,6 +10513,75 @@ def test_create_processor_rest(request_type): "create_time": {"seconds": 751, "nanos": 543}, "kms_key_name": "kms_key_name_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = document_processor_service.CreateProcessorRequest.meta.fields[ + "processor" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["processor"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["processor"][field])): + del request_init["processor"][field][i][subfield] + else: + del request_init["processor"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -10511,8 +10600,9 @@ def test_create_processor_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcd_processor.Processor.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gcd_processor.Processor.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10594,8 +10684,9 @@ def test_create_processor_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gcd_processor.Processor.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gcd_processor.Processor.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10692,19 +10783,6 @@ def test_create_processor_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["processor"] = { - "name": "name_value", - "type_": "type__value", - "display_name": "display_name_value", - "state": 1, - "default_processor_version": "default_processor_version_value", - "processor_version_aliases": [ - {"alias": "alias_value", "processor_version": "processor_version_value"} - ], - "process_endpoint": "process_endpoint_value", - "create_time": {"seconds": 751, "nanos": 543}, - "kms_key_name": "kms_key_name_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -10743,8 +10821,9 @@ def test_create_processor_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcd_processor.Processor.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gcd_processor.Processor.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12275,8 +12354,9 @@ def test_get_evaluation_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = evaluation.Evaluation.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = evaluation.Evaluation.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12353,8 +12433,9 @@ def test_get_evaluation_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = evaluation.Evaluation.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = evaluation.Evaluation.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12484,8 +12565,9 @@ def test_get_evaluation_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = evaluation.Evaluation.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = evaluation.Evaluation.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12552,10 +12634,11 @@ def test_list_evaluations_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListEvaluationsResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListEvaluationsResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12637,10 +12720,11 @@ def test_list_evaluations_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListEvaluationsResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListEvaluationsResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12780,10 +12864,11 @@ def test_list_evaluations_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListEvaluationsResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListEvaluationsResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-documentai/tests/unit/gapic/documentai_v1beta3/test_document_processor_service.py b/packages/google-cloud-documentai/tests/unit/gapic/documentai_v1beta3/test_document_processor_service.py index 48571b0c2731..1c7b0f3b08c8 100644 --- a/packages/google-cloud-documentai/tests/unit/gapic/documentai_v1beta3/test_document_processor_service.py +++ b/packages/google-cloud-documentai/tests/unit/gapic/documentai_v1beta3/test_document_processor_service.py @@ -6928,8 +6928,9 @@ def test_process_document_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ProcessResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = document_processor_service.ProcessResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7005,10 +7006,9 @@ def test_process_document_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ProcessResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = document_processor_service.ProcessResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7135,8 +7135,9 @@ def test_process_document_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ProcessResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = document_processor_service.ProcessResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7467,10 +7468,11 @@ def test_fetch_processor_types_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.FetchProcessorTypesResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.FetchProcessorTypesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7544,10 +7546,11 @@ def test_fetch_processor_types_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.FetchProcessorTypesResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.FetchProcessorTypesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7675,10 +7678,11 @@ def test_fetch_processor_types_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.FetchProcessorTypesResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.FetchProcessorTypesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7743,10 +7747,11 @@ def test_list_processor_types_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListProcessorTypesResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorTypesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7828,10 +7833,11 @@ def test_list_processor_types_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListProcessorTypesResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorTypesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7967,10 +7973,11 @@ def test_list_processor_types_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListProcessorTypesResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorTypesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8098,8 +8105,9 @@ def test_get_processor_type_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = processor_type.ProcessorType.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor_type.ProcessorType.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8179,8 +8187,9 @@ def test_get_processor_type_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = processor_type.ProcessorType.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor_type.ProcessorType.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8308,8 +8317,9 @@ def test_get_processor_type_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = processor_type.ProcessorType.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor_type.ProcessorType.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8374,10 +8384,11 @@ def test_list_processors_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListProcessorsResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorsResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8459,10 +8470,11 @@ def test_list_processors_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListProcessorsResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorsResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8598,10 +8610,11 @@ def test_list_processors_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListProcessorsResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorsResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8730,8 +8743,9 @@ def test_get_processor_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = processor.Processor.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor.Processor.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8812,8 +8826,9 @@ def test_get_processor_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = processor.Processor.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor.Processor.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8938,8 +8953,9 @@ def test_get_processor_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = processor.Processor.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor.Processor.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9290,8 +9306,9 @@ def test_get_processor_version_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = processor.ProcessorVersion.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor.ProcessorVersion.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9371,8 +9388,9 @@ def test_get_processor_version_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = processor.ProcessorVersion.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor.ProcessorVersion.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9502,8 +9520,9 @@ def test_get_processor_version_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = processor.ProcessorVersion.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = processor.ProcessorVersion.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9568,10 +9587,11 @@ def test_list_processor_versions_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListProcessorVersionsResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorVersionsResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9653,12 +9673,11 @@ def test_list_processor_versions_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = ( - document_processor_service.ListProcessorVersionsResponse.pb( - return_value - ) + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorVersionsResponse.pb( + return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9798,10 +9817,11 @@ def test_list_processor_versions_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListProcessorVersionsResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListProcessorVersionsResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10745,6 +10765,75 @@ def test_create_processor_rest(request_type): "create_time": {"seconds": 751, "nanos": 543}, "kms_key_name": "kms_key_name_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = document_processor_service.CreateProcessorRequest.meta.fields[ + "processor" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["processor"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["processor"][field])): + del request_init["processor"][field][i][subfield] + else: + del request_init["processor"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -10763,8 +10852,9 @@ def test_create_processor_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcd_processor.Processor.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gcd_processor.Processor.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10846,8 +10936,9 @@ def test_create_processor_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gcd_processor.Processor.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gcd_processor.Processor.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10944,19 +11035,6 @@ def test_create_processor_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["processor"] = { - "name": "name_value", - "type_": "type__value", - "display_name": "display_name_value", - "state": 1, - "default_processor_version": "default_processor_version_value", - "processor_version_aliases": [ - {"alias": "alias_value", "processor_version": "processor_version_value"} - ], - "process_endpoint": "process_endpoint_value", - "create_time": {"seconds": 751, "nanos": 543}, - "kms_key_name": "kms_key_name_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -10995,8 +11073,9 @@ def test_create_processor_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcd_processor.Processor.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gcd_processor.Processor.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12529,8 +12608,9 @@ def test_get_evaluation_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = evaluation.Evaluation.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = evaluation.Evaluation.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12607,8 +12687,9 @@ def test_get_evaluation_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = evaluation.Evaluation.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = evaluation.Evaluation.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12738,8 +12819,9 @@ def test_get_evaluation_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = evaluation.Evaluation.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = evaluation.Evaluation.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12806,10 +12888,11 @@ def test_list_evaluations_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListEvaluationsResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListEvaluationsResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12891,10 +12974,11 @@ def test_list_evaluations_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListEvaluationsResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListEvaluationsResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -13034,10 +13118,11 @@ def test_list_evaluations_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_processor_service.ListEvaluationsResponse.pb( + # Convert return value to protobuf type + return_value = document_processor_service.ListEvaluationsResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-documentai/tests/unit/gapic/documentai_v1beta3/test_document_service.py b/packages/google-cloud-documentai/tests/unit/gapic/documentai_v1beta3/test_document_service.py index 3496b9be09e7..3f709e1a1fc3 100644 --- a/packages/google-cloud-documentai/tests/unit/gapic/documentai_v1beta3/test_document_service.py +++ b/packages/google-cloud-documentai/tests/unit/gapic/documentai_v1beta3/test_document_service.py @@ -2669,6 +2669,73 @@ def test_update_dataset_rest(request_type): "name": "projects/sample1/locations/sample2/processors/sample3/dataset", "state": 1, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = document_service.UpdateDatasetRequest.meta.fields["dataset"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["dataset"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["dataset"][field])): + del request_init["dataset"][field][i][subfield] + else: + del request_init["dataset"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -2844,19 +2911,6 @@ def test_update_dataset_rest_bad_request( "name": "projects/sample1/locations/sample2/processors/sample3/dataset" } } - request_init["dataset"] = { - "gcs_managed_config": { - "gcs_prefix": {"gcs_uri_prefix": "gcs_uri_prefix_value"} - }, - "document_warehouse_config": { - "collection": "collection_value", - "schema": "schema_value", - }, - "unmanaged_dataset_config": {}, - "spanner_indexing_config": {}, - "name": "projects/sample1/locations/sample2/processors/sample3/dataset", - "state": 1, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3255,8 +3309,9 @@ def test_get_document_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_service.GetDocumentResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = document_service.GetDocumentResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3338,8 +3393,9 @@ def test_get_document_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = document_service.GetDocumentResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = document_service.GetDocumentResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3482,8 +3538,9 @@ def test_get_document_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_service.GetDocumentResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = document_service.GetDocumentResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3551,8 +3608,9 @@ def test_list_documents_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_service.ListDocumentsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = document_service.ListDocumentsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3629,8 +3687,9 @@ def test_list_documents_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = document_service.ListDocumentsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = document_service.ListDocumentsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3759,8 +3818,9 @@ def test_list_documents_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = document_service.ListDocumentsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = document_service.ListDocumentsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4164,8 +4224,9 @@ def test_get_dataset_schema_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = dataset.DatasetSchema.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = dataset.DatasetSchema.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4242,8 +4303,9 @@ def test_get_dataset_schema_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = dataset.DatasetSchema.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = dataset.DatasetSchema.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4372,8 +4434,9 @@ def test_get_dataset_schema_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = dataset.DatasetSchema.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = dataset.DatasetSchema.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4465,6 +4528,75 @@ def test_update_dataset_schema_rest(request_type): }, }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = document_service.UpdateDatasetSchemaRequest.meta.fields[ + "dataset_schema" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["dataset_schema"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["dataset_schema"][field])): + del request_init["dataset_schema"][field][i][subfield] + else: + del request_init["dataset_schema"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -4477,8 +4609,9 @@ def test_update_dataset_schema_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = dataset.DatasetSchema.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = dataset.DatasetSchema.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4551,8 +4684,9 @@ def test_update_dataset_schema_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = dataset.DatasetSchema.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = dataset.DatasetSchema.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4644,41 +4778,6 @@ def test_update_dataset_schema_rest_bad_request( "name": "projects/sample1/locations/sample2/processors/sample3/dataset/datasetSchema" } } - request_init["dataset_schema"] = { - "name": "projects/sample1/locations/sample2/processors/sample3/dataset/datasetSchema", - "document_schema": { - "display_name": "display_name_value", - "description": "description_value", - "entity_types": [ - { - "enum_values": {"values": ["values_value1", "values_value2"]}, - "display_name": "display_name_value", - "name": "name_value", - "base_types": ["base_types_value1", "base_types_value2"], - "properties": [ - { - "name": "name_value", - "value_type": "value_type_value", - "occurrence_type": 1, - "property_metadata": { - "inactive": True, - "field_extraction_metadata": { - "summary_options": {"length": 1, "format_": 1} - }, - }, - } - ], - "entity_type_metadata": {"inactive": True}, - } - ], - "metadata": { - "document_splitter": True, - "document_allow_multiple_labels": True, - "prefixed_naming_on_properties": True, - "skip_naming_validation": True, - }, - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4721,8 +4820,9 @@ def test_update_dataset_schema_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = dataset.DatasetSchema.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = dataset.DatasetSchema.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-domains/CONTRIBUTING.rst b/packages/google-cloud-domains/CONTRIBUTING.rst index f573ed31ba14..9e6cb329de3e 100644 --- a/packages/google-cloud-domains/CONTRIBUTING.rst +++ b/packages/google-cloud-domains/CONTRIBUTING.rst @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system- -- -k + $ nox -s system-3.11 -- -k .. note:: - System tests are only configured to run under Python. + System tests are only configured to run under Python 3.8, 3.9, 3.10 and 3.11. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-domains/domains-v1-py.tar.gz b/packages/google-cloud-domains/domains-v1-py.tar.gz new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-domains/google/cloud/domains/gapic_version.py b/packages/google-cloud-domains/google/cloud/domains/gapic_version.py index 21964d6e5abf..360a0d13ebdd 100644 --- a/packages/google-cloud-domains/google/cloud/domains/gapic_version.py +++ b/packages/google-cloud-domains/google/cloud/domains/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.5.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-domains/google/cloud/domains_v1/gapic_version.py b/packages/google-cloud-domains/google/cloud/domains_v1/gapic_version.py index 21964d6e5abf..360a0d13ebdd 100644 --- a/packages/google-cloud-domains/google/cloud/domains_v1/gapic_version.py +++ b/packages/google-cloud-domains/google/cloud/domains_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.5.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-domains/google/cloud/domains_v1beta1/gapic_version.py b/packages/google-cloud-domains/google/cloud/domains_v1beta1/gapic_version.py index 21964d6e5abf..360a0d13ebdd 100644 --- a/packages/google-cloud-domains/google/cloud/domains_v1beta1/gapic_version.py +++ b/packages/google-cloud-domains/google/cloud/domains_v1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.5.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-domains/noxfile.py b/packages/google-cloud-domains/noxfile.py index 9a2acd8b6787..be54712bfa8f 100644 --- a/packages/google-cloud-domains/noxfile.py +++ b/packages/google-cloud-domains/noxfile.py @@ -46,7 +46,7 @@ UNIT_TEST_EXTRAS = [] UNIT_TEST_EXTRAS_BY_PYTHON = {} -SYSTEM_TEST_PYTHON_VERSIONS = [] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11"] SYSTEM_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", @@ -405,24 +405,3 @@ def prerelease_deps(session): session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") - - system_test_path = os.path.join("tests", "system.py") - system_test_folder_path = os.path.join("tests", "system") - - # Only run system tests if found. - if os.path.exists(system_test_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_path, - *session.posargs, - ) - if os.path.exists(system_test_folder_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_folder_path, - *session.posargs, - ) diff --git a/packages/google-cloud-domains/samples/generated_samples/snippet_metadata_google.cloud.domains.v1.json b/packages/google-cloud-domains/samples/generated_samples/snippet_metadata_google.cloud.domains.v1.json index 2c18ab81084e..5384077f78bd 100644 --- a/packages/google-cloud-domains/samples/generated_samples/snippet_metadata_google.cloud.domains.v1.json +++ b/packages/google-cloud-domains/samples/generated_samples/snippet_metadata_google.cloud.domains.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-domains", - "version": "1.5.3" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-domains/samples/generated_samples/snippet_metadata_google.cloud.domains.v1beta1.json b/packages/google-cloud-domains/samples/generated_samples/snippet_metadata_google.cloud.domains.v1beta1.json index 2cedb6e2d42b..7634af9e4008 100644 --- a/packages/google-cloud-domains/samples/generated_samples/snippet_metadata_google.cloud.domains.v1beta1.json +++ b/packages/google-cloud-domains/samples/generated_samples/snippet_metadata_google.cloud.domains.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-domains", - "version": "1.5.3" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-domains/tests/unit/gapic/domains_v1/test_domains.py b/packages/google-cloud-domains/tests/unit/gapic/domains_v1/test_domains.py index 5586eb7d8cb5..a904b0a8f8f4 100644 --- a/packages/google-cloud-domains/tests/unit/gapic/domains_v1/test_domains.py +++ b/packages/google-cloud-domains/tests/unit/gapic/domains_v1/test_domains.py @@ -4683,8 +4683,9 @@ def test_search_domains_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.SearchDomainsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.SearchDomainsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4765,8 +4766,9 @@ def test_search_domains_rest_required_fields(request_type=domains.SearchDomainsR response_value = Response() response_value.status_code = 200 - pb_return_value = domains.SearchDomainsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.SearchDomainsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4902,8 +4904,9 @@ def test_search_domains_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.SearchDomainsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.SearchDomainsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4967,8 +4970,9 @@ def test_retrieve_register_parameters_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.RetrieveRegisterParametersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.RetrieveRegisterParametersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5051,10 +5055,9 @@ def test_retrieve_register_parameters_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = domains.RetrieveRegisterParametersResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.RetrieveRegisterParametersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5192,8 +5195,9 @@ def test_retrieve_register_parameters_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.RetrieveRegisterParametersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.RetrieveRegisterParametersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5530,8 +5534,9 @@ def test_retrieve_transfer_parameters_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.RetrieveTransferParametersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.RetrieveTransferParametersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5614,10 +5619,9 @@ def test_retrieve_transfer_parameters_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = domains.RetrieveTransferParametersResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.RetrieveTransferParametersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5755,8 +5759,9 @@ def test_retrieve_transfer_parameters_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.RetrieveTransferParametersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.RetrieveTransferParametersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6097,8 +6102,9 @@ def test_list_registrations_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.ListRegistrationsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.ListRegistrationsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6181,8 +6187,9 @@ def test_list_registrations_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = domains.ListRegistrationsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.ListRegistrationsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6314,8 +6321,9 @@ def test_list_registrations_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.ListRegistrationsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.ListRegistrationsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6439,8 +6447,9 @@ def test_get_registration_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.Registration.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.Registration.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6519,8 +6528,9 @@ def test_get_registration_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = domains.Registration.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.Registration.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6641,8 +6651,9 @@ def test_get_registration_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.Registration.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.Registration.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6765,6 +6776,73 @@ def test_update_registration_rest(request_type): "pending_contact_settings": {}, "supported_privacy": [1], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = domains.UpdateRegistrationRequest.meta.fields["registration"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["registration"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["registration"][field])): + del request_init["registration"][field][i][subfield] + else: + del request_init["registration"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -6938,72 +7016,6 @@ def test_update_registration_rest_bad_request( "name": "projects/sample1/locations/sample2/registrations/sample3" } } - request_init["registration"] = { - "name": "projects/sample1/locations/sample2/registrations/sample3", - "domain_name": "domain_name_value", - "create_time": {"seconds": 751, "nanos": 543}, - "expire_time": {}, - "state": 1, - "issues": [1], - "labels": {}, - "management_settings": {"renewal_method": 1, "transfer_lock_state": 1}, - "dns_settings": { - "custom_dns": { - "name_servers": ["name_servers_value1", "name_servers_value2"], - "ds_records": [ - { - "key_tag": 740, - "algorithm": 1, - "digest_type": 1, - "digest": "digest_value", - } - ], - }, - "google_domains_dns": { - "name_servers": ["name_servers_value1", "name_servers_value2"], - "ds_state": 1, - "ds_records": {}, - }, - "glue_records": [ - { - "host_name": "host_name_value", - "ipv4_addresses": [ - "ipv4_addresses_value1", - "ipv4_addresses_value2", - ], - "ipv6_addresses": [ - "ipv6_addresses_value1", - "ipv6_addresses_value2", - ], - } - ], - }, - "contact_settings": { - "privacy": 1, - "registrant_contact": { - "postal_address": { - "revision": 879, - "region_code": "region_code_value", - "language_code": "language_code_value", - "postal_code": "postal_code_value", - "sorting_code": "sorting_code_value", - "administrative_area": "administrative_area_value", - "locality": "locality_value", - "sublocality": "sublocality_value", - "address_lines": ["address_lines_value1", "address_lines_value2"], - "recipients": ["recipients_value1", "recipients_value2"], - "organization": "organization_value", - }, - "email": "email_value", - "phone_number": "phone_number_value", - "fax_number": "fax_number_value", - }, - "admin_contact": {}, - "technical_contact": {}, - }, - "pending_contact_settings": {}, - "supported_privacy": [1], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -8499,8 +8511,9 @@ def test_retrieve_authorization_code_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.AuthorizationCode.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.AuthorizationCode.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8575,8 +8588,9 @@ def test_retrieve_authorization_code_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = domains.AuthorizationCode.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.AuthorizationCode.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8703,8 +8717,9 @@ def test_retrieve_authorization_code_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.AuthorizationCode.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.AuthorizationCode.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8771,8 +8786,9 @@ def test_reset_authorization_code_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.AuthorizationCode.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.AuthorizationCode.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8848,8 +8864,9 @@ def test_reset_authorization_code_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = domains.AuthorizationCode.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.AuthorizationCode.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8976,8 +8993,9 @@ def test_reset_authorization_code_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.AuthorizationCode.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.AuthorizationCode.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-domains/tests/unit/gapic/domains_v1beta1/test_domains.py b/packages/google-cloud-domains/tests/unit/gapic/domains_v1beta1/test_domains.py index 5b0408159950..c03155c8f6cf 100644 --- a/packages/google-cloud-domains/tests/unit/gapic/domains_v1beta1/test_domains.py +++ b/packages/google-cloud-domains/tests/unit/gapic/domains_v1beta1/test_domains.py @@ -4683,8 +4683,9 @@ def test_search_domains_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.SearchDomainsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.SearchDomainsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4765,8 +4766,9 @@ def test_search_domains_rest_required_fields(request_type=domains.SearchDomainsR response_value = Response() response_value.status_code = 200 - pb_return_value = domains.SearchDomainsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.SearchDomainsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4902,8 +4904,9 @@ def test_search_domains_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.SearchDomainsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.SearchDomainsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4967,8 +4970,9 @@ def test_retrieve_register_parameters_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.RetrieveRegisterParametersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.RetrieveRegisterParametersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5051,10 +5055,9 @@ def test_retrieve_register_parameters_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = domains.RetrieveRegisterParametersResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.RetrieveRegisterParametersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5192,8 +5195,9 @@ def test_retrieve_register_parameters_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.RetrieveRegisterParametersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.RetrieveRegisterParametersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5530,8 +5534,9 @@ def test_retrieve_transfer_parameters_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.RetrieveTransferParametersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.RetrieveTransferParametersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5614,10 +5619,9 @@ def test_retrieve_transfer_parameters_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = domains.RetrieveTransferParametersResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.RetrieveTransferParametersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5755,8 +5759,9 @@ def test_retrieve_transfer_parameters_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.RetrieveTransferParametersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.RetrieveTransferParametersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6097,8 +6102,9 @@ def test_list_registrations_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.ListRegistrationsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.ListRegistrationsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6181,8 +6187,9 @@ def test_list_registrations_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = domains.ListRegistrationsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.ListRegistrationsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6314,8 +6321,9 @@ def test_list_registrations_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.ListRegistrationsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.ListRegistrationsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6439,8 +6447,9 @@ def test_get_registration_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.Registration.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.Registration.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6519,8 +6528,9 @@ def test_get_registration_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = domains.Registration.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.Registration.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6641,8 +6651,9 @@ def test_get_registration_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.Registration.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.Registration.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6765,6 +6776,73 @@ def test_update_registration_rest(request_type): "pending_contact_settings": {}, "supported_privacy": [1], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = domains.UpdateRegistrationRequest.meta.fields["registration"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["registration"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["registration"][field])): + del request_init["registration"][field][i][subfield] + else: + del request_init["registration"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -6938,72 +7016,6 @@ def test_update_registration_rest_bad_request( "name": "projects/sample1/locations/sample2/registrations/sample3" } } - request_init["registration"] = { - "name": "projects/sample1/locations/sample2/registrations/sample3", - "domain_name": "domain_name_value", - "create_time": {"seconds": 751, "nanos": 543}, - "expire_time": {}, - "state": 1, - "issues": [1], - "labels": {}, - "management_settings": {"renewal_method": 1, "transfer_lock_state": 1}, - "dns_settings": { - "custom_dns": { - "name_servers": ["name_servers_value1", "name_servers_value2"], - "ds_records": [ - { - "key_tag": 740, - "algorithm": 1, - "digest_type": 1, - "digest": "digest_value", - } - ], - }, - "google_domains_dns": { - "name_servers": ["name_servers_value1", "name_servers_value2"], - "ds_state": 1, - "ds_records": {}, - }, - "glue_records": [ - { - "host_name": "host_name_value", - "ipv4_addresses": [ - "ipv4_addresses_value1", - "ipv4_addresses_value2", - ], - "ipv6_addresses": [ - "ipv6_addresses_value1", - "ipv6_addresses_value2", - ], - } - ], - }, - "contact_settings": { - "privacy": 1, - "registrant_contact": { - "postal_address": { - "revision": 879, - "region_code": "region_code_value", - "language_code": "language_code_value", - "postal_code": "postal_code_value", - "sorting_code": "sorting_code_value", - "administrative_area": "administrative_area_value", - "locality": "locality_value", - "sublocality": "sublocality_value", - "address_lines": ["address_lines_value1", "address_lines_value2"], - "recipients": ["recipients_value1", "recipients_value2"], - "organization": "organization_value", - }, - "email": "email_value", - "phone_number": "phone_number_value", - "fax_number": "fax_number_value", - }, - "admin_contact": {}, - "technical_contact": {}, - }, - "pending_contact_settings": {}, - "supported_privacy": [1], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -8499,8 +8511,9 @@ def test_retrieve_authorization_code_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.AuthorizationCode.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.AuthorizationCode.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8575,8 +8588,9 @@ def test_retrieve_authorization_code_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = domains.AuthorizationCode.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.AuthorizationCode.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8703,8 +8717,9 @@ def test_retrieve_authorization_code_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.AuthorizationCode.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.AuthorizationCode.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8771,8 +8786,9 @@ def test_reset_authorization_code_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.AuthorizationCode.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.AuthorizationCode.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8848,8 +8864,9 @@ def test_reset_authorization_code_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = domains.AuthorizationCode.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.AuthorizationCode.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8976,8 +8993,9 @@ def test_reset_authorization_code_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = domains.AuthorizationCode.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = domains.AuthorizationCode.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-edgecontainer/CONTRIBUTING.rst b/packages/google-cloud-edgecontainer/CONTRIBUTING.rst index 493bd49df04a..a91a856f2013 100644 --- a/packages/google-cloud-edgecontainer/CONTRIBUTING.rst +++ b/packages/google-cloud-edgecontainer/CONTRIBUTING.rst @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system- -- -k + $ nox -s system-3.11 -- -k .. note:: - System tests are only configured to run under Python. + System tests are only configured to run under Python 3.8, 3.9, 3.10 and 3.11. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-edgecontainer/google/cloud/edgecontainer/gapic_version.py b/packages/google-cloud-edgecontainer/google/cloud/edgecontainer/gapic_version.py index 7951a72dc56f..360a0d13ebdd 100644 --- a/packages/google-cloud-edgecontainer/google/cloud/edgecontainer/gapic_version.py +++ b/packages/google-cloud-edgecontainer/google/cloud/edgecontainer/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.5.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-edgecontainer/google/cloud/edgecontainer_v1/gapic_version.py b/packages/google-cloud-edgecontainer/google/cloud/edgecontainer_v1/gapic_version.py index 7951a72dc56f..360a0d13ebdd 100644 --- a/packages/google-cloud-edgecontainer/google/cloud/edgecontainer_v1/gapic_version.py +++ b/packages/google-cloud-edgecontainer/google/cloud/edgecontainer_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.5.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-edgecontainer/noxfile.py b/packages/google-cloud-edgecontainer/noxfile.py index 9a2acd8b6787..be54712bfa8f 100644 --- a/packages/google-cloud-edgecontainer/noxfile.py +++ b/packages/google-cloud-edgecontainer/noxfile.py @@ -46,7 +46,7 @@ UNIT_TEST_EXTRAS = [] UNIT_TEST_EXTRAS_BY_PYTHON = {} -SYSTEM_TEST_PYTHON_VERSIONS = [] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11"] SYSTEM_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", @@ -405,24 +405,3 @@ def prerelease_deps(session): session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") - - system_test_path = os.path.join("tests", "system.py") - system_test_folder_path = os.path.join("tests", "system") - - # Only run system tests if found. - if os.path.exists(system_test_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_path, - *session.posargs, - ) - if os.path.exists(system_test_folder_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_folder_path, - *session.posargs, - ) diff --git a/packages/google-cloud-edgecontainer/samples/generated_samples/snippet_metadata_google.cloud.edgecontainer.v1.json b/packages/google-cloud-edgecontainer/samples/generated_samples/snippet_metadata_google.cloud.edgecontainer.v1.json index 9bdb91a1e4d0..523c75f1dabd 100644 --- a/packages/google-cloud-edgecontainer/samples/generated_samples/snippet_metadata_google.cloud.edgecontainer.v1.json +++ b/packages/google-cloud-edgecontainer/samples/generated_samples/snippet_metadata_google.cloud.edgecontainer.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-edgecontainer", - "version": "0.5.3" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-edgecontainer/tests/unit/gapic/edgecontainer_v1/test_edge_container.py b/packages/google-cloud-edgecontainer/tests/unit/gapic/edgecontainer_v1/test_edge_container.py index 6b03bfb6d6e8..ada4fcdcf1ce 100644 --- a/packages/google-cloud-edgecontainer/tests/unit/gapic/edgecontainer_v1/test_edge_container.py +++ b/packages/google-cloud-edgecontainer/tests/unit/gapic/edgecontainer_v1/test_edge_container.py @@ -5620,8 +5620,9 @@ def test_list_clusters_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListClustersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListClustersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5704,8 +5705,9 @@ def test_list_clusters_rest_required_fields(request_type=service.ListClustersReq response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListClustersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListClustersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5838,8 +5840,9 @@ def test_list_clusters_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListClustersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListClustersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5961,8 +5964,9 @@ def test_get_cluster_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = resources.Cluster.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = resources.Cluster.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6038,8 +6042,9 @@ def test_get_cluster_rest_required_fields(request_type=service.GetClusterRequest response_value = Response() response_value.status_code = 200 - pb_return_value = resources.Cluster.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = resources.Cluster.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6160,8 +6165,9 @@ def test_get_cluster_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = resources.Cluster.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = resources.Cluster.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6242,6 +6248,73 @@ def test_create_cluster_rest(request_type): } }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = service.CreateClusterRequest.meta.fields["cluster"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["cluster"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["cluster"][field])): + del request_init["cluster"][field][i][subfield] + else: + del request_init["cluster"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -6446,35 +6519,6 @@ def test_create_cluster_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["cluster"] = { - "name": "name_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "fleet": {"project": "project_value", "membership": "membership_value"}, - "networking": { - "cluster_ipv4_cidr_blocks": [ - "cluster_ipv4_cidr_blocks_value1", - "cluster_ipv4_cidr_blocks_value2", - ], - "services_ipv4_cidr_blocks": [ - "services_ipv4_cidr_blocks_value1", - "services_ipv4_cidr_blocks_value2", - ], - }, - "authorization": {"admin_users": {"username": "username_value"}}, - "default_max_pods_per_node": 2634, - "endpoint": "endpoint_value", - "cluster_ca_certificate": "cluster_ca_certificate_value", - "maintenance_policy": { - "window": { - "recurring_window": { - "window": {"start_time": {}, "end_time": {}}, - "recurrence": "recurrence_value", - } - } - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -6599,6 +6643,73 @@ def test_update_cluster_rest(request_type): } }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = service.UpdateClusterRequest.meta.fields["cluster"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["cluster"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["cluster"][field])): + del request_init["cluster"][field][i][subfield] + else: + del request_init["cluster"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -6688,35 +6799,6 @@ def test_update_cluster_rest_bad_request( request_init = { "cluster": {"name": "projects/sample1/locations/sample2/clusters/sample3"} } - request_init["cluster"] = { - "name": "projects/sample1/locations/sample2/clusters/sample3", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "fleet": {"project": "project_value", "membership": "membership_value"}, - "networking": { - "cluster_ipv4_cidr_blocks": [ - "cluster_ipv4_cidr_blocks_value1", - "cluster_ipv4_cidr_blocks_value2", - ], - "services_ipv4_cidr_blocks": [ - "services_ipv4_cidr_blocks_value1", - "services_ipv4_cidr_blocks_value2", - ], - }, - "authorization": {"admin_users": {"username": "username_value"}}, - "default_max_pods_per_node": 2634, - "endpoint": "endpoint_value", - "cluster_ca_certificate": "cluster_ca_certificate_value", - "maintenance_policy": { - "window": { - "recurring_window": { - "window": {"start_time": {}, "end_time": {}}, - "recurrence": "recurrence_value", - } - } - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -7083,8 +7165,9 @@ def test_generate_access_token_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.GenerateAccessTokenResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.GenerateAccessTokenResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7159,8 +7242,9 @@ def test_generate_access_token_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.GenerateAccessTokenResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.GenerateAccessTokenResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7287,8 +7371,9 @@ def test_generate_access_token_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.GenerateAccessTokenResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.GenerateAccessTokenResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7354,8 +7439,9 @@ def test_list_node_pools_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListNodePoolsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListNodePoolsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7440,8 +7526,9 @@ def test_list_node_pools_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListNodePoolsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListNodePoolsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7576,8 +7663,9 @@ def test_list_node_pools_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListNodePoolsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListNodePoolsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7704,8 +7792,9 @@ def test_get_node_pool_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = resources.NodePool.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = resources.NodePool.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7781,8 +7870,9 @@ def test_get_node_pool_rest_required_fields(request_type=service.GetNodePoolRequ response_value = Response() response_value.status_code = 200 - pb_return_value = resources.NodePool.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = resources.NodePool.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7907,8 +7997,9 @@ def test_get_node_pool_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = resources.NodePool.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = resources.NodePool.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7985,6 +8076,73 @@ def test_create_node_pool_rest(request_type): }, }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = service.CreateNodePoolRequest.meta.fields["node_pool"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["node_pool"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["node_pool"][field])): + del request_init["node_pool"][field][i][subfield] + else: + del request_init["node_pool"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -8191,30 +8349,6 @@ def test_create_node_pool_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2/clusters/sample3"} - request_init["node_pool"] = { - "name": "name_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "node_location": "node_location_value", - "node_count": 1070, - "machine_filter": "machine_filter_value", - "local_disk_encryption": { - "kms_key": "kms_key_value", - "kms_key_active_version": "kms_key_active_version_value", - "kms_key_state": 1, - "kms_status": { - "code": 411, - "message": "message_value", - "details": [ - { - "type_url": "type.googleapis.com/google.protobuf.Duration", - "value": b"\x08\x0c\x10\xdb\x07", - } - ], - }, - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -8339,6 +8473,73 @@ def test_update_node_pool_rest(request_type): }, }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = service.UpdateNodePoolRequest.meta.fields["node_pool"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["node_pool"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["node_pool"][field])): + del request_init["node_pool"][field][i][subfield] + else: + del request_init["node_pool"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -8430,30 +8631,6 @@ def test_update_node_pool_rest_bad_request( "name": "projects/sample1/locations/sample2/clusters/sample3/nodePools/sample4" } } - request_init["node_pool"] = { - "name": "projects/sample1/locations/sample2/clusters/sample3/nodePools/sample4", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "node_location": "node_location_value", - "node_count": 1070, - "machine_filter": "machine_filter_value", - "local_disk_encryption": { - "kms_key": "kms_key_value", - "kms_key_active_version": "kms_key_active_version_value", - "kms_key_state": 1, - "kms_status": { - "code": 411, - "message": "message_value", - "details": [ - { - "type_url": "type.googleapis.com/google.protobuf.Duration", - "value": b"\x08\x0c\x10\xdb\x07", - } - ], - }, - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -8832,8 +9009,9 @@ def test_list_machines_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListMachinesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListMachinesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8916,8 +9094,9 @@ def test_list_machines_rest_required_fields(request_type=service.ListMachinesReq response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListMachinesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListMachinesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9050,8 +9229,9 @@ def test_list_machines_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListMachinesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListMachinesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9173,8 +9353,9 @@ def test_get_machine_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = resources.Machine.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = resources.Machine.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9250,8 +9431,9 @@ def test_get_machine_rest_required_fields(request_type=service.GetMachineRequest response_value = Response() response_value.status_code = 200 - pb_return_value = resources.Machine.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = resources.Machine.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9372,8 +9554,9 @@ def test_get_machine_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = resources.Machine.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = resources.Machine.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9438,8 +9621,9 @@ def test_list_vpn_connections_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListVpnConnectionsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListVpnConnectionsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9524,8 +9708,9 @@ def test_list_vpn_connections_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListVpnConnectionsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListVpnConnectionsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9660,8 +9845,9 @@ def test_list_vpn_connections_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListVpnConnectionsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListVpnConnectionsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9788,8 +9974,9 @@ def test_get_vpn_connection_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = resources.VpnConnection.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = resources.VpnConnection.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9869,8 +10056,9 @@ def test_get_vpn_connection_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = resources.VpnConnection.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = resources.VpnConnection.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9997,8 +10185,9 @@ def test_get_vpn_connection_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = resources.VpnConnection.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = resources.VpnConnection.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10072,6 +10261,73 @@ def test_create_vpn_connection_rest(request_type): "cloud_vpns": [{"gateway": "gateway_value"}], }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = service.CreateVpnConnectionRequest.meta.fields["vpn_connection"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["vpn_connection"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["vpn_connection"][field])): + del request_init["vpn_connection"][field][i][subfield] + else: + del request_init["vpn_connection"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -10280,27 +10536,6 @@ def test_create_vpn_connection_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["vpn_connection"] = { - "name": "name_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "nat_gateway_ip": "nat_gateway_ip_value", - "bgp_routing_mode": 1, - "cluster": "cluster_value", - "vpc": "vpc_value", - "vpc_project": { - "project_id": "project_id_value", - "service_account": "service_account_value", - }, - "enable_high_availability": True, - "details": { - "state": 1, - "error": "error_value", - "cloud_router": {"name": "name_value"}, - "cloud_vpns": [{"gateway": "gateway_value"}], - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. diff --git a/packages/google-cloud-enterpriseknowledgegraph/CONTRIBUTING.rst b/packages/google-cloud-enterpriseknowledgegraph/CONTRIBUTING.rst index bd5cd1318ded..a4dc1ba8ceef 100644 --- a/packages/google-cloud-enterpriseknowledgegraph/CONTRIBUTING.rst +++ b/packages/google-cloud-enterpriseknowledgegraph/CONTRIBUTING.rst @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system- -- -k + $ nox -s system-3.11 -- -k .. note:: - System tests are only configured to run under Python. + System tests are only configured to run under Python 3.8, 3.9, 3.10 and 3.11. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-enterpriseknowledgegraph/google/cloud/enterpriseknowledgegraph/gapic_version.py b/packages/google-cloud-enterpriseknowledgegraph/google/cloud/enterpriseknowledgegraph/gapic_version.py index 3d5b3af8dd99..360a0d13ebdd 100644 --- a/packages/google-cloud-enterpriseknowledgegraph/google/cloud/enterpriseknowledgegraph/gapic_version.py +++ b/packages/google-cloud-enterpriseknowledgegraph/google/cloud/enterpriseknowledgegraph/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.3.4" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-enterpriseknowledgegraph/google/cloud/enterpriseknowledgegraph_v1/gapic_version.py b/packages/google-cloud-enterpriseknowledgegraph/google/cloud/enterpriseknowledgegraph_v1/gapic_version.py index 3d5b3af8dd99..360a0d13ebdd 100644 --- a/packages/google-cloud-enterpriseknowledgegraph/google/cloud/enterpriseknowledgegraph_v1/gapic_version.py +++ b/packages/google-cloud-enterpriseknowledgegraph/google/cloud/enterpriseknowledgegraph_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.3.4" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-enterpriseknowledgegraph/noxfile.py b/packages/google-cloud-enterpriseknowledgegraph/noxfile.py index 9a2acd8b6787..be54712bfa8f 100644 --- a/packages/google-cloud-enterpriseknowledgegraph/noxfile.py +++ b/packages/google-cloud-enterpriseknowledgegraph/noxfile.py @@ -46,7 +46,7 @@ UNIT_TEST_EXTRAS = [] UNIT_TEST_EXTRAS_BY_PYTHON = {} -SYSTEM_TEST_PYTHON_VERSIONS = [] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11"] SYSTEM_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", @@ -405,24 +405,3 @@ def prerelease_deps(session): session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") - - system_test_path = os.path.join("tests", "system.py") - system_test_folder_path = os.path.join("tests", "system") - - # Only run system tests if found. - if os.path.exists(system_test_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_path, - *session.posargs, - ) - if os.path.exists(system_test_folder_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_folder_path, - *session.posargs, - ) diff --git a/packages/google-cloud-enterpriseknowledgegraph/samples/generated_samples/snippet_metadata_google.cloud.enterpriseknowledgegraph.v1.json b/packages/google-cloud-enterpriseknowledgegraph/samples/generated_samples/snippet_metadata_google.cloud.enterpriseknowledgegraph.v1.json index b295bf267c99..ada6b2e84d57 100644 --- a/packages/google-cloud-enterpriseknowledgegraph/samples/generated_samples/snippet_metadata_google.cloud.enterpriseknowledgegraph.v1.json +++ b/packages/google-cloud-enterpriseknowledgegraph/samples/generated_samples/snippet_metadata_google.cloud.enterpriseknowledgegraph.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-enterpriseknowledgegraph", - "version": "0.3.4" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-enterpriseknowledgegraph/tests/unit/gapic/enterpriseknowledgegraph_v1/test_enterprise_knowledge_graph_service.py b/packages/google-cloud-enterpriseknowledgegraph/tests/unit/gapic/enterpriseknowledgegraph_v1/test_enterprise_knowledge_graph_service.py index 77f8713685e2..2f198b74739b 100644 --- a/packages/google-cloud-enterpriseknowledgegraph/tests/unit/gapic/enterpriseknowledgegraph_v1/test_enterprise_knowledge_graph_service.py +++ b/packages/google-cloud-enterpriseknowledgegraph/tests/unit/gapic/enterpriseknowledgegraph_v1/test_enterprise_knowledge_graph_service.py @@ -3200,6 +3200,79 @@ def test_create_entity_reconciliation_job_rest(request_type): }, }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = service.CreateEntityReconciliationJobRequest.meta.fields[ + "entity_reconciliation_job" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init[ + "entity_reconciliation_job" + ].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range( + 0, len(request_init["entity_reconciliation_job"][field]) + ): + del request_init["entity_reconciliation_job"][field][i][subfield] + else: + del request_init["entity_reconciliation_job"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -3213,8 +3286,9 @@ def test_create_entity_reconciliation_job_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.EntityReconciliationJob.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.EntityReconciliationJob.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3291,8 +3365,9 @@ def test_create_entity_reconciliation_job_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.EntityReconciliationJob.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.EntityReconciliationJob.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3392,40 +3467,6 @@ def test_create_entity_reconciliation_job_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["entity_reconciliation_job"] = { - "name": "name_value", - "input_config": { - "bigquery_input_configs": [ - {"bigquery_table": "bigquery_table_value", "gcs_uri": "gcs_uri_value"} - ], - "entity_type": 1, - "previous_result_bigquery_table": "previous_result_bigquery_table_value", - }, - "output_config": {"bigquery_dataset": "bigquery_dataset_value"}, - "state": 9, - "error": { - "code": 411, - "message": "message_value", - "details": [ - { - "type_url": "type.googleapis.com/google.protobuf.Duration", - "value": b"\x08\x0c\x10\xdb\x07", - } - ], - }, - "create_time": {"seconds": 751, "nanos": 543}, - "end_time": {}, - "update_time": {}, - "recon_config": { - "connected_components_config": {"weight_threshold": 0.1716}, - "affinity_clustering_config": {"compression_round_count": 2497}, - "options": {"enable_geocoding_separation": True}, - "model_config": { - "model_name": "model_name_value", - "version_tag": "version_tag_value", - }, - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3466,8 +3507,9 @@ def test_create_entity_reconciliation_job_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.EntityReconciliationJob.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.EntityReconciliationJob.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3538,8 +3580,9 @@ def test_get_entity_reconciliation_job_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.EntityReconciliationJob.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.EntityReconciliationJob.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3615,8 +3658,9 @@ def test_get_entity_reconciliation_job_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.EntityReconciliationJob.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.EntityReconciliationJob.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3749,8 +3793,9 @@ def test_get_entity_reconciliation_job_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.EntityReconciliationJob.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.EntityReconciliationJob.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3815,8 +3860,9 @@ def test_list_entity_reconciliation_jobs_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListEntityReconciliationJobsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListEntityReconciliationJobsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3899,10 +3945,9 @@ def test_list_entity_reconciliation_jobs_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListEntityReconciliationJobsResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListEntityReconciliationJobsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4042,8 +4087,9 @@ def test_list_entity_reconciliation_jobs_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListEntityReconciliationJobsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListEntityReconciliationJobsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4690,8 +4736,9 @@ def test_lookup_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.LookupResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.LookupResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4777,8 +4824,9 @@ def test_lookup_rest_required_fields(request_type=service.LookupRequest): response_value = Response() response_value.status_code = 200 - pb_return_value = service.LookupResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.LookupResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4921,8 +4969,9 @@ def test_lookup_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.LookupResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.LookupResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4986,8 +5035,9 @@ def test_search_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.SearchResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.SearchResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5075,8 +5125,9 @@ def test_search_rest_required_fields(request_type=service.SearchRequest): response_value = Response() response_value.status_code = 200 - pb_return_value = service.SearchResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.SearchResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5221,8 +5272,9 @@ def test_search_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.SearchResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.SearchResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5286,8 +5338,9 @@ def test_lookup_public_kg_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.LookupPublicKgResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.LookupPublicKgResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5375,8 +5428,9 @@ def test_lookup_public_kg_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.LookupPublicKgResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.LookupPublicKgResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5521,8 +5575,9 @@ def test_lookup_public_kg_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.LookupPublicKgResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.LookupPublicKgResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5586,8 +5641,9 @@ def test_search_public_kg_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.SearchPublicKgResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.SearchPublicKgResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5677,8 +5733,9 @@ def test_search_public_kg_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.SearchPublicKgResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.SearchPublicKgResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5825,8 +5882,9 @@ def test_search_public_kg_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.SearchPublicKgResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.SearchPublicKgResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-essential-contacts/CONTRIBUTING.rst b/packages/google-cloud-essential-contacts/CONTRIBUTING.rst index 5eaa806e5b38..441a5e39533e 100644 --- a/packages/google-cloud-essential-contacts/CONTRIBUTING.rst +++ b/packages/google-cloud-essential-contacts/CONTRIBUTING.rst @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system- -- -k + $ nox -s system-3.11 -- -k .. note:: - System tests are only configured to run under Python. + System tests are only configured to run under Python 3.8, 3.9, 3.10 and 3.11. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-essential-contacts/google/cloud/essential_contacts/gapic_version.py b/packages/google-cloud-essential-contacts/google/cloud/essential_contacts/gapic_version.py index c074f6544461..360a0d13ebdd 100644 --- a/packages/google-cloud-essential-contacts/google/cloud/essential_contacts/gapic_version.py +++ b/packages/google-cloud-essential-contacts/google/cloud/essential_contacts/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.5.4" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-essential-contacts/google/cloud/essential_contacts_v1/gapic_version.py b/packages/google-cloud-essential-contacts/google/cloud/essential_contacts_v1/gapic_version.py index c074f6544461..360a0d13ebdd 100644 --- a/packages/google-cloud-essential-contacts/google/cloud/essential_contacts_v1/gapic_version.py +++ b/packages/google-cloud-essential-contacts/google/cloud/essential_contacts_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.5.4" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-essential-contacts/noxfile.py b/packages/google-cloud-essential-contacts/noxfile.py index 9a2acd8b6787..be54712bfa8f 100644 --- a/packages/google-cloud-essential-contacts/noxfile.py +++ b/packages/google-cloud-essential-contacts/noxfile.py @@ -46,7 +46,7 @@ UNIT_TEST_EXTRAS = [] UNIT_TEST_EXTRAS_BY_PYTHON = {} -SYSTEM_TEST_PYTHON_VERSIONS = [] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11"] SYSTEM_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", @@ -405,24 +405,3 @@ def prerelease_deps(session): session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") - - system_test_path = os.path.join("tests", "system.py") - system_test_folder_path = os.path.join("tests", "system") - - # Only run system tests if found. - if os.path.exists(system_test_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_path, - *session.posargs, - ) - if os.path.exists(system_test_folder_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_folder_path, - *session.posargs, - ) diff --git a/packages/google-cloud-essential-contacts/samples/generated_samples/snippet_metadata_google.cloud.essentialcontacts.v1.json b/packages/google-cloud-essential-contacts/samples/generated_samples/snippet_metadata_google.cloud.essentialcontacts.v1.json index 6f9933282ab2..5c3df15cfed5 100644 --- a/packages/google-cloud-essential-contacts/samples/generated_samples/snippet_metadata_google.cloud.essentialcontacts.v1.json +++ b/packages/google-cloud-essential-contacts/samples/generated_samples/snippet_metadata_google.cloud.essentialcontacts.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-essential-contacts", - "version": "1.5.4" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-essential-contacts/tests/unit/gapic/essential_contacts_v1/test_essential_contacts_service.py b/packages/google-cloud-essential-contacts/tests/unit/gapic/essential_contacts_v1/test_essential_contacts_service.py index f61a5afa7b8b..ab3d9e9fbe81 100644 --- a/packages/google-cloud-essential-contacts/tests/unit/gapic/essential_contacts_v1/test_essential_contacts_service.py +++ b/packages/google-cloud-essential-contacts/tests/unit/gapic/essential_contacts_v1/test_essential_contacts_service.py @@ -2676,6 +2676,73 @@ def test_create_contact_rest(request_type): "validation_state": 1, "validate_time": {"seconds": 751, "nanos": 543}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = service.CreateContactRequest.meta.fields["contact"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["contact"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["contact"][field])): + del request_init["contact"][field][i][subfield] + else: + del request_init["contact"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -2692,8 +2759,9 @@ def test_create_contact_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.Contact.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.Contact.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2773,8 +2841,9 @@ def test_create_contact_rest_required_fields(request_type=service.CreateContactR response_value = Response() response_value.status_code = 200 - pb_return_value = service.Contact.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.Contact.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2866,14 +2935,6 @@ def test_create_contact_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1"} - request_init["contact"] = { - "name": "name_value", - "email": "email_value", - "notification_category_subscriptions": [2], - "language_tag": "language_tag_value", - "validation_state": 1, - "validate_time": {"seconds": 751, "nanos": 543}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2912,8 +2973,9 @@ def test_create_contact_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.Contact.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.Contact.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2973,6 +3035,73 @@ def test_update_contact_rest(request_type): "validation_state": 1, "validate_time": {"seconds": 751, "nanos": 543}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = service.UpdateContactRequest.meta.fields["contact"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["contact"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["contact"][field])): + del request_init["contact"][field][i][subfield] + else: + del request_init["contact"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -2989,8 +3118,9 @@ def test_update_contact_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.Contact.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.Contact.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3067,8 +3197,9 @@ def test_update_contact_rest_required_fields(request_type=service.UpdateContactR response_value = Response() response_value.status_code = 200 - pb_return_value = service.Contact.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.Contact.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3152,14 +3283,6 @@ def test_update_contact_rest_bad_request( # send a request that will satisfy transcoding request_init = {"contact": {"name": "projects/sample1/contacts/sample2"}} - request_init["contact"] = { - "name": "projects/sample1/contacts/sample2", - "email": "email_value", - "notification_category_subscriptions": [2], - "language_tag": "language_tag_value", - "validation_state": 1, - "validate_time": {"seconds": 751, "nanos": 543}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3198,8 +3321,9 @@ def test_update_contact_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.Contact.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.Contact.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3264,8 +3388,9 @@ def test_list_contacts_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListContactsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListContactsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3345,8 +3470,9 @@ def test_list_contacts_rest_required_fields(request_type=service.ListContactsReq response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListContactsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListContactsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3477,8 +3603,9 @@ def test_list_contacts_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListContactsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListContactsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3600,8 +3727,9 @@ def test_get_contact_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.Contact.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.Contact.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3680,8 +3808,9 @@ def test_get_contact_rest_required_fields(request_type=service.GetContactRequest response_value = Response() response_value.status_code = 200 - pb_return_value = service.Contact.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.Contact.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3802,8 +3931,9 @@ def test_get_contact_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.Contact.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.Contact.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4113,8 +4243,9 @@ def test_compute_contacts_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ComputeContactsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ComputeContactsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4197,8 +4328,9 @@ def test_compute_contacts_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.ComputeContactsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ComputeContactsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-eventarc/CONTRIBUTING.rst b/packages/google-cloud-eventarc/CONTRIBUTING.rst index 2d1b090f220a..6619e1c6bafc 100644 --- a/packages/google-cloud-eventarc/CONTRIBUTING.rst +++ b/packages/google-cloud-eventarc/CONTRIBUTING.rst @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system- -- -k + $ nox -s system-3.11 -- -k .. note:: - System tests are only configured to run under Python. + System tests are only configured to run under Python 3.8, 3.9, 3.10 and 3.11. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-eventarc/google/cloud/eventarc/gapic_version.py b/packages/google-cloud-eventarc/google/cloud/eventarc/gapic_version.py index ec42a8e289c4..360a0d13ebdd 100644 --- a/packages/google-cloud-eventarc/google/cloud/eventarc/gapic_version.py +++ b/packages/google-cloud-eventarc/google/cloud/eventarc/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.9.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-eventarc/google/cloud/eventarc_v1/gapic_version.py b/packages/google-cloud-eventarc/google/cloud/eventarc_v1/gapic_version.py index ec42a8e289c4..360a0d13ebdd 100644 --- a/packages/google-cloud-eventarc/google/cloud/eventarc_v1/gapic_version.py +++ b/packages/google-cloud-eventarc/google/cloud/eventarc_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.9.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-eventarc/noxfile.py b/packages/google-cloud-eventarc/noxfile.py index 9a2acd8b6787..be54712bfa8f 100644 --- a/packages/google-cloud-eventarc/noxfile.py +++ b/packages/google-cloud-eventarc/noxfile.py @@ -46,7 +46,7 @@ UNIT_TEST_EXTRAS = [] UNIT_TEST_EXTRAS_BY_PYTHON = {} -SYSTEM_TEST_PYTHON_VERSIONS = [] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11"] SYSTEM_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", @@ -405,24 +405,3 @@ def prerelease_deps(session): session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") - - system_test_path = os.path.join("tests", "system.py") - system_test_folder_path = os.path.join("tests", "system") - - # Only run system tests if found. - if os.path.exists(system_test_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_path, - *session.posargs, - ) - if os.path.exists(system_test_folder_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_folder_path, - *session.posargs, - ) diff --git a/packages/google-cloud-eventarc/samples/generated_samples/snippet_metadata_google.cloud.eventarc.v1.json b/packages/google-cloud-eventarc/samples/generated_samples/snippet_metadata_google.cloud.eventarc.v1.json index 8c1784dea839..596aaecb1b9c 100644 --- a/packages/google-cloud-eventarc/samples/generated_samples/snippet_metadata_google.cloud.eventarc.v1.json +++ b/packages/google-cloud-eventarc/samples/generated_samples/snippet_metadata_google.cloud.eventarc.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-eventarc", - "version": "1.9.3" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-eventarc/tests/unit/gapic/eventarc_v1/test_eventarc.py b/packages/google-cloud-eventarc/tests/unit/gapic/eventarc_v1/test_eventarc.py index a90050b52d99..51f9c434d14d 100644 --- a/packages/google-cloud-eventarc/tests/unit/gapic/eventarc_v1/test_eventarc.py +++ b/packages/google-cloud-eventarc/tests/unit/gapic/eventarc_v1/test_eventarc.py @@ -5901,8 +5901,9 @@ def test_get_trigger_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = trigger.Trigger.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = trigger.Trigger.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5979,8 +5980,9 @@ def test_get_trigger_rest_required_fields(request_type=eventarc.GetTriggerReques response_value = Response() response_value.status_code = 200 - pb_return_value = trigger.Trigger.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = trigger.Trigger.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6099,8 +6101,9 @@ def test_get_trigger_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = trigger.Trigger.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = trigger.Trigger.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6165,8 +6168,9 @@ def test_list_triggers_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = eventarc.ListTriggersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = eventarc.ListTriggersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6249,8 +6253,9 @@ def test_list_triggers_rest_required_fields(request_type=eventarc.ListTriggersRe response_value = Response() response_value.status_code = 200 - pb_return_value = eventarc.ListTriggersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = eventarc.ListTriggersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6381,8 +6386,9 @@ def test_list_triggers_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = eventarc.ListTriggersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = eventarc.ListTriggersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6526,6 +6532,73 @@ def test_create_trigger_rest(request_type): "conditions": {}, "etag": "etag_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = eventarc.CreateTriggerRequest.meta.fields["trigger"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["trigger"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["trigger"][field])): + del request_init["trigger"][field][i][subfield] + else: + del request_init["trigger"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -6742,43 +6815,6 @@ def test_create_trigger_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["trigger"] = { - "name": "name_value", - "uid": "uid_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "event_filters": [ - { - "attribute": "attribute_value", - "value": "value_value", - "operator": "operator_value", - } - ], - "service_account": "service_account_value", - "destination": { - "cloud_run": { - "service": "service_value", - "path": "path_value", - "region": "region_value", - }, - "cloud_function": "cloud_function_value", - "gke": { - "cluster": "cluster_value", - "location": "location_value", - "namespace": "namespace_value", - "service": "service_value", - "path": "path_value", - }, - "workflow": "workflow_value", - }, - "transport": { - "pubsub": {"topic": "topic_value", "subscription": "subscription_value"} - }, - "labels": {}, - "channel": "channel_value", - "conditions": {}, - "etag": "etag_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -6911,6 +6947,73 @@ def test_update_trigger_rest(request_type): "conditions": {}, "etag": "etag_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = eventarc.UpdateTriggerRequest.meta.fields["trigger"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["trigger"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["trigger"][field])): + del request_init["trigger"][field][i][subfield] + else: + del request_init["trigger"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -7109,43 +7212,6 @@ def test_update_trigger_rest_bad_request( request_init = { "trigger": {"name": "projects/sample1/locations/sample2/triggers/sample3"} } - request_init["trigger"] = { - "name": "projects/sample1/locations/sample2/triggers/sample3", - "uid": "uid_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "event_filters": [ - { - "attribute": "attribute_value", - "value": "value_value", - "operator": "operator_value", - } - ], - "service_account": "service_account_value", - "destination": { - "cloud_run": { - "service": "service_value", - "path": "path_value", - "region": "region_value", - }, - "cloud_function": "cloud_function_value", - "gke": { - "cluster": "cluster_value", - "location": "location_value", - "namespace": "namespace_value", - "service": "service_value", - "path": "path_value", - }, - "workflow": "workflow_value", - }, - "transport": { - "pubsub": {"topic": "topic_value", "subscription": "subscription_value"} - }, - "labels": {}, - "channel": "channel_value", - "conditions": {}, - "etag": "etag_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -7555,8 +7621,9 @@ def test_get_channel_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = channel.Channel.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = channel.Channel.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7634,8 +7701,9 @@ def test_get_channel_rest_required_fields(request_type=eventarc.GetChannelReques response_value = Response() response_value.status_code = 200 - pb_return_value = channel.Channel.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = channel.Channel.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7754,8 +7822,9 @@ def test_get_channel_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = channel.Channel.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = channel.Channel.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7820,8 +7889,9 @@ def test_list_channels_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = eventarc.ListChannelsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = eventarc.ListChannelsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7903,8 +7973,9 @@ def test_list_channels_rest_required_fields(request_type=eventarc.ListChannelsRe response_value = Response() response_value.status_code = 200 - pb_return_value = eventarc.ListChannelsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = eventarc.ListChannelsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8034,8 +8105,9 @@ def test_list_channels_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = eventarc.ListChannelsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = eventarc.ListChannelsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8153,6 +8225,73 @@ def test_create_channel_rest(request_type): "activation_token": "activation_token_value", "crypto_key_name": "crypto_key_name_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = eventarc.CreateChannelRequest.meta.fields["channel"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["channel"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["channel"][field])): + del request_init["channel"][field][i][subfield] + else: + del request_init["channel"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -8369,17 +8508,6 @@ def test_create_channel_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["channel"] = { - "name": "name_value", - "uid": "uid_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "provider": "provider_value", - "pubsub_topic": "pubsub_topic_value", - "state": 1, - "activation_token": "activation_token_value", - "crypto_key_name": "crypto_key_name_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -8486,6 +8614,73 @@ def test_update_channel_rest(request_type): "activation_token": "activation_token_value", "crypto_key_name": "crypto_key_name_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = eventarc.UpdateChannelRequest.meta.fields["channel"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["channel"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["channel"][field])): + del request_init["channel"][field][i][subfield] + else: + del request_init["channel"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -8682,17 +8877,6 @@ def test_update_channel_rest_bad_request( request_init = { "channel": {"name": "projects/sample1/locations/sample2/channels/sample3"} } - request_init["channel"] = { - "name": "projects/sample1/locations/sample2/channels/sample3", - "uid": "uid_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "provider": "provider_value", - "pubsub_topic": "pubsub_topic_value", - "state": 1, - "activation_token": "activation_token_value", - "crypto_key_name": "crypto_key_name_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -9081,8 +9265,9 @@ def test_get_provider_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = discovery.Provider.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = discovery.Provider.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9156,8 +9341,9 @@ def test_get_provider_rest_required_fields(request_type=eventarc.GetProviderRequ response_value = Response() response_value.status_code = 200 - pb_return_value = discovery.Provider.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = discovery.Provider.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9278,8 +9464,9 @@ def test_get_provider_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = discovery.Provider.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = discovery.Provider.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9344,8 +9531,9 @@ def test_list_providers_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = eventarc.ListProvidersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = eventarc.ListProvidersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9430,8 +9618,9 @@ def test_list_providers_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = eventarc.ListProvidersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = eventarc.ListProvidersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9562,8 +9751,9 @@ def test_list_providers_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = eventarc.ListProvidersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = eventarc.ListProvidersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9687,8 +9877,9 @@ def test_get_channel_connection_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = channel_connection.ChannelConnection.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = channel_connection.ChannelConnection.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9766,8 +9957,9 @@ def test_get_channel_connection_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = channel_connection.ChannelConnection.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = channel_connection.ChannelConnection.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9894,8 +10086,9 @@ def test_get_channel_connection_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = channel_connection.ChannelConnection.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = channel_connection.ChannelConnection.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9961,8 +10154,9 @@ def test_list_channel_connections_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = eventarc.ListChannelConnectionsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = eventarc.ListChannelConnectionsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10045,8 +10239,9 @@ def test_list_channel_connections_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = eventarc.ListChannelConnectionsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = eventarc.ListChannelConnectionsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10177,8 +10372,9 @@ def test_list_channel_connections_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = eventarc.ListChannelConnectionsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = eventarc.ListChannelConnectionsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10296,6 +10492,75 @@ def test_create_channel_connection_rest(request_type): "update_time": {}, "activation_token": "activation_token_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = eventarc.CreateChannelConnectionRequest.meta.fields[ + "channel_connection" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["channel_connection"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["channel_connection"][field])): + del request_init["channel_connection"][field][i][subfield] + else: + del request_init["channel_connection"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -10495,14 +10760,6 @@ def test_create_channel_connection_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["channel_connection"] = { - "name": "name_value", - "uid": "uid_value", - "channel": "channel_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "activation_token": "activation_token_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -10881,8 +11138,9 @@ def test_get_google_channel_config_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = google_channel_config.GoogleChannelConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = google_channel_config.GoogleChannelConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10958,8 +11216,9 @@ def test_get_google_channel_config_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = google_channel_config.GoogleChannelConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = google_channel_config.GoogleChannelConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -11084,8 +11343,9 @@ def test_get_google_channel_config_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = google_channel_config.GoogleChannelConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = google_channel_config.GoogleChannelConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -11147,6 +11407,77 @@ def test_update_google_channel_config_rest(request_type): "update_time": {"seconds": 751, "nanos": 543}, "crypto_key_name": "crypto_key_name_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = eventarc.UpdateGoogleChannelConfigRequest.meta.fields[ + "google_channel_config" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init[ + "google_channel_config" + ].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["google_channel_config"][field])): + del request_init["google_channel_config"][field][i][subfield] + else: + del request_init["google_channel_config"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -11160,8 +11491,9 @@ def test_update_google_channel_config_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gce_google_channel_config.GoogleChannelConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gce_google_channel_config.GoogleChannelConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -11235,10 +11567,11 @@ def test_update_google_channel_config_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gce_google_channel_config.GoogleChannelConfig.pb( + # Convert return value to protobuf type + return_value = gce_google_channel_config.GoogleChannelConfig.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -11330,11 +11663,6 @@ def test_update_google_channel_config_rest_bad_request( "name": "projects/sample1/locations/sample2/googleChannelConfig" } } - request_init["google_channel_config"] = { - "name": "projects/sample1/locations/sample2/googleChannelConfig", - "update_time": {"seconds": 751, "nanos": 543}, - "crypto_key_name": "crypto_key_name_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -11379,8 +11707,9 @@ def test_update_google_channel_config_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gce_google_channel_config.GoogleChannelConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gce_google_channel_config.GoogleChannelConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-functions/CONTRIBUTING.rst b/packages/google-cloud-functions/CONTRIBUTING.rst index 11cd1600786e..9752b963b28b 100644 --- a/packages/google-cloud-functions/CONTRIBUTING.rst +++ b/packages/google-cloud-functions/CONTRIBUTING.rst @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system- -- -k + $ nox -s system-3.11 -- -k .. note:: - System tests are only configured to run under Python. + System tests are only configured to run under Python 3.8, 3.9, 3.10 and 3.11. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-functions/google/cloud/functions/gapic_version.py b/packages/google-cloud-functions/google/cloud/functions/gapic_version.py index 40e034931fac..360a0d13ebdd 100644 --- a/packages/google-cloud-functions/google/cloud/functions/gapic_version.py +++ b/packages/google-cloud-functions/google/cloud/functions/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.13.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-functions/google/cloud/functions_v1/gapic_version.py b/packages/google-cloud-functions/google/cloud/functions_v1/gapic_version.py index 40e034931fac..360a0d13ebdd 100644 --- a/packages/google-cloud-functions/google/cloud/functions_v1/gapic_version.py +++ b/packages/google-cloud-functions/google/cloud/functions_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.13.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-functions/google/cloud/functions_v2/gapic_version.py b/packages/google-cloud-functions/google/cloud/functions_v2/gapic_version.py index 40e034931fac..360a0d13ebdd 100644 --- a/packages/google-cloud-functions/google/cloud/functions_v2/gapic_version.py +++ b/packages/google-cloud-functions/google/cloud/functions_v2/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.13.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-functions/noxfile.py b/packages/google-cloud-functions/noxfile.py index 9a2acd8b6787..be54712bfa8f 100644 --- a/packages/google-cloud-functions/noxfile.py +++ b/packages/google-cloud-functions/noxfile.py @@ -46,7 +46,7 @@ UNIT_TEST_EXTRAS = [] UNIT_TEST_EXTRAS_BY_PYTHON = {} -SYSTEM_TEST_PYTHON_VERSIONS = [] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11"] SYSTEM_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", @@ -405,24 +405,3 @@ def prerelease_deps(session): session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") - - system_test_path = os.path.join("tests", "system.py") - system_test_folder_path = os.path.join("tests", "system") - - # Only run system tests if found. - if os.path.exists(system_test_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_path, - *session.posargs, - ) - if os.path.exists(system_test_folder_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_folder_path, - *session.posargs, - ) diff --git a/packages/google-cloud-functions/samples/generated_samples/snippet_metadata_google.cloud.functions.v1.json b/packages/google-cloud-functions/samples/generated_samples/snippet_metadata_google.cloud.functions.v1.json index ac8a915819f5..3a16e5fca57c 100644 --- a/packages/google-cloud-functions/samples/generated_samples/snippet_metadata_google.cloud.functions.v1.json +++ b/packages/google-cloud-functions/samples/generated_samples/snippet_metadata_google.cloud.functions.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-functions", - "version": "1.13.3" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-functions/samples/generated_samples/snippet_metadata_google.cloud.functions.v2.json b/packages/google-cloud-functions/samples/generated_samples/snippet_metadata_google.cloud.functions.v2.json index 579077a306bb..0dbb0a2efac1 100644 --- a/packages/google-cloud-functions/samples/generated_samples/snippet_metadata_google.cloud.functions.v2.json +++ b/packages/google-cloud-functions/samples/generated_samples/snippet_metadata_google.cloud.functions.v2.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-functions", - "version": "1.13.3" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-functions/tests/unit/gapic/functions_v1/test_cloud_functions_service.py b/packages/google-cloud-functions/tests/unit/gapic/functions_v1/test_cloud_functions_service.py index 1195d59251e0..f7a9e99adb10 100644 --- a/packages/google-cloud-functions/tests/unit/gapic/functions_v1/test_cloud_functions_service.py +++ b/packages/google-cloud-functions/tests/unit/gapic/functions_v1/test_cloud_functions_service.py @@ -3245,8 +3245,9 @@ def test_list_functions_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = functions.ListFunctionsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.ListFunctionsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3446,8 +3447,9 @@ def test_get_function_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = functions.CloudFunction.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.CloudFunction.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3548,8 +3550,9 @@ def test_get_function_rest_required_fields(request_type=functions.GetFunctionReq response_value = Response() response_value.status_code = 200 - pb_return_value = functions.CloudFunction.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.CloudFunction.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3674,8 +3677,9 @@ def test_get_function_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = functions.CloudFunction.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.CloudFunction.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3781,6 +3785,73 @@ def test_create_function_rest(request_type): "docker_repository": "docker_repository_value", "docker_registry": 1, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = functions.CreateFunctionRequest.meta.fields["function"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["function"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["function"][field])): + del request_init["function"][field][i][subfield] + else: + del request_init["function"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -3963,60 +4034,6 @@ def test_create_function_rest_bad_request( # send a request that will satisfy transcoding request_init = {"location": "projects/sample1/locations/sample2"} - request_init["function"] = { - "name": "name_value", - "description": "description_value", - "source_archive_url": "source_archive_url_value", - "source_repository": {"url": "url_value", "deployed_url": "deployed_url_value"}, - "source_upload_url": "source_upload_url_value", - "https_trigger": {"url": "url_value", "security_level": 1}, - "event_trigger": { - "event_type": "event_type_value", - "resource": "resource_value", - "service": "service_value", - "failure_policy": {"retry": {}}, - }, - "status": 1, - "entry_point": "entry_point_value", - "runtime": "runtime_value", - "timeout": {"seconds": 751, "nanos": 543}, - "available_memory_mb": 1991, - "service_account_email": "service_account_email_value", - "update_time": {"seconds": 751, "nanos": 543}, - "version_id": 1074, - "labels": {}, - "environment_variables": {}, - "build_environment_variables": {}, - "network": "network_value", - "max_instances": 1389, - "min_instances": 1387, - "vpc_connector": "vpc_connector_value", - "vpc_connector_egress_settings": 1, - "ingress_settings": 1, - "kms_key_name": "kms_key_name_value", - "build_worker_pool": "build_worker_pool_value", - "build_id": "build_id_value", - "build_name": "build_name_value", - "secret_environment_variables": [ - { - "key": "key_value", - "project_id": "project_id_value", - "secret": "secret_value", - "version": "version_value", - } - ], - "secret_volumes": [ - { - "mount_path": "mount_path_value", - "project_id": "project_id_value", - "secret": "secret_value", - "versions": [{"version": "version_value", "path": "path_value"}], - } - ], - "source_token": "source_token_value", - "docker_repository": "docker_repository_value", - "docker_registry": 1, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4165,6 +4182,73 @@ def test_update_function_rest(request_type): "docker_repository": "docker_repository_value", "docker_registry": 1, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = functions.UpdateFunctionRequest.meta.fields["function"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["function"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["function"][field])): + del request_init["function"][field][i][subfield] + else: + del request_init["function"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -4338,60 +4422,6 @@ def test_update_function_rest_bad_request( request_init = { "function": {"name": "projects/sample1/locations/sample2/functions/sample3"} } - request_init["function"] = { - "name": "projects/sample1/locations/sample2/functions/sample3", - "description": "description_value", - "source_archive_url": "source_archive_url_value", - "source_repository": {"url": "url_value", "deployed_url": "deployed_url_value"}, - "source_upload_url": "source_upload_url_value", - "https_trigger": {"url": "url_value", "security_level": 1}, - "event_trigger": { - "event_type": "event_type_value", - "resource": "resource_value", - "service": "service_value", - "failure_policy": {"retry": {}}, - }, - "status": 1, - "entry_point": "entry_point_value", - "runtime": "runtime_value", - "timeout": {"seconds": 751, "nanos": 543}, - "available_memory_mb": 1991, - "service_account_email": "service_account_email_value", - "update_time": {"seconds": 751, "nanos": 543}, - "version_id": 1074, - "labels": {}, - "environment_variables": {}, - "build_environment_variables": {}, - "network": "network_value", - "max_instances": 1389, - "min_instances": 1387, - "vpc_connector": "vpc_connector_value", - "vpc_connector_egress_settings": 1, - "ingress_settings": 1, - "kms_key_name": "kms_key_name_value", - "build_worker_pool": "build_worker_pool_value", - "build_id": "build_id_value", - "build_name": "build_name_value", - "secret_environment_variables": [ - { - "key": "key_value", - "project_id": "project_id_value", - "secret": "secret_value", - "version": "version_value", - } - ], - "secret_volumes": [ - { - "mount_path": "mount_path_value", - "project_id": "project_id_value", - "secret": "secret_value", - "versions": [{"version": "version_value", "path": "path_value"}], - } - ], - "source_token": "source_token_value", - "docker_repository": "docker_repository_value", - "docker_registry": 1, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4762,8 +4792,9 @@ def test_call_function_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = functions.CallFunctionResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.CallFunctionResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4843,8 +4874,9 @@ def test_call_function_rest_required_fields(request_type=functions.CallFunctionR response_value = Response() response_value.status_code = 200 - pb_return_value = functions.CallFunctionResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.CallFunctionResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4978,8 +5010,9 @@ def test_call_function_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = functions.CallFunctionResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.CallFunctionResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5045,8 +5078,9 @@ def test_generate_upload_url_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = functions.GenerateUploadUrlResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.GenerateUploadUrlResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5171,8 +5205,9 @@ def test_generate_download_url_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = functions.GenerateDownloadUrlResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.GenerateDownloadUrlResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5298,8 +5333,7 @@ def test_set_iam_policy_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5376,8 +5410,7 @@ def test_set_iam_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5517,8 +5550,7 @@ def test_get_iam_policy_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5596,8 +5628,7 @@ def test_get_iam_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5728,8 +5759,7 @@ def test_test_iam_permissions_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5809,8 +5839,7 @@ def test_test_iam_permissions_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-functions/tests/unit/gapic/functions_v2/test_function_service.py b/packages/google-cloud-functions/tests/unit/gapic/functions_v2/test_function_service.py index b9c18e0ca419..91c72810a6c5 100644 --- a/packages/google-cloud-functions/tests/unit/gapic/functions_v2/test_function_service.py +++ b/packages/google-cloud-functions/tests/unit/gapic/functions_v2/test_function_service.py @@ -2703,8 +2703,9 @@ def test_get_function_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = functions.Function.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.Function.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2782,8 +2783,9 @@ def test_get_function_rest_required_fields(request_type=functions.GetFunctionReq response_value = Response() response_value.status_code = 200 - pb_return_value = functions.Function.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.Function.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2906,8 +2908,9 @@ def test_get_function_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = functions.Function.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.Function.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2972,8 +2975,9 @@ def test_list_functions_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = functions.ListFunctionsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.ListFunctionsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3058,8 +3062,9 @@ def test_list_functions_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = functions.ListFunctionsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.ListFunctionsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3192,8 +3197,9 @@ def test_list_functions_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = functions.ListFunctionsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.ListFunctionsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3392,6 +3398,73 @@ def test_create_function_rest(request_type): "url": "url_value", "kms_key_name": "kms_key_name_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = functions.CreateFunctionRequest.meta.fields["function"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["function"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["function"][field])): + del request_init["function"][field][i][subfield] + else: + del request_init["function"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -3576,98 +3649,6 @@ def test_create_function_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["function"] = { - "name": "name_value", - "description": "description_value", - "build_config": { - "build": "build_value", - "runtime": "runtime_value", - "entry_point": "entry_point_value", - "source": { - "storage_source": { - "bucket": "bucket_value", - "object_": "object__value", - "generation": 1068, - }, - "repo_source": { - "branch_name": "branch_name_value", - "tag_name": "tag_name_value", - "commit_sha": "commit_sha_value", - "project_id": "project_id_value", - "repo_name": "repo_name_value", - "dir_": "dir__value", - "invert_regex": True, - }, - }, - "source_provenance": { - "resolved_storage_source": {}, - "resolved_repo_source": {}, - }, - "worker_pool": "worker_pool_value", - "environment_variables": {}, - "docker_registry": 1, - "docker_repository": "docker_repository_value", - }, - "service_config": { - "service": "service_value", - "timeout_seconds": 1621, - "available_memory": "available_memory_value", - "available_cpu": "available_cpu_value", - "environment_variables": {}, - "max_instance_count": 1922, - "min_instance_count": 1920, - "vpc_connector": "vpc_connector_value", - "vpc_connector_egress_settings": 1, - "ingress_settings": 1, - "uri": "uri_value", - "service_account_email": "service_account_email_value", - "all_traffic_on_latest_revision": True, - "secret_environment_variables": [ - { - "key": "key_value", - "project_id": "project_id_value", - "secret": "secret_value", - "version": "version_value", - } - ], - "secret_volumes": [ - { - "mount_path": "mount_path_value", - "project_id": "project_id_value", - "secret": "secret_value", - "versions": [{"version": "version_value", "path": "path_value"}], - } - ], - "revision": "revision_value", - "max_instance_request_concurrency": 3436, - "security_level": 1, - }, - "event_trigger": { - "trigger": "trigger_value", - "trigger_region": "trigger_region_value", - "event_type": "event_type_value", - "event_filters": [ - { - "attribute": "attribute_value", - "value": "value_value", - "operator": "operator_value", - } - ], - "pubsub_topic": "pubsub_topic_value", - "service_account_email": "service_account_email_value", - "retry_policy": 1, - "channel": "channel_value", - }, - "state": 1, - "update_time": {"seconds": 751, "nanos": 543}, - "labels": {}, - "state_messages": [ - {"severity": 1, "type_": "type__value", "message": "message_value"} - ], - "environment": 1, - "url": "url_value", - "kms_key_name": "kms_key_name_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3855,6 +3836,73 @@ def test_update_function_rest(request_type): "url": "url_value", "kms_key_name": "kms_key_name_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = functions.UpdateFunctionRequest.meta.fields["function"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["function"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["function"][field])): + del request_init["function"][field][i][subfield] + else: + del request_init["function"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -4028,98 +4076,6 @@ def test_update_function_rest_bad_request( request_init = { "function": {"name": "projects/sample1/locations/sample2/functions/sample3"} } - request_init["function"] = { - "name": "projects/sample1/locations/sample2/functions/sample3", - "description": "description_value", - "build_config": { - "build": "build_value", - "runtime": "runtime_value", - "entry_point": "entry_point_value", - "source": { - "storage_source": { - "bucket": "bucket_value", - "object_": "object__value", - "generation": 1068, - }, - "repo_source": { - "branch_name": "branch_name_value", - "tag_name": "tag_name_value", - "commit_sha": "commit_sha_value", - "project_id": "project_id_value", - "repo_name": "repo_name_value", - "dir_": "dir__value", - "invert_regex": True, - }, - }, - "source_provenance": { - "resolved_storage_source": {}, - "resolved_repo_source": {}, - }, - "worker_pool": "worker_pool_value", - "environment_variables": {}, - "docker_registry": 1, - "docker_repository": "docker_repository_value", - }, - "service_config": { - "service": "service_value", - "timeout_seconds": 1621, - "available_memory": "available_memory_value", - "available_cpu": "available_cpu_value", - "environment_variables": {}, - "max_instance_count": 1922, - "min_instance_count": 1920, - "vpc_connector": "vpc_connector_value", - "vpc_connector_egress_settings": 1, - "ingress_settings": 1, - "uri": "uri_value", - "service_account_email": "service_account_email_value", - "all_traffic_on_latest_revision": True, - "secret_environment_variables": [ - { - "key": "key_value", - "project_id": "project_id_value", - "secret": "secret_value", - "version": "version_value", - } - ], - "secret_volumes": [ - { - "mount_path": "mount_path_value", - "project_id": "project_id_value", - "secret": "secret_value", - "versions": [{"version": "version_value", "path": "path_value"}], - } - ], - "revision": "revision_value", - "max_instance_request_concurrency": 3436, - "security_level": 1, - }, - "event_trigger": { - "trigger": "trigger_value", - "trigger_region": "trigger_region_value", - "event_type": "event_type_value", - "event_filters": [ - { - "attribute": "attribute_value", - "value": "value_value", - "operator": "operator_value", - } - ], - "pubsub_topic": "pubsub_topic_value", - "service_account_email": "service_account_email_value", - "retry_policy": 1, - "channel": "channel_value", - }, - "state": 1, - "update_time": {"seconds": 751, "nanos": 543}, - "labels": {}, - "state_messages": [ - {"severity": 1, "type_": "type__value", "message": "message_value"} - ], - "environment": 1, - "url": "url_value", - "kms_key_name": "kms_key_name_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4490,8 +4446,9 @@ def test_generate_upload_url_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = functions.GenerateUploadUrlResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.GenerateUploadUrlResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4567,8 +4524,9 @@ def test_generate_upload_url_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = functions.GenerateUploadUrlResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.GenerateUploadUrlResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4703,8 +4661,9 @@ def test_generate_download_url_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = functions.GenerateDownloadUrlResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.GenerateDownloadUrlResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4780,8 +4739,9 @@ def test_generate_download_url_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = functions.GenerateDownloadUrlResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.GenerateDownloadUrlResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4914,8 +4874,9 @@ def test_list_runtimes_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = functions.ListRuntimesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.ListRuntimesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4989,8 +4950,9 @@ def test_list_runtimes_rest_required_fields(request_type=functions.ListRuntimesR response_value = Response() response_value.status_code = 200 - pb_return_value = functions.ListRuntimesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.ListRuntimesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5113,8 +5075,9 @@ def test_list_runtimes_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = functions.ListRuntimesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = functions.ListRuntimesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-gke-backup/CONTRIBUTING.rst b/packages/google-cloud-gke-backup/CONTRIBUTING.rst index aeb9632d634f..1288fa76afb7 100644 --- a/packages/google-cloud-gke-backup/CONTRIBUTING.rst +++ b/packages/google-cloud-gke-backup/CONTRIBUTING.rst @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system- -- -k + $ nox -s system-3.11 -- -k .. note:: - System tests are only configured to run under Python. + System tests are only configured to run under Python 3.8, 3.9, 3.10 and 3.11. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-gke-backup/google/cloud/gke_backup/gapic_version.py b/packages/google-cloud-gke-backup/google/cloud/gke_backup/gapic_version.py index 5c451c14e9e7..360a0d13ebdd 100644 --- a/packages/google-cloud-gke-backup/google/cloud/gke_backup/gapic_version.py +++ b/packages/google-cloud-gke-backup/google/cloud/gke_backup/gapic_version.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# Copyright 2023 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.5.2" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-gke-backup/google/cloud/gke_backup_v1/gapic_version.py b/packages/google-cloud-gke-backup/google/cloud/gke_backup_v1/gapic_version.py index 5c451c14e9e7..360a0d13ebdd 100644 --- a/packages/google-cloud-gke-backup/google/cloud/gke_backup_v1/gapic_version.py +++ b/packages/google-cloud-gke-backup/google/cloud/gke_backup_v1/gapic_version.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# Copyright 2023 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.5.2" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-gke-backup/noxfile.py b/packages/google-cloud-gke-backup/noxfile.py index 9a2acd8b6787..be54712bfa8f 100644 --- a/packages/google-cloud-gke-backup/noxfile.py +++ b/packages/google-cloud-gke-backup/noxfile.py @@ -46,7 +46,7 @@ UNIT_TEST_EXTRAS = [] UNIT_TEST_EXTRAS_BY_PYTHON = {} -SYSTEM_TEST_PYTHON_VERSIONS = [] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11"] SYSTEM_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", @@ -405,24 +405,3 @@ def prerelease_deps(session): session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") - - system_test_path = os.path.join("tests", "system.py") - system_test_folder_path = os.path.join("tests", "system") - - # Only run system tests if found. - if os.path.exists(system_test_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_path, - *session.posargs, - ) - if os.path.exists(system_test_folder_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_folder_path, - *session.posargs, - ) diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_backup_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_backup_async.py new file mode 100644 index 000000000000..ce2396977dd9 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_backup_async.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 CreateBackup +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_CreateBackup_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 gke_backup_v1 + + +async def sample_create_backup(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + request = gke_backup_v1.CreateBackupRequest( + parent="parent_value", + ) + + # Make the request + operation = client.create_backup(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_CreateBackup_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_backup_plan_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_backup_plan_async.py new file mode 100644 index 000000000000..597f356c9e13 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_backup_plan_async.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 CreateBackupPlan +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_CreateBackupPlan_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 gke_backup_v1 + + +async def sample_create_backup_plan(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + backup_plan = gke_backup_v1.BackupPlan() + backup_plan.cluster = "cluster_value" + + request = gke_backup_v1.CreateBackupPlanRequest( + parent="parent_value", + backup_plan=backup_plan, + backup_plan_id="backup_plan_id_value", + ) + + # Make the request + operation = client.create_backup_plan(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_CreateBackupPlan_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_backup_plan_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_backup_plan_sync.py new file mode 100644 index 000000000000..1bf0a552d39d --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_backup_plan_sync.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 CreateBackupPlan +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_CreateBackupPlan_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 gke_backup_v1 + + +def sample_create_backup_plan(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + backup_plan = gke_backup_v1.BackupPlan() + backup_plan.cluster = "cluster_value" + + request = gke_backup_v1.CreateBackupPlanRequest( + parent="parent_value", + backup_plan=backup_plan, + backup_plan_id="backup_plan_id_value", + ) + + # Make the request + operation = client.create_backup_plan(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_CreateBackupPlan_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_backup_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_backup_sync.py new file mode 100644 index 000000000000..8a6c8dda82e7 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_backup_sync.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 CreateBackup +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_CreateBackup_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 gke_backup_v1 + + +def sample_create_backup(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + request = gke_backup_v1.CreateBackupRequest( + parent="parent_value", + ) + + # Make the request + operation = client.create_backup(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_CreateBackup_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_restore_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_restore_async.py new file mode 100644 index 000000000000..91692416a8c5 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_restore_async.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 CreateRestore +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_CreateRestore_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 gke_backup_v1 + + +async def sample_create_restore(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + restore = gke_backup_v1.Restore() + restore.backup = "backup_value" + + request = gke_backup_v1.CreateRestoreRequest( + parent="parent_value", + restore=restore, + restore_id="restore_id_value", + ) + + # Make the request + operation = client.create_restore(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_CreateRestore_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_restore_plan_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_restore_plan_async.py new file mode 100644 index 000000000000..ff18dddcc289 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_restore_plan_async.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 CreateRestorePlan +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_CreateRestorePlan_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 gke_backup_v1 + + +async def sample_create_restore_plan(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + restore_plan = gke_backup_v1.RestorePlan() + restore_plan.backup_plan = "backup_plan_value" + restore_plan.cluster = "cluster_value" + restore_plan.restore_config.all_namespaces = True + + request = gke_backup_v1.CreateRestorePlanRequest( + parent="parent_value", + restore_plan=restore_plan, + restore_plan_id="restore_plan_id_value", + ) + + # Make the request + operation = client.create_restore_plan(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_CreateRestorePlan_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_restore_plan_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_restore_plan_sync.py new file mode 100644 index 000000000000..1f9b55867b7b --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_restore_plan_sync.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 CreateRestorePlan +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_CreateRestorePlan_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 gke_backup_v1 + + +def sample_create_restore_plan(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + restore_plan = gke_backup_v1.RestorePlan() + restore_plan.backup_plan = "backup_plan_value" + restore_plan.cluster = "cluster_value" + restore_plan.restore_config.all_namespaces = True + + request = gke_backup_v1.CreateRestorePlanRequest( + parent="parent_value", + restore_plan=restore_plan, + restore_plan_id="restore_plan_id_value", + ) + + # Make the request + operation = client.create_restore_plan(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_CreateRestorePlan_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_restore_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_restore_sync.py new file mode 100644 index 000000000000..843b9536cbe4 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_create_restore_sync.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 CreateRestore +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_CreateRestore_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 gke_backup_v1 + + +def sample_create_restore(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + restore = gke_backup_v1.Restore() + restore.backup = "backup_value" + + request = gke_backup_v1.CreateRestoreRequest( + parent="parent_value", + restore=restore, + restore_id="restore_id_value", + ) + + # Make the request + operation = client.create_restore(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_CreateRestore_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_backup_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_backup_async.py new file mode 100644 index 000000000000..d91d7a37e737 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_backup_async.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 DeleteBackup +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_DeleteBackup_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 gke_backup_v1 + + +async def sample_delete_backup(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + request = gke_backup_v1.DeleteBackupRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_backup(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_DeleteBackup_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_backup_plan_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_backup_plan_async.py new file mode 100644 index 000000000000..0c8912a0fc5e --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_backup_plan_async.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 DeleteBackupPlan +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_DeleteBackupPlan_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 gke_backup_v1 + + +async def sample_delete_backup_plan(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + request = gke_backup_v1.DeleteBackupPlanRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_backup_plan(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_DeleteBackupPlan_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_backup_plan_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_backup_plan_sync.py new file mode 100644 index 000000000000..66aa652a5f44 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_backup_plan_sync.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 DeleteBackupPlan +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_DeleteBackupPlan_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 gke_backup_v1 + + +def sample_delete_backup_plan(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + request = gke_backup_v1.DeleteBackupPlanRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_backup_plan(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_DeleteBackupPlan_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_backup_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_backup_sync.py new file mode 100644 index 000000000000..3b7fbdabcc1f --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_backup_sync.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 DeleteBackup +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_DeleteBackup_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 gke_backup_v1 + + +def sample_delete_backup(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + request = gke_backup_v1.DeleteBackupRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_backup(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_DeleteBackup_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_restore_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_restore_async.py new file mode 100644 index 000000000000..76271e0d92ee --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_restore_async.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 DeleteRestore +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_DeleteRestore_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 gke_backup_v1 + + +async def sample_delete_restore(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + request = gke_backup_v1.DeleteRestoreRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_restore(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_DeleteRestore_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_restore_plan_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_restore_plan_async.py new file mode 100644 index 000000000000..2d9fa2e0eb1e --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_restore_plan_async.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 DeleteRestorePlan +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_DeleteRestorePlan_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 gke_backup_v1 + + +async def sample_delete_restore_plan(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + request = gke_backup_v1.DeleteRestorePlanRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_restore_plan(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_DeleteRestorePlan_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_restore_plan_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_restore_plan_sync.py new file mode 100644 index 000000000000..9282d65a6143 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_restore_plan_sync.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 DeleteRestorePlan +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_DeleteRestorePlan_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 gke_backup_v1 + + +def sample_delete_restore_plan(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + request = gke_backup_v1.DeleteRestorePlanRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_restore_plan(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_DeleteRestorePlan_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_restore_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_restore_sync.py new file mode 100644 index 000000000000..d70d33427a50 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_delete_restore_sync.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 DeleteRestore +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_DeleteRestore_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 gke_backup_v1 + + +def sample_delete_restore(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + request = gke_backup_v1.DeleteRestoreRequest( + name="name_value", + ) + + # Make the request + operation = client.delete_restore(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_DeleteRestore_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_backup_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_backup_async.py new file mode 100644 index 000000000000..f2d3f9d9fd44 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_backup_async.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetBackup +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_GetBackup_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 gke_backup_v1 + + +async def sample_get_backup(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + request = gke_backup_v1.GetBackupRequest( + name="name_value", + ) + + # Make the request + response = await client.get_backup(request=request) + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_GetBackup_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_backup_plan_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_backup_plan_async.py new file mode 100644 index 000000000000..c57473271910 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_backup_plan_async.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetBackupPlan +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_GetBackupPlan_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 gke_backup_v1 + + +async def sample_get_backup_plan(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + request = gke_backup_v1.GetBackupPlanRequest( + name="name_value", + ) + + # Make the request + response = await client.get_backup_plan(request=request) + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_GetBackupPlan_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_backup_plan_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_backup_plan_sync.py new file mode 100644 index 000000000000..c99d944a37b9 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_backup_plan_sync.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetBackupPlan +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_GetBackupPlan_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 gke_backup_v1 + + +def sample_get_backup_plan(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + request = gke_backup_v1.GetBackupPlanRequest( + name="name_value", + ) + + # Make the request + response = client.get_backup_plan(request=request) + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_GetBackupPlan_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_backup_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_backup_sync.py new file mode 100644 index 000000000000..31d6b2954993 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_backup_sync.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetBackup +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_GetBackup_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 gke_backup_v1 + + +def sample_get_backup(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + request = gke_backup_v1.GetBackupRequest( + name="name_value", + ) + + # Make the request + response = client.get_backup(request=request) + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_GetBackup_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_restore_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_restore_async.py new file mode 100644 index 000000000000..bed3677e005e --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_restore_async.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetRestore +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_GetRestore_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 gke_backup_v1 + + +async def sample_get_restore(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + request = gke_backup_v1.GetRestoreRequest( + name="name_value", + ) + + # Make the request + response = await client.get_restore(request=request) + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_GetRestore_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_restore_plan_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_restore_plan_async.py new file mode 100644 index 000000000000..d68dca5d5a69 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_restore_plan_async.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetRestorePlan +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_GetRestorePlan_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 gke_backup_v1 + + +async def sample_get_restore_plan(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + request = gke_backup_v1.GetRestorePlanRequest( + name="name_value", + ) + + # Make the request + response = await client.get_restore_plan(request=request) + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_GetRestorePlan_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_restore_plan_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_restore_plan_sync.py new file mode 100644 index 000000000000..4760afe72484 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_restore_plan_sync.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetRestorePlan +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_GetRestorePlan_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 gke_backup_v1 + + +def sample_get_restore_plan(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + request = gke_backup_v1.GetRestorePlanRequest( + name="name_value", + ) + + # Make the request + response = client.get_restore_plan(request=request) + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_GetRestorePlan_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_restore_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_restore_sync.py new file mode 100644 index 000000000000..a3049739ac77 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_restore_sync.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetRestore +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_GetRestore_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 gke_backup_v1 + + +def sample_get_restore(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + request = gke_backup_v1.GetRestoreRequest( + name="name_value", + ) + + # Make the request + response = client.get_restore(request=request) + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_GetRestore_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_volume_backup_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_volume_backup_async.py new file mode 100644 index 000000000000..eaf86fc82127 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_volume_backup_async.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetVolumeBackup +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_GetVolumeBackup_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 gke_backup_v1 + + +async def sample_get_volume_backup(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + request = gke_backup_v1.GetVolumeBackupRequest( + name="name_value", + ) + + # Make the request + response = await client.get_volume_backup(request=request) + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_GetVolumeBackup_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_volume_backup_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_volume_backup_sync.py new file mode 100644 index 000000000000..3e431bb5abaa --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_volume_backup_sync.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetVolumeBackup +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_GetVolumeBackup_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 gke_backup_v1 + + +def sample_get_volume_backup(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + request = gke_backup_v1.GetVolumeBackupRequest( + name="name_value", + ) + + # Make the request + response = client.get_volume_backup(request=request) + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_GetVolumeBackup_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_volume_restore_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_volume_restore_async.py new file mode 100644 index 000000000000..d00ed6cceb06 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_volume_restore_async.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetVolumeRestore +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_GetVolumeRestore_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 gke_backup_v1 + + +async def sample_get_volume_restore(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + request = gke_backup_v1.GetVolumeRestoreRequest( + name="name_value", + ) + + # Make the request + response = await client.get_volume_restore(request=request) + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_GetVolumeRestore_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_volume_restore_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_volume_restore_sync.py new file mode 100644 index 000000000000..d88181791067 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_get_volume_restore_sync.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetVolumeRestore +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_GetVolumeRestore_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 gke_backup_v1 + + +def sample_get_volume_restore(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + request = gke_backup_v1.GetVolumeRestoreRequest( + name="name_value", + ) + + # Make the request + response = client.get_volume_restore(request=request) + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_GetVolumeRestore_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_backup_plans_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_backup_plans_async.py new file mode 100644 index 000000000000..79b3db448a8f --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_backup_plans_async.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 ListBackupPlans +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_ListBackupPlans_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 gke_backup_v1 + + +async def sample_list_backup_plans(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + request = gke_backup_v1.ListBackupPlansRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_backup_plans(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_ListBackupPlans_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_backup_plans_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_backup_plans_sync.py new file mode 100644 index 000000000000..40140a04771c --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_backup_plans_sync.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 ListBackupPlans +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_ListBackupPlans_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 gke_backup_v1 + + +def sample_list_backup_plans(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + request = gke_backup_v1.ListBackupPlansRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_backup_plans(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_ListBackupPlans_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_backups_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_backups_async.py new file mode 100644 index 000000000000..c99442eb4513 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_backups_async.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 ListBackups +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_ListBackups_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 gke_backup_v1 + + +async def sample_list_backups(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + request = gke_backup_v1.ListBackupsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_backups(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_ListBackups_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_backups_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_backups_sync.py new file mode 100644 index 000000000000..f635041e87cb --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_backups_sync.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 ListBackups +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_ListBackups_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 gke_backup_v1 + + +def sample_list_backups(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + request = gke_backup_v1.ListBackupsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_backups(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_ListBackups_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_restore_plans_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_restore_plans_async.py new file mode 100644 index 000000000000..b93795a872dd --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_restore_plans_async.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 ListRestorePlans +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_ListRestorePlans_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 gke_backup_v1 + + +async def sample_list_restore_plans(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + request = gke_backup_v1.ListRestorePlansRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_restore_plans(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_ListRestorePlans_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_restore_plans_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_restore_plans_sync.py new file mode 100644 index 000000000000..10a04b8059ba --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_restore_plans_sync.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 ListRestorePlans +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_ListRestorePlans_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 gke_backup_v1 + + +def sample_list_restore_plans(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + request = gke_backup_v1.ListRestorePlansRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_restore_plans(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_ListRestorePlans_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_restores_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_restores_async.py new file mode 100644 index 000000000000..51b7d3442310 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_restores_async.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 ListRestores +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_ListRestores_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 gke_backup_v1 + + +async def sample_list_restores(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + request = gke_backup_v1.ListRestoresRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_restores(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_ListRestores_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_restores_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_restores_sync.py new file mode 100644 index 000000000000..d99c919725c7 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_restores_sync.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 ListRestores +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_ListRestores_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 gke_backup_v1 + + +def sample_list_restores(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + request = gke_backup_v1.ListRestoresRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_restores(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_ListRestores_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_volume_backups_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_volume_backups_async.py new file mode 100644 index 000000000000..a18285ba443d --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_volume_backups_async.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 ListVolumeBackups +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_ListVolumeBackups_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 gke_backup_v1 + + +async def sample_list_volume_backups(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + request = gke_backup_v1.ListVolumeBackupsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_volume_backups(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_ListVolumeBackups_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_volume_backups_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_volume_backups_sync.py new file mode 100644 index 000000000000..496bcde4ef77 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_volume_backups_sync.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 ListVolumeBackups +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_ListVolumeBackups_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 gke_backup_v1 + + +def sample_list_volume_backups(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + request = gke_backup_v1.ListVolumeBackupsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_volume_backups(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_ListVolumeBackups_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_volume_restores_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_volume_restores_async.py new file mode 100644 index 000000000000..8bc7e1c2a0f1 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_volume_restores_async.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 ListVolumeRestores +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_ListVolumeRestores_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 gke_backup_v1 + + +async def sample_list_volume_restores(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + request = gke_backup_v1.ListVolumeRestoresRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_volume_restores(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_ListVolumeRestores_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_volume_restores_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_volume_restores_sync.py new file mode 100644 index 000000000000..0488df6a3b74 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_list_volume_restores_sync.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 ListVolumeRestores +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_ListVolumeRestores_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 gke_backup_v1 + + +def sample_list_volume_restores(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + request = gke_backup_v1.ListVolumeRestoresRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_volume_restores(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_ListVolumeRestores_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_backup_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_backup_async.py new file mode 100644 index 000000000000..0034dca5efa7 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_backup_async.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 UpdateBackup +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_UpdateBackup_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 gke_backup_v1 + + +async def sample_update_backup(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + backup = gke_backup_v1.Backup() + backup.all_namespaces = True + + request = gke_backup_v1.UpdateBackupRequest( + backup=backup, + ) + + # Make the request + operation = client.update_backup(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_UpdateBackup_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_backup_plan_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_backup_plan_async.py new file mode 100644 index 000000000000..2528be5aaf43 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_backup_plan_async.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 UpdateBackupPlan +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_UpdateBackupPlan_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 gke_backup_v1 + + +async def sample_update_backup_plan(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + backup_plan = gke_backup_v1.BackupPlan() + backup_plan.cluster = "cluster_value" + + request = gke_backup_v1.UpdateBackupPlanRequest( + backup_plan=backup_plan, + ) + + # Make the request + operation = client.update_backup_plan(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_UpdateBackupPlan_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_backup_plan_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_backup_plan_sync.py new file mode 100644 index 000000000000..3d135e2076fa --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_backup_plan_sync.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 UpdateBackupPlan +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_UpdateBackupPlan_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 gke_backup_v1 + + +def sample_update_backup_plan(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + backup_plan = gke_backup_v1.BackupPlan() + backup_plan.cluster = "cluster_value" + + request = gke_backup_v1.UpdateBackupPlanRequest( + backup_plan=backup_plan, + ) + + # Make the request + operation = client.update_backup_plan(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_UpdateBackupPlan_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_backup_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_backup_sync.py new file mode 100644 index 000000000000..0335c9a009a5 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_backup_sync.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 UpdateBackup +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_UpdateBackup_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 gke_backup_v1 + + +def sample_update_backup(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + backup = gke_backup_v1.Backup() + backup.all_namespaces = True + + request = gke_backup_v1.UpdateBackupRequest( + backup=backup, + ) + + # Make the request + operation = client.update_backup(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_UpdateBackup_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_restore_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_restore_async.py new file mode 100644 index 000000000000..165fd5590aab --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_restore_async.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 UpdateRestore +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_UpdateRestore_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 gke_backup_v1 + + +async def sample_update_restore(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + restore = gke_backup_v1.Restore() + restore.backup = "backup_value" + + request = gke_backup_v1.UpdateRestoreRequest( + restore=restore, + ) + + # Make the request + operation = client.update_restore(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_UpdateRestore_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_restore_plan_async.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_restore_plan_async.py new file mode 100644 index 000000000000..b8a00eb3000f --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_restore_plan_async.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 UpdateRestorePlan +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_UpdateRestorePlan_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 gke_backup_v1 + + +async def sample_update_restore_plan(): + # Create a client + client = gke_backup_v1.BackupForGKEAsyncClient() + + # Initialize request argument(s) + restore_plan = gke_backup_v1.RestorePlan() + restore_plan.backup_plan = "backup_plan_value" + restore_plan.cluster = "cluster_value" + restore_plan.restore_config.all_namespaces = True + + request = gke_backup_v1.UpdateRestorePlanRequest( + restore_plan=restore_plan, + ) + + # Make the request + operation = client.update_restore_plan(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_UpdateRestorePlan_async] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_restore_plan_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_restore_plan_sync.py new file mode 100644 index 000000000000..67e1cb540940 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_restore_plan_sync.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 UpdateRestorePlan +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_UpdateRestorePlan_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 gke_backup_v1 + + +def sample_update_restore_plan(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + restore_plan = gke_backup_v1.RestorePlan() + restore_plan.backup_plan = "backup_plan_value" + restore_plan.cluster = "cluster_value" + restore_plan.restore_config.all_namespaces = True + + request = gke_backup_v1.UpdateRestorePlanRequest( + restore_plan=restore_plan, + ) + + # Make the request + operation = client.update_restore_plan(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_UpdateRestorePlan_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_restore_sync.py b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_restore_sync.py new file mode 100644 index 000000000000..8dee25089a56 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/gkebackup_v1_generated_backup_for_gke_update_restore_sync.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 UpdateRestore +# 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-gke-backup + + +# [START gkebackup_v1_generated_BackupForGKE_UpdateRestore_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 gke_backup_v1 + + +def sample_update_restore(): + # Create a client + client = gke_backup_v1.BackupForGKEClient() + + # Initialize request argument(s) + restore = gke_backup_v1.Restore() + restore.backup = "backup_value" + + request = gke_backup_v1.UpdateRestoreRequest( + restore=restore, + ) + + # Make the request + operation = client.update_restore(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END gkebackup_v1_generated_BackupForGKE_UpdateRestore_sync] diff --git a/packages/google-cloud-gke-backup/samples/generated_samples/snippet_metadata_google.cloud.gkebackup.v1.json b/packages/google-cloud-gke-backup/samples/generated_samples/snippet_metadata_google.cloud.gkebackup.v1.json new file mode 100644 index 000000000000..7a6f9c3719c1 --- /dev/null +++ b/packages/google-cloud-gke-backup/samples/generated_samples/snippet_metadata_google.cloud.gkebackup.v1.json @@ -0,0 +1,3975 @@ +{ + "clientLibrary": { + "apis": [ + { + "id": "google.cloud.gkebackup.v1", + "version": "v1" + } + ], + "language": "PYTHON", + "name": "google-cloud-gke-backup", + "version": "0.1.0" + }, + "snippets": [ + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.create_backup_plan", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.CreateBackupPlan", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "CreateBackupPlan" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.CreateBackupPlanRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "backup_plan", + "type": "google.cloud.gke_backup_v1.types.BackupPlan" + }, + { + "name": "backup_plan_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_backup_plan" + }, + "description": "Sample for CreateBackupPlan", + "file": "gkebackup_v1_generated_backup_for_gke_create_backup_plan_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_CreateBackupPlan_async", + "segments": [ + { + "end": 60, + "start": 27, + "type": "FULL" + }, + { + "end": 60, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 50, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 57, + "start": 51, + "type": "REQUEST_EXECUTION" + }, + { + "end": 61, + "start": 58, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gkebackup_v1_generated_backup_for_gke_create_backup_plan_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.create_backup_plan", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.CreateBackupPlan", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "CreateBackupPlan" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.CreateBackupPlanRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "backup_plan", + "type": "google.cloud.gke_backup_v1.types.BackupPlan" + }, + { + "name": "backup_plan_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_backup_plan" + }, + "description": "Sample for CreateBackupPlan", + "file": "gkebackup_v1_generated_backup_for_gke_create_backup_plan_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_CreateBackupPlan_sync", + "segments": [ + { + "end": 60, + "start": 27, + "type": "FULL" + }, + { + "end": 60, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 50, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 57, + "start": 51, + "type": "REQUEST_EXECUTION" + }, + { + "end": 61, + "start": 58, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gkebackup_v1_generated_backup_for_gke_create_backup_plan_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.create_backup", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.CreateBackup", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "CreateBackup" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.CreateBackupRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "backup", + "type": "google.cloud.gke_backup_v1.types.Backup" + }, + { + "name": "backup_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_backup" + }, + "description": "Sample for CreateBackup", + "file": "gkebackup_v1_generated_backup_for_gke_create_backup_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_CreateBackup_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": "gkebackup_v1_generated_backup_for_gke_create_backup_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.create_backup", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.CreateBackup", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "CreateBackup" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.CreateBackupRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "backup", + "type": "google.cloud.gke_backup_v1.types.Backup" + }, + { + "name": "backup_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_backup" + }, + "description": "Sample for CreateBackup", + "file": "gkebackup_v1_generated_backup_for_gke_create_backup_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_CreateBackup_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": "gkebackup_v1_generated_backup_for_gke_create_backup_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.create_restore_plan", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.CreateRestorePlan", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "CreateRestorePlan" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.CreateRestorePlanRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "restore_plan", + "type": "google.cloud.gke_backup_v1.types.RestorePlan" + }, + { + "name": "restore_plan_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_restore_plan" + }, + "description": "Sample for CreateRestorePlan", + "file": "gkebackup_v1_generated_backup_for_gke_create_restore_plan_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_CreateRestorePlan_async", + "segments": [ + { + "end": 62, + "start": 27, + "type": "FULL" + }, + { + "end": 62, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 52, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 59, + "start": 53, + "type": "REQUEST_EXECUTION" + }, + { + "end": 63, + "start": 60, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gkebackup_v1_generated_backup_for_gke_create_restore_plan_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.create_restore_plan", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.CreateRestorePlan", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "CreateRestorePlan" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.CreateRestorePlanRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "restore_plan", + "type": "google.cloud.gke_backup_v1.types.RestorePlan" + }, + { + "name": "restore_plan_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_restore_plan" + }, + "description": "Sample for CreateRestorePlan", + "file": "gkebackup_v1_generated_backup_for_gke_create_restore_plan_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_CreateRestorePlan_sync", + "segments": [ + { + "end": 62, + "start": 27, + "type": "FULL" + }, + { + "end": 62, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 52, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 59, + "start": 53, + "type": "REQUEST_EXECUTION" + }, + { + "end": 63, + "start": 60, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gkebackup_v1_generated_backup_for_gke_create_restore_plan_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.create_restore", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.CreateRestore", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "CreateRestore" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.CreateRestoreRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "restore", + "type": "google.cloud.gke_backup_v1.types.Restore" + }, + { + "name": "restore_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_restore" + }, + "description": "Sample for CreateRestore", + "file": "gkebackup_v1_generated_backup_for_gke_create_restore_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_CreateRestore_async", + "segments": [ + { + "end": 60, + "start": 27, + "type": "FULL" + }, + { + "end": 60, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 50, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 57, + "start": 51, + "type": "REQUEST_EXECUTION" + }, + { + "end": 61, + "start": 58, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gkebackup_v1_generated_backup_for_gke_create_restore_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.create_restore", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.CreateRestore", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "CreateRestore" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.CreateRestoreRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "restore", + "type": "google.cloud.gke_backup_v1.types.Restore" + }, + { + "name": "restore_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_restore" + }, + "description": "Sample for CreateRestore", + "file": "gkebackup_v1_generated_backup_for_gke_create_restore_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_CreateRestore_sync", + "segments": [ + { + "end": 60, + "start": 27, + "type": "FULL" + }, + { + "end": 60, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 50, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 57, + "start": 51, + "type": "REQUEST_EXECUTION" + }, + { + "end": 61, + "start": 58, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gkebackup_v1_generated_backup_for_gke_create_restore_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.delete_backup_plan", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.DeleteBackupPlan", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "DeleteBackupPlan" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.DeleteBackupPlanRequest" + }, + { + "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_backup_plan" + }, + "description": "Sample for DeleteBackupPlan", + "file": "gkebackup_v1_generated_backup_for_gke_delete_backup_plan_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_DeleteBackupPlan_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": "gkebackup_v1_generated_backup_for_gke_delete_backup_plan_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.delete_backup_plan", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.DeleteBackupPlan", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "DeleteBackupPlan" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.DeleteBackupPlanRequest" + }, + { + "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_backup_plan" + }, + "description": "Sample for DeleteBackupPlan", + "file": "gkebackup_v1_generated_backup_for_gke_delete_backup_plan_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_DeleteBackupPlan_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": "gkebackup_v1_generated_backup_for_gke_delete_backup_plan_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.delete_backup", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.DeleteBackup", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "DeleteBackup" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.DeleteBackupRequest" + }, + { + "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_backup" + }, + "description": "Sample for DeleteBackup", + "file": "gkebackup_v1_generated_backup_for_gke_delete_backup_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_DeleteBackup_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": "gkebackup_v1_generated_backup_for_gke_delete_backup_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.delete_backup", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.DeleteBackup", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "DeleteBackup" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.DeleteBackupRequest" + }, + { + "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_backup" + }, + "description": "Sample for DeleteBackup", + "file": "gkebackup_v1_generated_backup_for_gke_delete_backup_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_DeleteBackup_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": "gkebackup_v1_generated_backup_for_gke_delete_backup_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.delete_restore_plan", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.DeleteRestorePlan", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "DeleteRestorePlan" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.DeleteRestorePlanRequest" + }, + { + "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_restore_plan" + }, + "description": "Sample for DeleteRestorePlan", + "file": "gkebackup_v1_generated_backup_for_gke_delete_restore_plan_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_DeleteRestorePlan_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": "gkebackup_v1_generated_backup_for_gke_delete_restore_plan_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.delete_restore_plan", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.DeleteRestorePlan", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "DeleteRestorePlan" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.DeleteRestorePlanRequest" + }, + { + "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_restore_plan" + }, + "description": "Sample for DeleteRestorePlan", + "file": "gkebackup_v1_generated_backup_for_gke_delete_restore_plan_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_DeleteRestorePlan_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": "gkebackup_v1_generated_backup_for_gke_delete_restore_plan_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.delete_restore", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.DeleteRestore", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "DeleteRestore" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.DeleteRestoreRequest" + }, + { + "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_restore" + }, + "description": "Sample for DeleteRestore", + "file": "gkebackup_v1_generated_backup_for_gke_delete_restore_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_DeleteRestore_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": "gkebackup_v1_generated_backup_for_gke_delete_restore_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.delete_restore", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.DeleteRestore", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "DeleteRestore" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.DeleteRestoreRequest" + }, + { + "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_restore" + }, + "description": "Sample for DeleteRestore", + "file": "gkebackup_v1_generated_backup_for_gke_delete_restore_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_DeleteRestore_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": "gkebackup_v1_generated_backup_for_gke_delete_restore_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.get_backup_plan", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.GetBackupPlan", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "GetBackupPlan" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.GetBackupPlanRequest" + }, + { + "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.gke_backup_v1.types.BackupPlan", + "shortName": "get_backup_plan" + }, + "description": "Sample for GetBackupPlan", + "file": "gkebackup_v1_generated_backup_for_gke_get_backup_plan_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_GetBackupPlan_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": "gkebackup_v1_generated_backup_for_gke_get_backup_plan_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.get_backup_plan", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.GetBackupPlan", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "GetBackupPlan" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.GetBackupPlanRequest" + }, + { + "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.gke_backup_v1.types.BackupPlan", + "shortName": "get_backup_plan" + }, + "description": "Sample for GetBackupPlan", + "file": "gkebackup_v1_generated_backup_for_gke_get_backup_plan_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_GetBackupPlan_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": "gkebackup_v1_generated_backup_for_gke_get_backup_plan_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.get_backup", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.GetBackup", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "GetBackup" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.GetBackupRequest" + }, + { + "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.gke_backup_v1.types.Backup", + "shortName": "get_backup" + }, + "description": "Sample for GetBackup", + "file": "gkebackup_v1_generated_backup_for_gke_get_backup_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_GetBackup_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": "gkebackup_v1_generated_backup_for_gke_get_backup_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.get_backup", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.GetBackup", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "GetBackup" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.GetBackupRequest" + }, + { + "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.gke_backup_v1.types.Backup", + "shortName": "get_backup" + }, + "description": "Sample for GetBackup", + "file": "gkebackup_v1_generated_backup_for_gke_get_backup_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_GetBackup_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": "gkebackup_v1_generated_backup_for_gke_get_backup_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.get_restore_plan", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.GetRestorePlan", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "GetRestorePlan" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.GetRestorePlanRequest" + }, + { + "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.gke_backup_v1.types.RestorePlan", + "shortName": "get_restore_plan" + }, + "description": "Sample for GetRestorePlan", + "file": "gkebackup_v1_generated_backup_for_gke_get_restore_plan_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_GetRestorePlan_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": "gkebackup_v1_generated_backup_for_gke_get_restore_plan_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.get_restore_plan", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.GetRestorePlan", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "GetRestorePlan" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.GetRestorePlanRequest" + }, + { + "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.gke_backup_v1.types.RestorePlan", + "shortName": "get_restore_plan" + }, + "description": "Sample for GetRestorePlan", + "file": "gkebackup_v1_generated_backup_for_gke_get_restore_plan_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_GetRestorePlan_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": "gkebackup_v1_generated_backup_for_gke_get_restore_plan_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.get_restore", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.GetRestore", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "GetRestore" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.GetRestoreRequest" + }, + { + "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.gke_backup_v1.types.Restore", + "shortName": "get_restore" + }, + "description": "Sample for GetRestore", + "file": "gkebackup_v1_generated_backup_for_gke_get_restore_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_GetRestore_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": "gkebackup_v1_generated_backup_for_gke_get_restore_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.get_restore", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.GetRestore", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "GetRestore" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.GetRestoreRequest" + }, + { + "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.gke_backup_v1.types.Restore", + "shortName": "get_restore" + }, + "description": "Sample for GetRestore", + "file": "gkebackup_v1_generated_backup_for_gke_get_restore_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_GetRestore_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": "gkebackup_v1_generated_backup_for_gke_get_restore_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.get_volume_backup", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.GetVolumeBackup", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "GetVolumeBackup" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.GetVolumeBackupRequest" + }, + { + "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.gke_backup_v1.types.VolumeBackup", + "shortName": "get_volume_backup" + }, + "description": "Sample for GetVolumeBackup", + "file": "gkebackup_v1_generated_backup_for_gke_get_volume_backup_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_GetVolumeBackup_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": "gkebackup_v1_generated_backup_for_gke_get_volume_backup_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.get_volume_backup", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.GetVolumeBackup", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "GetVolumeBackup" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.GetVolumeBackupRequest" + }, + { + "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.gke_backup_v1.types.VolumeBackup", + "shortName": "get_volume_backup" + }, + "description": "Sample for GetVolumeBackup", + "file": "gkebackup_v1_generated_backup_for_gke_get_volume_backup_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_GetVolumeBackup_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": "gkebackup_v1_generated_backup_for_gke_get_volume_backup_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.get_volume_restore", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.GetVolumeRestore", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "GetVolumeRestore" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.GetVolumeRestoreRequest" + }, + { + "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.gke_backup_v1.types.VolumeRestore", + "shortName": "get_volume_restore" + }, + "description": "Sample for GetVolumeRestore", + "file": "gkebackup_v1_generated_backup_for_gke_get_volume_restore_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_GetVolumeRestore_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": "gkebackup_v1_generated_backup_for_gke_get_volume_restore_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.get_volume_restore", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.GetVolumeRestore", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "GetVolumeRestore" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.GetVolumeRestoreRequest" + }, + { + "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.gke_backup_v1.types.VolumeRestore", + "shortName": "get_volume_restore" + }, + "description": "Sample for GetVolumeRestore", + "file": "gkebackup_v1_generated_backup_for_gke_get_volume_restore_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_GetVolumeRestore_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": "gkebackup_v1_generated_backup_for_gke_get_volume_restore_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.list_backup_plans", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.ListBackupPlans", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "ListBackupPlans" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.ListBackupPlansRequest" + }, + { + "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.gke_backup_v1.services.backup_for_gke.pagers.ListBackupPlansAsyncPager", + "shortName": "list_backup_plans" + }, + "description": "Sample for ListBackupPlans", + "file": "gkebackup_v1_generated_backup_for_gke_list_backup_plans_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_ListBackupPlans_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": "gkebackup_v1_generated_backup_for_gke_list_backup_plans_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.list_backup_plans", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.ListBackupPlans", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "ListBackupPlans" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.ListBackupPlansRequest" + }, + { + "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.gke_backup_v1.services.backup_for_gke.pagers.ListBackupPlansPager", + "shortName": "list_backup_plans" + }, + "description": "Sample for ListBackupPlans", + "file": "gkebackup_v1_generated_backup_for_gke_list_backup_plans_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_ListBackupPlans_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": "gkebackup_v1_generated_backup_for_gke_list_backup_plans_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.list_backups", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.ListBackups", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "ListBackups" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.ListBackupsRequest" + }, + { + "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.gke_backup_v1.services.backup_for_gke.pagers.ListBackupsAsyncPager", + "shortName": "list_backups" + }, + "description": "Sample for ListBackups", + "file": "gkebackup_v1_generated_backup_for_gke_list_backups_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_ListBackups_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": "gkebackup_v1_generated_backup_for_gke_list_backups_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.list_backups", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.ListBackups", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "ListBackups" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.ListBackupsRequest" + }, + { + "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.gke_backup_v1.services.backup_for_gke.pagers.ListBackupsPager", + "shortName": "list_backups" + }, + "description": "Sample for ListBackups", + "file": "gkebackup_v1_generated_backup_for_gke_list_backups_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_ListBackups_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": "gkebackup_v1_generated_backup_for_gke_list_backups_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.list_restore_plans", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.ListRestorePlans", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "ListRestorePlans" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.ListRestorePlansRequest" + }, + { + "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.gke_backup_v1.services.backup_for_gke.pagers.ListRestorePlansAsyncPager", + "shortName": "list_restore_plans" + }, + "description": "Sample for ListRestorePlans", + "file": "gkebackup_v1_generated_backup_for_gke_list_restore_plans_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_ListRestorePlans_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": "gkebackup_v1_generated_backup_for_gke_list_restore_plans_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.list_restore_plans", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.ListRestorePlans", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "ListRestorePlans" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.ListRestorePlansRequest" + }, + { + "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.gke_backup_v1.services.backup_for_gke.pagers.ListRestorePlansPager", + "shortName": "list_restore_plans" + }, + "description": "Sample for ListRestorePlans", + "file": "gkebackup_v1_generated_backup_for_gke_list_restore_plans_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_ListRestorePlans_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": "gkebackup_v1_generated_backup_for_gke_list_restore_plans_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.list_restores", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.ListRestores", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "ListRestores" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.ListRestoresRequest" + }, + { + "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.gke_backup_v1.services.backup_for_gke.pagers.ListRestoresAsyncPager", + "shortName": "list_restores" + }, + "description": "Sample for ListRestores", + "file": "gkebackup_v1_generated_backup_for_gke_list_restores_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_ListRestores_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": "gkebackup_v1_generated_backup_for_gke_list_restores_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.list_restores", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.ListRestores", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "ListRestores" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.ListRestoresRequest" + }, + { + "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.gke_backup_v1.services.backup_for_gke.pagers.ListRestoresPager", + "shortName": "list_restores" + }, + "description": "Sample for ListRestores", + "file": "gkebackup_v1_generated_backup_for_gke_list_restores_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_ListRestores_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": "gkebackup_v1_generated_backup_for_gke_list_restores_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.list_volume_backups", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.ListVolumeBackups", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "ListVolumeBackups" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.ListVolumeBackupsRequest" + }, + { + "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.gke_backup_v1.services.backup_for_gke.pagers.ListVolumeBackupsAsyncPager", + "shortName": "list_volume_backups" + }, + "description": "Sample for ListVolumeBackups", + "file": "gkebackup_v1_generated_backup_for_gke_list_volume_backups_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_ListVolumeBackups_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": "gkebackup_v1_generated_backup_for_gke_list_volume_backups_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.list_volume_backups", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.ListVolumeBackups", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "ListVolumeBackups" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.ListVolumeBackupsRequest" + }, + { + "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.gke_backup_v1.services.backup_for_gke.pagers.ListVolumeBackupsPager", + "shortName": "list_volume_backups" + }, + "description": "Sample for ListVolumeBackups", + "file": "gkebackup_v1_generated_backup_for_gke_list_volume_backups_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_ListVolumeBackups_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": "gkebackup_v1_generated_backup_for_gke_list_volume_backups_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.list_volume_restores", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.ListVolumeRestores", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "ListVolumeRestores" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.ListVolumeRestoresRequest" + }, + { + "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.gke_backup_v1.services.backup_for_gke.pagers.ListVolumeRestoresAsyncPager", + "shortName": "list_volume_restores" + }, + "description": "Sample for ListVolumeRestores", + "file": "gkebackup_v1_generated_backup_for_gke_list_volume_restores_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_ListVolumeRestores_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": "gkebackup_v1_generated_backup_for_gke_list_volume_restores_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.list_volume_restores", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.ListVolumeRestores", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "ListVolumeRestores" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.ListVolumeRestoresRequest" + }, + { + "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.gke_backup_v1.services.backup_for_gke.pagers.ListVolumeRestoresPager", + "shortName": "list_volume_restores" + }, + "description": "Sample for ListVolumeRestores", + "file": "gkebackup_v1_generated_backup_for_gke_list_volume_restores_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_ListVolumeRestores_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": "gkebackup_v1_generated_backup_for_gke_list_volume_restores_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.update_backup_plan", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.UpdateBackupPlan", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "UpdateBackupPlan" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.UpdateBackupPlanRequest" + }, + { + "name": "backup_plan", + "type": "google.cloud.gke_backup_v1.types.BackupPlan" + }, + { + "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_backup_plan" + }, + "description": "Sample for UpdateBackupPlan", + "file": "gkebackup_v1_generated_backup_for_gke_update_backup_plan_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_UpdateBackupPlan_async", + "segments": [ + { + "end": 58, + "start": 27, + "type": "FULL" + }, + { + "end": 58, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 48, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 55, + "start": 49, + "type": "REQUEST_EXECUTION" + }, + { + "end": 59, + "start": 56, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gkebackup_v1_generated_backup_for_gke_update_backup_plan_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.update_backup_plan", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.UpdateBackupPlan", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "UpdateBackupPlan" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.UpdateBackupPlanRequest" + }, + { + "name": "backup_plan", + "type": "google.cloud.gke_backup_v1.types.BackupPlan" + }, + { + "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_backup_plan" + }, + "description": "Sample for UpdateBackupPlan", + "file": "gkebackup_v1_generated_backup_for_gke_update_backup_plan_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_UpdateBackupPlan_sync", + "segments": [ + { + "end": 58, + "start": 27, + "type": "FULL" + }, + { + "end": 58, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 48, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 55, + "start": 49, + "type": "REQUEST_EXECUTION" + }, + { + "end": 59, + "start": 56, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gkebackup_v1_generated_backup_for_gke_update_backup_plan_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.update_backup", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.UpdateBackup", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "UpdateBackup" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.UpdateBackupRequest" + }, + { + "name": "backup", + "type": "google.cloud.gke_backup_v1.types.Backup" + }, + { + "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_backup" + }, + "description": "Sample for UpdateBackup", + "file": "gkebackup_v1_generated_backup_for_gke_update_backup_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_UpdateBackup_async", + "segments": [ + { + "end": 58, + "start": 27, + "type": "FULL" + }, + { + "end": 58, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 48, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 55, + "start": 49, + "type": "REQUEST_EXECUTION" + }, + { + "end": 59, + "start": 56, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gkebackup_v1_generated_backup_for_gke_update_backup_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.update_backup", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.UpdateBackup", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "UpdateBackup" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.UpdateBackupRequest" + }, + { + "name": "backup", + "type": "google.cloud.gke_backup_v1.types.Backup" + }, + { + "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_backup" + }, + "description": "Sample for UpdateBackup", + "file": "gkebackup_v1_generated_backup_for_gke_update_backup_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_UpdateBackup_sync", + "segments": [ + { + "end": 58, + "start": 27, + "type": "FULL" + }, + { + "end": 58, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 48, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 55, + "start": 49, + "type": "REQUEST_EXECUTION" + }, + { + "end": 59, + "start": 56, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gkebackup_v1_generated_backup_for_gke_update_backup_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.update_restore_plan", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.UpdateRestorePlan", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "UpdateRestorePlan" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.UpdateRestorePlanRequest" + }, + { + "name": "restore_plan", + "type": "google.cloud.gke_backup_v1.types.RestorePlan" + }, + { + "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_restore_plan" + }, + "description": "Sample for UpdateRestorePlan", + "file": "gkebackup_v1_generated_backup_for_gke_update_restore_plan_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_UpdateRestorePlan_async", + "segments": [ + { + "end": 60, + "start": 27, + "type": "FULL" + }, + { + "end": 60, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 50, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 57, + "start": 51, + "type": "REQUEST_EXECUTION" + }, + { + "end": 61, + "start": 58, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gkebackup_v1_generated_backup_for_gke_update_restore_plan_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.update_restore_plan", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.UpdateRestorePlan", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "UpdateRestorePlan" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.UpdateRestorePlanRequest" + }, + { + "name": "restore_plan", + "type": "google.cloud.gke_backup_v1.types.RestorePlan" + }, + { + "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_restore_plan" + }, + "description": "Sample for UpdateRestorePlan", + "file": "gkebackup_v1_generated_backup_for_gke_update_restore_plan_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_UpdateRestorePlan_sync", + "segments": [ + { + "end": 60, + "start": 27, + "type": "FULL" + }, + { + "end": 60, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 50, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 57, + "start": 51, + "type": "REQUEST_EXECUTION" + }, + { + "end": 61, + "start": 58, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gkebackup_v1_generated_backup_for_gke_update_restore_plan_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient", + "shortName": "BackupForGKEAsyncClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEAsyncClient.update_restore", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.UpdateRestore", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "UpdateRestore" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.UpdateRestoreRequest" + }, + { + "name": "restore", + "type": "google.cloud.gke_backup_v1.types.Restore" + }, + { + "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_restore" + }, + "description": "Sample for UpdateRestore", + "file": "gkebackup_v1_generated_backup_for_gke_update_restore_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_UpdateRestore_async", + "segments": [ + { + "end": 58, + "start": 27, + "type": "FULL" + }, + { + "end": 58, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 48, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 55, + "start": 49, + "type": "REQUEST_EXECUTION" + }, + { + "end": 59, + "start": 56, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gkebackup_v1_generated_backup_for_gke_update_restore_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient", + "shortName": "BackupForGKEClient" + }, + "fullName": "google.cloud.gke_backup_v1.BackupForGKEClient.update_restore", + "method": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE.UpdateRestore", + "service": { + "fullName": "google.cloud.gkebackup.v1.BackupForGKE", + "shortName": "BackupForGKE" + }, + "shortName": "UpdateRestore" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gke_backup_v1.types.UpdateRestoreRequest" + }, + { + "name": "restore", + "type": "google.cloud.gke_backup_v1.types.Restore" + }, + { + "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_restore" + }, + "description": "Sample for UpdateRestore", + "file": "gkebackup_v1_generated_backup_for_gke_update_restore_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gkebackup_v1_generated_BackupForGKE_UpdateRestore_sync", + "segments": [ + { + "end": 58, + "start": 27, + "type": "FULL" + }, + { + "end": 58, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 48, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 55, + "start": 49, + "type": "REQUEST_EXECUTION" + }, + { + "end": 59, + "start": 56, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gkebackup_v1_generated_backup_for_gke_update_restore_sync.py" + } + ] +} diff --git a/packages/google-cloud-gke-backup/tests/unit/gapic/gke_backup_v1/test_backup_for_gke.py b/packages/google-cloud-gke-backup/tests/unit/gapic/gke_backup_v1/test_backup_for_gke.py index 71e2333d389f..37727ffb811f 100644 --- a/packages/google-cloud-gke-backup/tests/unit/gapic/gke_backup_v1/test_backup_for_gke.py +++ b/packages/google-cloud-gke-backup/tests/unit/gapic/gke_backup_v1/test_backup_for_gke.py @@ -7951,6 +7951,73 @@ def test_create_backup_plan_rest(request_type): "state": 1, "state_reason": "state_reason_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gkebackup.CreateBackupPlanRequest.meta.fields["backup_plan"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["backup_plan"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["backup_plan"][field])): + del request_init["backup_plan"][field][i][subfield] + else: + del request_init["backup_plan"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -8149,42 +8216,6 @@ def test_create_backup_plan_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["backup_plan"] = { - "name": "name_value", - "uid": "uid_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "description": "description_value", - "cluster": "cluster_value", - "retention_policy": { - "backup_delete_lock_days": 2400, - "backup_retain_days": 1896, - "locked": True, - }, - "labels": {}, - "backup_schedule": {"cron_schedule": "cron_schedule_value", "paused": True}, - "etag": "etag_value", - "deactivated": True, - "backup_config": { - "all_namespaces": True, - "selected_namespaces": { - "namespaces": ["namespaces_value1", "namespaces_value2"] - }, - "selected_applications": { - "namespaced_names": [ - {"namespace": "namespace_value", "name": "name_value"} - ] - }, - "include_volume_data": True, - "include_secrets": True, - "encryption_key": { - "gcp_kms_encryption_key": "gcp_kms_encryption_key_value" - }, - }, - "protected_pod_count": 2036, - "state": 1, - "state_reason": "state_reason_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -8292,8 +8323,9 @@ def test_list_backup_plans_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListBackupPlansResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListBackupPlansResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8378,8 +8410,9 @@ def test_list_backup_plans_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListBackupPlansResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListBackupPlansResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8514,8 +8547,9 @@ def test_list_backup_plans_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListBackupPlansResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListBackupPlansResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8643,8 +8677,9 @@ def test_get_backup_plan_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = backup_plan.BackupPlan.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = backup_plan.BackupPlan.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8727,8 +8762,9 @@ def test_get_backup_plan_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = backup_plan.BackupPlan.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = backup_plan.BackupPlan.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8853,8 +8889,9 @@ def test_get_backup_plan_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = backup_plan.BackupPlan.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = backup_plan.BackupPlan.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8947,6 +8984,73 @@ def test_update_backup_plan_rest(request_type): "state": 1, "state_reason": "state_reason_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gkebackup.UpdateBackupPlanRequest.meta.fields["backup_plan"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["backup_plan"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["backup_plan"][field])): + del request_init["backup_plan"][field][i][subfield] + else: + del request_init["backup_plan"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -9122,42 +9226,6 @@ def test_update_backup_plan_rest_bad_request( "name": "projects/sample1/locations/sample2/backupPlans/sample3" } } - request_init["backup_plan"] = { - "name": "projects/sample1/locations/sample2/backupPlans/sample3", - "uid": "uid_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "description": "description_value", - "cluster": "cluster_value", - "retention_policy": { - "backup_delete_lock_days": 2400, - "backup_retain_days": 1896, - "locked": True, - }, - "labels": {}, - "backup_schedule": {"cron_schedule": "cron_schedule_value", "paused": True}, - "etag": "etag_value", - "deactivated": True, - "backup_config": { - "all_namespaces": True, - "selected_namespaces": { - "namespaces": ["namespaces_value1", "namespaces_value2"] - }, - "selected_applications": { - "namespaced_names": [ - {"namespace": "namespace_value", "name": "name_value"} - ] - }, - "include_volume_data": True, - "include_secrets": True, - "encryption_key": { - "gcp_kms_encryption_key": "gcp_kms_encryption_key_value" - }, - }, - "protected_pod_count": 2036, - "state": 1, - "state_reason": "state_reason_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -9560,6 +9628,73 @@ def test_create_backup_rest(request_type): "pod_count": 971, "config_backup_size_bytes": 2539, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gkebackup.CreateBackupRequest.meta.fields["backup"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["backup"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["backup"][field])): + del request_init["backup"][field][i][subfield] + else: + del request_init["backup"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -9732,45 +9867,6 @@ def test_create_backup_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2/backupPlans/sample3"} - request_init["backup"] = { - "name": "name_value", - "uid": "uid_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "manual": True, - "labels": {}, - "delete_lock_days": 1675, - "delete_lock_expire_time": {}, - "retain_days": 1171, - "retain_expire_time": {}, - "encryption_key": {"gcp_kms_encryption_key": "gcp_kms_encryption_key_value"}, - "all_namespaces": True, - "selected_namespaces": { - "namespaces": ["namespaces_value1", "namespaces_value2"] - }, - "selected_applications": { - "namespaced_names": [{"namespace": "namespace_value", "name": "name_value"}] - }, - "contains_volume_data": True, - "contains_secrets": True, - "cluster_metadata": { - "cluster": "cluster_value", - "k8s_version": "k8s_version_value", - "backup_crd_versions": {}, - "gke_version": "gke_version_value", - "anthos_version": "anthos_version_value", - }, - "state": 1, - "state_reason": "state_reason_value", - "complete_time": {}, - "resource_count": 1520, - "volume_count": 1312, - "size_bytes": 1089, - "etag": "etag_value", - "description": "description_value", - "pod_count": 971, - "config_backup_size_bytes": 2539, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -9879,8 +9975,9 @@ def test_list_backups_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListBackupsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListBackupsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9962,8 +10059,9 @@ def test_list_backups_rest_required_fields(request_type=gkebackup.ListBackupsReq response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListBackupsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListBackupsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10098,8 +10196,9 @@ def test_list_backups_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListBackupsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListBackupsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10239,8 +10338,9 @@ def test_get_backup_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = backup.Backup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = backup.Backup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10328,8 +10428,9 @@ def test_get_backup_rest_required_fields(request_type=gkebackup.GetBackupRequest response_value = Response() response_value.status_code = 200 - pb_return_value = backup.Backup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = backup.Backup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10454,8 +10555,9 @@ def test_get_backup_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = backup.Backup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = backup.Backup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10551,6 +10653,73 @@ def test_update_backup_rest(request_type): "pod_count": 971, "config_backup_size_bytes": 2539, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gkebackup.UpdateBackupRequest.meta.fields["backup"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["backup"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["backup"][field])): + del request_init["backup"][field][i][subfield] + else: + del request_init["backup"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -10722,45 +10891,6 @@ def test_update_backup_rest_bad_request( "name": "projects/sample1/locations/sample2/backupPlans/sample3/backups/sample4" } } - request_init["backup"] = { - "name": "projects/sample1/locations/sample2/backupPlans/sample3/backups/sample4", - "uid": "uid_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "manual": True, - "labels": {}, - "delete_lock_days": 1675, - "delete_lock_expire_time": {}, - "retain_days": 1171, - "retain_expire_time": {}, - "encryption_key": {"gcp_kms_encryption_key": "gcp_kms_encryption_key_value"}, - "all_namespaces": True, - "selected_namespaces": { - "namespaces": ["namespaces_value1", "namespaces_value2"] - }, - "selected_applications": { - "namespaced_names": [{"namespace": "namespace_value", "name": "name_value"}] - }, - "contains_volume_data": True, - "contains_secrets": True, - "cluster_metadata": { - "cluster": "cluster_value", - "k8s_version": "k8s_version_value", - "backup_crd_versions": {}, - "gke_version": "gke_version_value", - "anthos_version": "anthos_version_value", - }, - "state": 1, - "state_reason": "state_reason_value", - "complete_time": {}, - "resource_count": 1520, - "volume_count": 1312, - "size_bytes": 1089, - "etag": "etag_value", - "description": "description_value", - "pod_count": 971, - "config_backup_size_bytes": 2539, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -11151,8 +11281,9 @@ def test_list_volume_backups_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListVolumeBackupsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListVolumeBackupsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -11236,8 +11367,9 @@ def test_list_volume_backups_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListVolumeBackupsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListVolumeBackupsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -11376,8 +11508,9 @@ def test_list_volume_backups_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListVolumeBackupsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListVolumeBackupsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -11511,8 +11644,9 @@ def test_get_volume_backup_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = volume.VolumeBackup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = volume.VolumeBackup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -11597,8 +11731,9 @@ def test_get_volume_backup_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = volume.VolumeBackup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = volume.VolumeBackup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -11725,8 +11860,9 @@ def test_get_volume_backup_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = volume.VolumeBackup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = volume.VolumeBackup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -11849,6 +11985,73 @@ def test_create_restore_plan_rest(request_type): "state": 1, "state_reason": "state_reason_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gkebackup.CreateRestorePlanRequest.meta.fields["restore_plan"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["restore_plan"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["restore_plan"][field])): + del request_init["restore_plan"][field][i][subfield] + else: + del request_init["restore_plan"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -12047,76 +12250,6 @@ def test_create_restore_plan_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["restore_plan"] = { - "name": "name_value", - "uid": "uid_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "description": "description_value", - "backup_plan": "backup_plan_value", - "cluster": "cluster_value", - "restore_config": { - "volume_data_restore_policy": 1, - "cluster_resource_conflict_policy": 1, - "namespaced_resource_restore_mode": 1, - "cluster_resource_restore_scope": { - "selected_group_kinds": [ - { - "resource_group": "resource_group_value", - "resource_kind": "resource_kind_value", - } - ], - "excluded_group_kinds": {}, - "all_group_kinds": True, - "no_group_kinds": True, - }, - "all_namespaces": True, - "selected_namespaces": { - "namespaces": ["namespaces_value1", "namespaces_value2"] - }, - "selected_applications": { - "namespaced_names": [ - {"namespace": "namespace_value", "name": "name_value"} - ] - }, - "no_namespaces": True, - "excluded_namespaces": {}, - "substitution_rules": [ - { - "target_namespaces": [ - "target_namespaces_value1", - "target_namespaces_value2", - ], - "target_group_kinds": {}, - "target_json_path": "target_json_path_value", - "original_value_pattern": "original_value_pattern_value", - "new_value": "new_value_value", - } - ], - "transformation_rules": [ - { - "field_actions": [ - { - "op": 1, - "from_path": "from_path_value", - "path": "path_value", - "value": "value_value", - } - ], - "resource_filter": { - "namespaces": ["namespaces_value1", "namespaces_value2"], - "group_kinds": {}, - "json_path": "json_path_value", - }, - "description": "description_value", - } - ], - }, - "labels": {}, - "etag": "etag_value", - "state": 1, - "state_reason": "state_reason_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -12224,8 +12357,9 @@ def test_list_restore_plans_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListRestorePlansResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListRestorePlansResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12310,8 +12444,9 @@ def test_list_restore_plans_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListRestorePlansResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListRestorePlansResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12446,8 +12581,9 @@ def test_list_restore_plans_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListRestorePlansResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListRestorePlansResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12576,8 +12712,9 @@ def test_get_restore_plan_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = restore_plan.RestorePlan.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = restore_plan.RestorePlan.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12659,8 +12796,9 @@ def test_get_restore_plan_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = restore_plan.RestorePlan.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = restore_plan.RestorePlan.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12787,8 +12925,9 @@ def test_get_restore_plan_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = restore_plan.RestorePlan.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = restore_plan.RestorePlan.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12915,6 +13054,73 @@ def test_update_restore_plan_rest(request_type): "state": 1, "state_reason": "state_reason_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gkebackup.UpdateRestorePlanRequest.meta.fields["restore_plan"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["restore_plan"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["restore_plan"][field])): + del request_init["restore_plan"][field][i][subfield] + else: + del request_init["restore_plan"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -13090,76 +13296,6 @@ def test_update_restore_plan_rest_bad_request( "name": "projects/sample1/locations/sample2/restorePlans/sample3" } } - request_init["restore_plan"] = { - "name": "projects/sample1/locations/sample2/restorePlans/sample3", - "uid": "uid_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "description": "description_value", - "backup_plan": "backup_plan_value", - "cluster": "cluster_value", - "restore_config": { - "volume_data_restore_policy": 1, - "cluster_resource_conflict_policy": 1, - "namespaced_resource_restore_mode": 1, - "cluster_resource_restore_scope": { - "selected_group_kinds": [ - { - "resource_group": "resource_group_value", - "resource_kind": "resource_kind_value", - } - ], - "excluded_group_kinds": {}, - "all_group_kinds": True, - "no_group_kinds": True, - }, - "all_namespaces": True, - "selected_namespaces": { - "namespaces": ["namespaces_value1", "namespaces_value2"] - }, - "selected_applications": { - "namespaced_names": [ - {"namespace": "namespace_value", "name": "name_value"} - ] - }, - "no_namespaces": True, - "excluded_namespaces": {}, - "substitution_rules": [ - { - "target_namespaces": [ - "target_namespaces_value1", - "target_namespaces_value2", - ], - "target_group_kinds": {}, - "target_json_path": "target_json_path_value", - "original_value_pattern": "original_value_pattern_value", - "new_value": "new_value_value", - } - ], - "transformation_rules": [ - { - "field_actions": [ - { - "op": 1, - "from_path": "from_path_value", - "path": "path_value", - "value": "value_value", - } - ], - "resource_filter": { - "namespaces": ["namespaces_value1", "namespaces_value2"], - "group_kinds": {}, - "json_path": "json_path_value", - }, - "description": "description_value", - } - ], - }, - "labels": {}, - "etag": "etag_value", - "state": 1, - "state_reason": "state_reason_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -13611,6 +13747,73 @@ def test_create_restore_rest(request_type): "volumes_restored_count": 2394, "etag": "etag_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gkebackup.CreateRestoreRequest.meta.fields["restore"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["restore"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["restore"][field])): + del request_init["restore"][field][i][subfield] + else: + del request_init["restore"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -13807,81 +14010,6 @@ def test_create_restore_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2/restorePlans/sample3"} - request_init["restore"] = { - "name": "name_value", - "uid": "uid_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "description": "description_value", - "backup": "backup_value", - "cluster": "cluster_value", - "restore_config": { - "volume_data_restore_policy": 1, - "cluster_resource_conflict_policy": 1, - "namespaced_resource_restore_mode": 1, - "cluster_resource_restore_scope": { - "selected_group_kinds": [ - { - "resource_group": "resource_group_value", - "resource_kind": "resource_kind_value", - } - ], - "excluded_group_kinds": {}, - "all_group_kinds": True, - "no_group_kinds": True, - }, - "all_namespaces": True, - "selected_namespaces": { - "namespaces": ["namespaces_value1", "namespaces_value2"] - }, - "selected_applications": { - "namespaced_names": [ - {"namespace": "namespace_value", "name": "name_value"} - ] - }, - "no_namespaces": True, - "excluded_namespaces": {}, - "substitution_rules": [ - { - "target_namespaces": [ - "target_namespaces_value1", - "target_namespaces_value2", - ], - "target_group_kinds": {}, - "target_json_path": "target_json_path_value", - "original_value_pattern": "original_value_pattern_value", - "new_value": "new_value_value", - } - ], - "transformation_rules": [ - { - "field_actions": [ - { - "op": 1, - "from_path": "from_path_value", - "path": "path_value", - "value": "value_value", - } - ], - "resource_filter": { - "namespaces": ["namespaces_value1", "namespaces_value2"], - "group_kinds": {}, - "json_path": "json_path_value", - }, - "description": "description_value", - } - ], - }, - "labels": {}, - "state": 1, - "state_reason": "state_reason_value", - "complete_time": {}, - "resources_restored_count": 2602, - "resources_excluded_count": 2576, - "resources_failed_count": 2343, - "volumes_restored_count": 2394, - "etag": "etag_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -13991,8 +14119,9 @@ def test_list_restores_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListRestoresResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListRestoresResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14075,8 +14204,9 @@ def test_list_restores_rest_required_fields(request_type=gkebackup.ListRestoresR response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListRestoresResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListRestoresResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14211,8 +14341,9 @@ def test_list_restores_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListRestoresResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListRestoresResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14347,8 +14478,9 @@ def test_get_restore_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = restore.Restore.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = restore.Restore.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14432,8 +14564,9 @@ def test_get_restore_rest_required_fields(request_type=gkebackup.GetRestoreReque response_value = Response() response_value.status_code = 200 - pb_return_value = restore.Restore.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = restore.Restore.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14558,8 +14691,9 @@ def test_get_restore_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = restore.Restore.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = restore.Restore.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14691,6 +14825,73 @@ def test_update_restore_rest(request_type): "volumes_restored_count": 2394, "etag": "etag_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gkebackup.UpdateRestoreRequest.meta.fields["restore"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["restore"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["restore"][field])): + del request_init["restore"][field][i][subfield] + else: + del request_init["restore"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -14864,81 +15065,6 @@ def test_update_restore_rest_bad_request( "name": "projects/sample1/locations/sample2/restorePlans/sample3/restores/sample4" } } - request_init["restore"] = { - "name": "projects/sample1/locations/sample2/restorePlans/sample3/restores/sample4", - "uid": "uid_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "description": "description_value", - "backup": "backup_value", - "cluster": "cluster_value", - "restore_config": { - "volume_data_restore_policy": 1, - "cluster_resource_conflict_policy": 1, - "namespaced_resource_restore_mode": 1, - "cluster_resource_restore_scope": { - "selected_group_kinds": [ - { - "resource_group": "resource_group_value", - "resource_kind": "resource_kind_value", - } - ], - "excluded_group_kinds": {}, - "all_group_kinds": True, - "no_group_kinds": True, - }, - "all_namespaces": True, - "selected_namespaces": { - "namespaces": ["namespaces_value1", "namespaces_value2"] - }, - "selected_applications": { - "namespaced_names": [ - {"namespace": "namespace_value", "name": "name_value"} - ] - }, - "no_namespaces": True, - "excluded_namespaces": {}, - "substitution_rules": [ - { - "target_namespaces": [ - "target_namespaces_value1", - "target_namespaces_value2", - ], - "target_group_kinds": {}, - "target_json_path": "target_json_path_value", - "original_value_pattern": "original_value_pattern_value", - "new_value": "new_value_value", - } - ], - "transformation_rules": [ - { - "field_actions": [ - { - "op": 1, - "from_path": "from_path_value", - "path": "path_value", - "value": "value_value", - } - ], - "resource_filter": { - "namespaces": ["namespaces_value1", "namespaces_value2"], - "group_kinds": {}, - "json_path": "json_path_value", - }, - "description": "description_value", - } - ], - }, - "labels": {}, - "state": 1, - "state_reason": "state_reason_value", - "complete_time": {}, - "resources_restored_count": 2602, - "resources_excluded_count": 2576, - "resources_failed_count": 2343, - "volumes_restored_count": 2394, - "etag": "etag_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -15331,8 +15457,9 @@ def test_list_volume_restores_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListVolumeRestoresResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListVolumeRestoresResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15416,8 +15543,9 @@ def test_list_volume_restores_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListVolumeRestoresResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListVolumeRestoresResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15556,8 +15684,9 @@ def test_list_volume_restores_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gkebackup.ListVolumeRestoresResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gkebackup.ListVolumeRestoresResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15690,8 +15819,9 @@ def test_get_volume_restore_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = volume.VolumeRestore.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = volume.VolumeRestore.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15773,8 +15903,9 @@ def test_get_volume_restore_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = volume.VolumeRestore.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = volume.VolumeRestore.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15901,8 +16032,9 @@ def test_get_volume_restore_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = volume.VolumeRestore.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = volume.VolumeRestore.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-gke-multicloud/CONTRIBUTING.rst b/packages/google-cloud-gke-multicloud/CONTRIBUTING.rst index f0eeb384a868..f59ca9123c00 100644 --- a/packages/google-cloud-gke-multicloud/CONTRIBUTING.rst +++ b/packages/google-cloud-gke-multicloud/CONTRIBUTING.rst @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system- -- -k + $ nox -s system-3.11 -- -k .. note:: - System tests are only configured to run under Python. + System tests are only configured to run under Python 3.8, 3.9, 3.10 and 3.11. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-gke-multicloud/google/cloud/gke_multicloud/gapic_version.py b/packages/google-cloud-gke-multicloud/google/cloud/gke_multicloud/gapic_version.py index c41f9b841039..360a0d13ebdd 100644 --- a/packages/google-cloud-gke-multicloud/google/cloud/gke_multicloud/gapic_version.py +++ b/packages/google-cloud-gke-multicloud/google/cloud/gke_multicloud/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.6.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-gke-multicloud/google/cloud/gke_multicloud_v1/gapic_version.py b/packages/google-cloud-gke-multicloud/google/cloud/gke_multicloud_v1/gapic_version.py index c41f9b841039..360a0d13ebdd 100644 --- a/packages/google-cloud-gke-multicloud/google/cloud/gke_multicloud_v1/gapic_version.py +++ b/packages/google-cloud-gke-multicloud/google/cloud/gke_multicloud_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.6.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-gke-multicloud/noxfile.py b/packages/google-cloud-gke-multicloud/noxfile.py index 9a2acd8b6787..be54712bfa8f 100644 --- a/packages/google-cloud-gke-multicloud/noxfile.py +++ b/packages/google-cloud-gke-multicloud/noxfile.py @@ -46,7 +46,7 @@ UNIT_TEST_EXTRAS = [] UNIT_TEST_EXTRAS_BY_PYTHON = {} -SYSTEM_TEST_PYTHON_VERSIONS = [] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11"] SYSTEM_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", @@ -405,24 +405,3 @@ def prerelease_deps(session): session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") - - system_test_path = os.path.join("tests", "system.py") - system_test_folder_path = os.path.join("tests", "system") - - # Only run system tests if found. - if os.path.exists(system_test_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_path, - *session.posargs, - ) - if os.path.exists(system_test_folder_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_folder_path, - *session.posargs, - ) diff --git a/packages/google-cloud-gke-multicloud/samples/generated_samples/snippet_metadata_google.cloud.gkemulticloud.v1.json b/packages/google-cloud-gke-multicloud/samples/generated_samples/snippet_metadata_google.cloud.gkemulticloud.v1.json index 4a77c4162f7a..bc4c7fc98fa3 100644 --- a/packages/google-cloud-gke-multicloud/samples/generated_samples/snippet_metadata_google.cloud.gkemulticloud.v1.json +++ b/packages/google-cloud-gke-multicloud/samples/generated_samples/snippet_metadata_google.cloud.gkemulticloud.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-gke-multicloud", - "version": "0.6.3" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-gke-multicloud/tests/unit/gapic/gke_multicloud_v1/test_attached_clusters.py b/packages/google-cloud-gke-multicloud/tests/unit/gapic/gke_multicloud_v1/test_attached_clusters.py index 3f011e5ad143..7214bf8bc836 100644 --- a/packages/google-cloud-gke-multicloud/tests/unit/gapic/gke_multicloud_v1/test_attached_clusters.py +++ b/packages/google-cloud-gke-multicloud/tests/unit/gapic/gke_multicloud_v1/test_attached_clusters.py @@ -3046,6 +3046,75 @@ def test_create_attached_cluster_rest(request_type): "authorization": {"admin_users": [{"username": "username_value"}]}, "monitoring_config": {"managed_prometheus_config": {"enabled": True}}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = attached_service.CreateAttachedClusterRequest.meta.fields[ + "attached_cluster" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["attached_cluster"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["attached_cluster"][field])): + del request_init["attached_cluster"][field][i][subfield] + else: + del request_init["attached_cluster"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -3253,32 +3322,6 @@ def test_create_attached_cluster_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["attached_cluster"] = { - "name": "name_value", - "description": "description_value", - "oidc_config": {"issuer_url": "issuer_url_value", "jwks": b"jwks_blob"}, - "platform_version": "platform_version_value", - "distribution": "distribution_value", - "cluster_region": "cluster_region_value", - "fleet": {"project": "project_value", "membership": "membership_value"}, - "state": 1, - "uid": "uid_value", - "reconciling": True, - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "etag": "etag_value", - "kubernetes_version": "kubernetes_version_value", - "annotations": {}, - "workload_identity_config": { - "issuer_uri": "issuer_uri_value", - "workload_pool": "workload_pool_value", - "identity_provider": "identity_provider_value", - }, - "logging_config": {"component_config": {"enable_components": [1]}}, - "errors": [{"message": "message_value"}], - "authorization": {"admin_users": [{"username": "username_value"}]}, - "monitoring_config": {"managed_prometheus_config": {"enabled": True}}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3403,6 +3446,75 @@ def test_update_attached_cluster_rest(request_type): "authorization": {"admin_users": [{"username": "username_value"}]}, "monitoring_config": {"managed_prometheus_config": {"enabled": True}}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = attached_service.UpdateAttachedClusterRequest.meta.fields[ + "attached_cluster" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["attached_cluster"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["attached_cluster"][field])): + del request_init["attached_cluster"][field][i][subfield] + else: + del request_init["attached_cluster"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -3596,32 +3708,6 @@ def test_update_attached_cluster_rest_bad_request( "name": "projects/sample1/locations/sample2/attachedClusters/sample3" } } - request_init["attached_cluster"] = { - "name": "projects/sample1/locations/sample2/attachedClusters/sample3", - "description": "description_value", - "oidc_config": {"issuer_url": "issuer_url_value", "jwks": b"jwks_blob"}, - "platform_version": "platform_version_value", - "distribution": "distribution_value", - "cluster_region": "cluster_region_value", - "fleet": {"project": "project_value", "membership": "membership_value"}, - "state": 1, - "uid": "uid_value", - "reconciling": True, - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "etag": "etag_value", - "kubernetes_version": "kubernetes_version_value", - "annotations": {}, - "workload_identity_config": { - "issuer_uri": "issuer_uri_value", - "workload_pool": "workload_pool_value", - "identity_provider": "identity_provider_value", - }, - "logging_config": {"component_config": {"enable_components": [1]}}, - "errors": [{"message": "message_value"}], - "authorization": {"admin_users": [{"username": "username_value"}]}, - "monitoring_config": {"managed_prometheus_config": {"enabled": True}}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4029,8 +4115,9 @@ def test_get_attached_cluster_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = attached_resources.AttachedCluster.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = attached_resources.AttachedCluster.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4114,8 +4201,9 @@ def test_get_attached_cluster_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = attached_resources.AttachedCluster.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = attached_resources.AttachedCluster.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4244,8 +4332,9 @@ def test_get_attached_cluster_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = attached_resources.AttachedCluster.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = attached_resources.AttachedCluster.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4310,8 +4399,9 @@ def test_list_attached_clusters_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = attached_service.ListAttachedClustersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = attached_service.ListAttachedClustersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4393,10 +4483,11 @@ def test_list_attached_clusters_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = attached_service.ListAttachedClustersResponse.pb( + # Convert return value to protobuf type + return_value = attached_service.ListAttachedClustersResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4531,8 +4622,9 @@ def test_list_attached_clusters_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = attached_service.ListAttachedClustersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = attached_service.ListAttachedClustersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4942,8 +5034,9 @@ def test_get_attached_server_config_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = attached_resources.AttachedServerConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = attached_resources.AttachedServerConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5018,8 +5111,9 @@ def test_get_attached_server_config_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = attached_resources.AttachedServerConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = attached_resources.AttachedServerConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5147,8 +5241,9 @@ def test_get_attached_server_config_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = attached_resources.AttachedServerConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = attached_resources.AttachedServerConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5213,12 +5308,13 @@ def test_generate_attached_cluster_install_manifest_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = ( + # Convert return value to protobuf type + return_value = ( attached_service.GenerateAttachedClusterInstallManifestResponse.pb( return_value ) ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5320,12 +5416,13 @@ def test_generate_attached_cluster_install_manifest_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = ( + # Convert return value to protobuf type + return_value = ( attached_service.GenerateAttachedClusterInstallManifestResponse.pb( return_value ) ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5485,12 +5582,13 @@ def test_generate_attached_cluster_install_manifest_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = ( + # Convert return value to protobuf type + return_value = ( attached_service.GenerateAttachedClusterInstallManifestResponse.pb( return_value ) ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-gke-multicloud/tests/unit/gapic/gke_multicloud_v1/test_aws_clusters.py b/packages/google-cloud-gke-multicloud/tests/unit/gapic/gke_multicloud_v1/test_aws_clusters.py index c63b2156ebfb..bc6cd1ee5ea9 100644 --- a/packages/google-cloud-gke-multicloud/tests/unit/gapic/gke_multicloud_v1/test_aws_clusters.py +++ b/packages/google-cloud-gke-multicloud/tests/unit/gapic/gke_multicloud_v1/test_aws_clusters.py @@ -4109,6 +4109,73 @@ def test_create_aws_cluster_rest(request_type): "errors": [{"message": "message_value"}], "monitoring_config": {"managed_prometheus_config": {"enabled": True}}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = aws_service.CreateAwsClusterRequest.meta.fields["aws_cluster"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["aws_cluster"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["aws_cluster"][field])): + del request_init["aws_cluster"][field][i][subfield] + else: + del request_init["aws_cluster"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -4316,71 +4383,6 @@ def test_create_aws_cluster_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["aws_cluster"] = { - "name": "name_value", - "description": "description_value", - "networking": { - "vpc_id": "vpc_id_value", - "pod_address_cidr_blocks": [ - "pod_address_cidr_blocks_value1", - "pod_address_cidr_blocks_value2", - ], - "service_address_cidr_blocks": [ - "service_address_cidr_blocks_value1", - "service_address_cidr_blocks_value2", - ], - }, - "aws_region": "aws_region_value", - "control_plane": { - "version": "version_value", - "instance_type": "instance_type_value", - "ssh_config": {"ec2_key_pair": "ec2_key_pair_value"}, - "subnet_ids": ["subnet_ids_value1", "subnet_ids_value2"], - "security_group_ids": [ - "security_group_ids_value1", - "security_group_ids_value2", - ], - "iam_instance_profile": "iam_instance_profile_value", - "root_volume": { - "size_gib": 844, - "volume_type": 1, - "iops": 443, - "kms_key_arn": "kms_key_arn_value", - }, - "main_volume": {}, - "database_encryption": {"kms_key_arn": "kms_key_arn_value"}, - "tags": {}, - "aws_services_authentication": { - "role_arn": "role_arn_value", - "role_session_name": "role_session_name_value", - }, - "proxy_config": { - "secret_arn": "secret_arn_value", - "secret_version": "secret_version_value", - }, - "config_encryption": {"kms_key_arn": "kms_key_arn_value"}, - "instance_placement": {"tenancy": 1}, - }, - "authorization": {"admin_users": [{"username": "username_value"}]}, - "state": 1, - "endpoint": "endpoint_value", - "uid": "uid_value", - "reconciling": True, - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "etag": "etag_value", - "annotations": {}, - "workload_identity_config": { - "issuer_uri": "issuer_uri_value", - "workload_pool": "workload_pool_value", - "identity_provider": "identity_provider_value", - }, - "cluster_ca_certificate": "cluster_ca_certificate_value", - "fleet": {"project": "project_value", "membership": "membership_value"}, - "logging_config": {"component_config": {"enable_components": [1]}}, - "errors": [{"message": "message_value"}], - "monitoring_config": {"managed_prometheus_config": {"enabled": True}}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4544,6 +4546,73 @@ def test_update_aws_cluster_rest(request_type): "errors": [{"message": "message_value"}], "monitoring_config": {"managed_prometheus_config": {"enabled": True}}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = aws_service.UpdateAwsClusterRequest.meta.fields["aws_cluster"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["aws_cluster"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["aws_cluster"][field])): + del request_init["aws_cluster"][field][i][subfield] + else: + del request_init["aws_cluster"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -4737,71 +4806,6 @@ def test_update_aws_cluster_rest_bad_request( "name": "projects/sample1/locations/sample2/awsClusters/sample3" } } - request_init["aws_cluster"] = { - "name": "projects/sample1/locations/sample2/awsClusters/sample3", - "description": "description_value", - "networking": { - "vpc_id": "vpc_id_value", - "pod_address_cidr_blocks": [ - "pod_address_cidr_blocks_value1", - "pod_address_cidr_blocks_value2", - ], - "service_address_cidr_blocks": [ - "service_address_cidr_blocks_value1", - "service_address_cidr_blocks_value2", - ], - }, - "aws_region": "aws_region_value", - "control_plane": { - "version": "version_value", - "instance_type": "instance_type_value", - "ssh_config": {"ec2_key_pair": "ec2_key_pair_value"}, - "subnet_ids": ["subnet_ids_value1", "subnet_ids_value2"], - "security_group_ids": [ - "security_group_ids_value1", - "security_group_ids_value2", - ], - "iam_instance_profile": "iam_instance_profile_value", - "root_volume": { - "size_gib": 844, - "volume_type": 1, - "iops": 443, - "kms_key_arn": "kms_key_arn_value", - }, - "main_volume": {}, - "database_encryption": {"kms_key_arn": "kms_key_arn_value"}, - "tags": {}, - "aws_services_authentication": { - "role_arn": "role_arn_value", - "role_session_name": "role_session_name_value", - }, - "proxy_config": { - "secret_arn": "secret_arn_value", - "secret_version": "secret_version_value", - }, - "config_encryption": {"kms_key_arn": "kms_key_arn_value"}, - "instance_placement": {"tenancy": 1}, - }, - "authorization": {"admin_users": [{"username": "username_value"}]}, - "state": 1, - "endpoint": "endpoint_value", - "uid": "uid_value", - "reconciling": True, - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "etag": "etag_value", - "annotations": {}, - "workload_identity_config": { - "issuer_uri": "issuer_uri_value", - "workload_pool": "workload_pool_value", - "identity_provider": "identity_provider_value", - }, - "cluster_ca_certificate": "cluster_ca_certificate_value", - "fleet": {"project": "project_value", "membership": "membership_value"}, - "logging_config": {"component_config": {"enable_components": [1]}}, - "errors": [{"message": "message_value"}], - "monitoring_config": {"managed_prometheus_config": {"enabled": True}}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4918,8 +4922,9 @@ def test_get_aws_cluster_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = aws_resources.AwsCluster.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = aws_resources.AwsCluster.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5002,8 +5007,9 @@ def test_get_aws_cluster_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = aws_resources.AwsCluster.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = aws_resources.AwsCluster.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5130,8 +5136,9 @@ def test_get_aws_cluster_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = aws_resources.AwsCluster.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = aws_resources.AwsCluster.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5196,8 +5203,9 @@ def test_list_aws_clusters_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = aws_service.ListAwsClustersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = aws_service.ListAwsClustersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5279,8 +5287,9 @@ def test_list_aws_clusters_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = aws_service.ListAwsClustersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = aws_service.ListAwsClustersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5413,8 +5422,9 @@ def test_list_aws_clusters_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = aws_service.ListAwsClustersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = aws_service.ListAwsClustersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5820,8 +5830,9 @@ def test_generate_aws_access_token_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = aws_service.GenerateAwsAccessTokenResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = aws_service.GenerateAwsAccessTokenResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5896,10 +5907,9 @@ def test_generate_aws_access_token_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = aws_service.GenerateAwsAccessTokenResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = aws_service.GenerateAwsAccessTokenResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6068,6 +6078,73 @@ def test_create_aws_node_pool_rest(request_type): "max_pods_constraint": {"max_pods_per_node": 1798}, "errors": [{"message": "message_value"}], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = aws_service.CreateAwsNodePoolRequest.meta.fields["aws_node_pool"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["aws_node_pool"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["aws_node_pool"][field])): + del request_init["aws_node_pool"][field][i][subfield] + else: + del request_init["aws_node_pool"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -6275,50 +6352,6 @@ def test_create_aws_node_pool_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2/awsClusters/sample3"} - request_init["aws_node_pool"] = { - "name": "name_value", - "version": "version_value", - "config": { - "instance_type": "instance_type_value", - "root_volume": { - "size_gib": 844, - "volume_type": 1, - "iops": 443, - "kms_key_arn": "kms_key_arn_value", - }, - "taints": [{"key": "key_value", "value": "value_value", "effect": 1}], - "labels": {}, - "tags": {}, - "iam_instance_profile": "iam_instance_profile_value", - "image_type": "image_type_value", - "ssh_config": {"ec2_key_pair": "ec2_key_pair_value"}, - "security_group_ids": [ - "security_group_ids_value1", - "security_group_ids_value2", - ], - "proxy_config": { - "secret_arn": "secret_arn_value", - "secret_version": "secret_version_value", - }, - "config_encryption": {"kms_key_arn": "kms_key_arn_value"}, - "instance_placement": {"tenancy": 1}, - "autoscaling_metrics_collection": { - "granularity": "granularity_value", - "metrics": ["metrics_value1", "metrics_value2"], - }, - }, - "autoscaling": {"min_node_count": 1489, "max_node_count": 1491}, - "subnet_id": "subnet_id_value", - "state": 1, - "uid": "uid_value", - "reconciling": True, - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "etag": "etag_value", - "annotations": {}, - "max_pods_constraint": {"max_pods_per_node": 1798}, - "errors": [{"message": "message_value"}], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -6463,6 +6496,73 @@ def test_update_aws_node_pool_rest(request_type): "max_pods_constraint": {"max_pods_per_node": 1798}, "errors": [{"message": "message_value"}], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = aws_service.UpdateAwsNodePoolRequest.meta.fields["aws_node_pool"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["aws_node_pool"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["aws_node_pool"][field])): + del request_init["aws_node_pool"][field][i][subfield] + else: + del request_init["aws_node_pool"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -6656,50 +6756,6 @@ def test_update_aws_node_pool_rest_bad_request( "name": "projects/sample1/locations/sample2/awsClusters/sample3/awsNodePools/sample4" } } - request_init["aws_node_pool"] = { - "name": "projects/sample1/locations/sample2/awsClusters/sample3/awsNodePools/sample4", - "version": "version_value", - "config": { - "instance_type": "instance_type_value", - "root_volume": { - "size_gib": 844, - "volume_type": 1, - "iops": 443, - "kms_key_arn": "kms_key_arn_value", - }, - "taints": [{"key": "key_value", "value": "value_value", "effect": 1}], - "labels": {}, - "tags": {}, - "iam_instance_profile": "iam_instance_profile_value", - "image_type": "image_type_value", - "ssh_config": {"ec2_key_pair": "ec2_key_pair_value"}, - "security_group_ids": [ - "security_group_ids_value1", - "security_group_ids_value2", - ], - "proxy_config": { - "secret_arn": "secret_arn_value", - "secret_version": "secret_version_value", - }, - "config_encryption": {"kms_key_arn": "kms_key_arn_value"}, - "instance_placement": {"tenancy": 1}, - "autoscaling_metrics_collection": { - "granularity": "granularity_value", - "metrics": ["metrics_value1", "metrics_value2"], - }, - }, - "autoscaling": {"min_node_count": 1489, "max_node_count": 1491}, - "subnet_id": "subnet_id_value", - "state": 1, - "uid": "uid_value", - "reconciling": True, - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "etag": "etag_value", - "annotations": {}, - "max_pods_constraint": {"max_pods_per_node": 1798}, - "errors": [{"message": "message_value"}], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -6816,8 +6872,9 @@ def test_get_aws_node_pool_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = aws_resources.AwsNodePool.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = aws_resources.AwsNodePool.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6898,8 +6955,9 @@ def test_get_aws_node_pool_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = aws_resources.AwsNodePool.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = aws_resources.AwsNodePool.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7028,8 +7086,9 @@ def test_get_aws_node_pool_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = aws_resources.AwsNodePool.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = aws_resources.AwsNodePool.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7094,8 +7153,9 @@ def test_list_aws_node_pools_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = aws_service.ListAwsNodePoolsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = aws_service.ListAwsNodePoolsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7177,8 +7237,9 @@ def test_list_aws_node_pools_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = aws_service.ListAwsNodePoolsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = aws_service.ListAwsNodePoolsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7313,8 +7374,9 @@ def test_list_aws_node_pools_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = aws_service.ListAwsNodePoolsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = aws_service.ListAwsNodePoolsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7725,8 +7787,9 @@ def test_get_aws_server_config_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = aws_resources.AwsServerConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = aws_resources.AwsServerConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7802,8 +7865,9 @@ def test_get_aws_server_config_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = aws_resources.AwsServerConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = aws_resources.AwsServerConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7928,8 +7992,9 @@ def test_get_aws_server_config_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = aws_resources.AwsServerConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = aws_resources.AwsServerConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-gke-multicloud/tests/unit/gapic/gke_multicloud_v1/test_azure_clusters.py b/packages/google-cloud-gke-multicloud/tests/unit/gapic/gke_multicloud_v1/test_azure_clusters.py index 8ffaf5db1fb4..194cb186b213 100644 --- a/packages/google-cloud-gke-multicloud/tests/unit/gapic/gke_multicloud_v1/test_azure_clusters.py +++ b/packages/google-cloud-gke-multicloud/tests/unit/gapic/gke_multicloud_v1/test_azure_clusters.py @@ -5308,6 +5308,73 @@ def test_create_azure_client_rest(request_type): "create_time": {"seconds": 751, "nanos": 543}, "update_time": {}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = azure_service.CreateAzureClientRequest.meta.fields["azure_client"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["azure_client"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["azure_client"][field])): + del request_init["azure_client"][field][i][subfield] + else: + del request_init["azure_client"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -5515,17 +5582,6 @@ def test_create_azure_client_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["azure_client"] = { - "name": "name_value", - "tenant_id": "tenant_id_value", - "application_id": "application_id_value", - "reconciling": True, - "annotations": {}, - "pem_certificate": "pem_certificate_value", - "uid": "uid_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -5637,8 +5693,9 @@ def test_get_azure_client_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = azure_resources.AzureClient.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_resources.AzureClient.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5718,8 +5775,9 @@ def test_get_azure_client_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = azure_resources.AzureClient.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_resources.AzureClient.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5846,8 +5904,9 @@ def test_get_azure_client_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = azure_resources.AzureClient.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_resources.AzureClient.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5912,8 +5971,9 @@ def test_list_azure_clients_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = azure_service.ListAzureClientsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_service.ListAzureClientsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5995,8 +6055,9 @@ def test_list_azure_clients_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = azure_service.ListAzureClientsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_service.ListAzureClientsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6129,8 +6190,9 @@ def test_list_azure_clients_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = azure_service.ListAzureClientsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_service.ListAzureClientsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6591,6 +6653,73 @@ def test_create_azure_cluster_rest(request_type): "errors": [{"message": "message_value"}], "monitoring_config": {"managed_prometheus_config": {"enabled": True}}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = azure_service.CreateAzureClusterRequest.meta.fields["azure_cluster"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["azure_cluster"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["azure_cluster"][field])): + del request_init["azure_cluster"][field][i][subfield] + else: + del request_init["azure_cluster"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -6798,77 +6927,6 @@ def test_create_azure_cluster_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["azure_cluster"] = { - "name": "name_value", - "description": "description_value", - "azure_region": "azure_region_value", - "resource_group_id": "resource_group_id_value", - "azure_client": "azure_client_value", - "networking": { - "virtual_network_id": "virtual_network_id_value", - "pod_address_cidr_blocks": [ - "pod_address_cidr_blocks_value1", - "pod_address_cidr_blocks_value2", - ], - "service_address_cidr_blocks": [ - "service_address_cidr_blocks_value1", - "service_address_cidr_blocks_value2", - ], - "service_load_balancer_subnet_id": "service_load_balancer_subnet_id_value", - }, - "control_plane": { - "version": "version_value", - "subnet_id": "subnet_id_value", - "vm_size": "vm_size_value", - "ssh_config": {"authorized_key": "authorized_key_value"}, - "root_volume": {"size_gib": 844}, - "main_volume": {}, - "database_encryption": {"key_id": "key_id_value"}, - "proxy_config": { - "resource_group_id": "resource_group_id_value", - "secret_id": "secret_id_value", - }, - "config_encryption": { - "key_id": "key_id_value", - "public_key": "public_key_value", - }, - "tags": {}, - "replica_placements": [ - { - "subnet_id": "subnet_id_value", - "azure_availability_zone": "azure_availability_zone_value", - } - ], - "endpoint_subnet_id": "endpoint_subnet_id_value", - }, - "authorization": {"admin_users": [{"username": "username_value"}]}, - "azure_services_authentication": { - "tenant_id": "tenant_id_value", - "application_id": "application_id_value", - }, - "state": 1, - "endpoint": "endpoint_value", - "uid": "uid_value", - "reconciling": True, - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "etag": "etag_value", - "annotations": {}, - "workload_identity_config": { - "issuer_uri": "issuer_uri_value", - "workload_pool": "workload_pool_value", - "identity_provider": "identity_provider_value", - }, - "cluster_ca_certificate": "cluster_ca_certificate_value", - "fleet": {"project": "project_value", "membership": "membership_value"}, - "managed_resources": { - "network_security_group_id": "network_security_group_id_value", - "control_plane_application_security_group_id": "control_plane_application_security_group_id_value", - }, - "logging_config": {"component_config": {"enable_components": [1]}}, - "errors": [{"message": "message_value"}], - "monitoring_config": {"managed_prometheus_config": {"enabled": True}}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -7038,6 +7096,73 @@ def test_update_azure_cluster_rest(request_type): "errors": [{"message": "message_value"}], "monitoring_config": {"managed_prometheus_config": {"enabled": True}}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = azure_service.UpdateAzureClusterRequest.meta.fields["azure_cluster"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["azure_cluster"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["azure_cluster"][field])): + del request_init["azure_cluster"][field][i][subfield] + else: + del request_init["azure_cluster"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -7231,77 +7356,6 @@ def test_update_azure_cluster_rest_bad_request( "name": "projects/sample1/locations/sample2/azureClusters/sample3" } } - request_init["azure_cluster"] = { - "name": "projects/sample1/locations/sample2/azureClusters/sample3", - "description": "description_value", - "azure_region": "azure_region_value", - "resource_group_id": "resource_group_id_value", - "azure_client": "azure_client_value", - "networking": { - "virtual_network_id": "virtual_network_id_value", - "pod_address_cidr_blocks": [ - "pod_address_cidr_blocks_value1", - "pod_address_cidr_blocks_value2", - ], - "service_address_cidr_blocks": [ - "service_address_cidr_blocks_value1", - "service_address_cidr_blocks_value2", - ], - "service_load_balancer_subnet_id": "service_load_balancer_subnet_id_value", - }, - "control_plane": { - "version": "version_value", - "subnet_id": "subnet_id_value", - "vm_size": "vm_size_value", - "ssh_config": {"authorized_key": "authorized_key_value"}, - "root_volume": {"size_gib": 844}, - "main_volume": {}, - "database_encryption": {"key_id": "key_id_value"}, - "proxy_config": { - "resource_group_id": "resource_group_id_value", - "secret_id": "secret_id_value", - }, - "config_encryption": { - "key_id": "key_id_value", - "public_key": "public_key_value", - }, - "tags": {}, - "replica_placements": [ - { - "subnet_id": "subnet_id_value", - "azure_availability_zone": "azure_availability_zone_value", - } - ], - "endpoint_subnet_id": "endpoint_subnet_id_value", - }, - "authorization": {"admin_users": [{"username": "username_value"}]}, - "azure_services_authentication": { - "tenant_id": "tenant_id_value", - "application_id": "application_id_value", - }, - "state": 1, - "endpoint": "endpoint_value", - "uid": "uid_value", - "reconciling": True, - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "etag": "etag_value", - "annotations": {}, - "workload_identity_config": { - "issuer_uri": "issuer_uri_value", - "workload_pool": "workload_pool_value", - "identity_provider": "identity_provider_value", - }, - "cluster_ca_certificate": "cluster_ca_certificate_value", - "fleet": {"project": "project_value", "membership": "membership_value"}, - "managed_resources": { - "network_security_group_id": "network_security_group_id_value", - "control_plane_application_security_group_id": "control_plane_application_security_group_id_value", - }, - "logging_config": {"component_config": {"enable_components": [1]}}, - "errors": [{"message": "message_value"}], - "monitoring_config": {"managed_prometheus_config": {"enabled": True}}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -7420,8 +7474,9 @@ def test_get_azure_cluster_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = azure_resources.AzureCluster.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_resources.AzureCluster.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7506,8 +7561,9 @@ def test_get_azure_cluster_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = azure_resources.AzureCluster.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_resources.AzureCluster.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7634,8 +7690,9 @@ def test_get_azure_cluster_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = azure_resources.AzureCluster.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_resources.AzureCluster.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7700,8 +7757,9 @@ def test_list_azure_clusters_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = azure_service.ListAzureClustersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_service.ListAzureClustersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7783,8 +7841,9 @@ def test_list_azure_clusters_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = azure_service.ListAzureClustersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_service.ListAzureClustersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7917,8 +7976,9 @@ def test_list_azure_clusters_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = azure_service.ListAzureClustersResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_service.ListAzureClustersResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8324,10 +8384,9 @@ def test_generate_azure_access_token_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = azure_service.GenerateAzureAccessTokenResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_service.GenerateAzureAccessTokenResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8402,10 +8461,11 @@ def test_generate_azure_access_token_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = azure_service.GenerateAzureAccessTokenResponse.pb( + # Convert return value to protobuf type + return_value = azure_service.GenerateAzureAccessTokenResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8567,6 +8627,73 @@ def test_create_azure_node_pool_rest(request_type): "azure_availability_zone": "azure_availability_zone_value", "errors": [{"message": "message_value"}], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = azure_service.CreateAzureNodePoolRequest.meta.fields["azure_node_pool"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["azure_node_pool"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["azure_node_pool"][field])): + del request_init["azure_node_pool"][field][i][subfield] + else: + del request_init["azure_node_pool"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -8776,39 +8903,6 @@ def test_create_azure_node_pool_rest_bad_request( request_init = { "parent": "projects/sample1/locations/sample2/azureClusters/sample3" } - request_init["azure_node_pool"] = { - "name": "name_value", - "version": "version_value", - "config": { - "vm_size": "vm_size_value", - "root_volume": {"size_gib": 844}, - "tags": {}, - "image_type": "image_type_value", - "ssh_config": {"authorized_key": "authorized_key_value"}, - "proxy_config": { - "resource_group_id": "resource_group_id_value", - "secret_id": "secret_id_value", - }, - "config_encryption": { - "key_id": "key_id_value", - "public_key": "public_key_value", - }, - "taints": [{"key": "key_value", "value": "value_value", "effect": 1}], - "labels": {}, - }, - "subnet_id": "subnet_id_value", - "autoscaling": {"min_node_count": 1489, "max_node_count": 1491}, - "state": 1, - "uid": "uid_value", - "reconciling": True, - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "etag": "etag_value", - "annotations": {}, - "max_pods_constraint": {"max_pods_per_node": 1798}, - "azure_availability_zone": "azure_availability_zone_value", - "errors": [{"message": "message_value"}], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -8942,6 +9036,73 @@ def test_update_azure_node_pool_rest(request_type): "azure_availability_zone": "azure_availability_zone_value", "errors": [{"message": "message_value"}], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = azure_service.UpdateAzureNodePoolRequest.meta.fields["azure_node_pool"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["azure_node_pool"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["azure_node_pool"][field])): + del request_init["azure_node_pool"][field][i][subfield] + else: + del request_init["azure_node_pool"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -9135,39 +9296,6 @@ def test_update_azure_node_pool_rest_bad_request( "name": "projects/sample1/locations/sample2/azureClusters/sample3/azureNodePools/sample4" } } - request_init["azure_node_pool"] = { - "name": "projects/sample1/locations/sample2/azureClusters/sample3/azureNodePools/sample4", - "version": "version_value", - "config": { - "vm_size": "vm_size_value", - "root_volume": {"size_gib": 844}, - "tags": {}, - "image_type": "image_type_value", - "ssh_config": {"authorized_key": "authorized_key_value"}, - "proxy_config": { - "resource_group_id": "resource_group_id_value", - "secret_id": "secret_id_value", - }, - "config_encryption": { - "key_id": "key_id_value", - "public_key": "public_key_value", - }, - "taints": [{"key": "key_value", "value": "value_value", "effect": 1}], - "labels": {}, - }, - "subnet_id": "subnet_id_value", - "autoscaling": {"min_node_count": 1489, "max_node_count": 1491}, - "state": 1, - "uid": "uid_value", - "reconciling": True, - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "etag": "etag_value", - "annotations": {}, - "max_pods_constraint": {"max_pods_per_node": 1798}, - "azure_availability_zone": "azure_availability_zone_value", - "errors": [{"message": "message_value"}], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -9285,8 +9413,9 @@ def test_get_azure_node_pool_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = azure_resources.AzureNodePool.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_resources.AzureNodePool.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9368,8 +9497,9 @@ def test_get_azure_node_pool_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = azure_resources.AzureNodePool.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_resources.AzureNodePool.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9498,8 +9628,9 @@ def test_get_azure_node_pool_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = azure_resources.AzureNodePool.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_resources.AzureNodePool.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9566,8 +9697,9 @@ def test_list_azure_node_pools_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = azure_service.ListAzureNodePoolsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_service.ListAzureNodePoolsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9649,8 +9781,9 @@ def test_list_azure_node_pools_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = azure_service.ListAzureNodePoolsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_service.ListAzureNodePoolsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -9787,8 +9920,9 @@ def test_list_azure_node_pools_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = azure_service.ListAzureNodePoolsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_service.ListAzureNodePoolsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10199,8 +10333,9 @@ def test_get_azure_server_config_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = azure_resources.AzureServerConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_resources.AzureServerConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10276,8 +10411,9 @@ def test_get_azure_server_config_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = azure_resources.AzureServerConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_resources.AzureServerConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10404,8 +10540,9 @@ def test_get_azure_server_config_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = azure_resources.AzureServerConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = azure_resources.AzureServerConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-gsuiteaddons/google/cloud/gsuiteaddons/gapic_version.py b/packages/google-cloud-gsuiteaddons/google/cloud/gsuiteaddons/gapic_version.py index b4f0ccd75f45..360a0d13ebdd 100644 --- a/packages/google-cloud-gsuiteaddons/google/cloud/gsuiteaddons/gapic_version.py +++ b/packages/google-cloud-gsuiteaddons/google/cloud/gsuiteaddons/gapic_version.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# Copyright 2023 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.3.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-gsuiteaddons/google/cloud/gsuiteaddons_v1/gapic_version.py b/packages/google-cloud-gsuiteaddons/google/cloud/gsuiteaddons_v1/gapic_version.py index b4f0ccd75f45..360a0d13ebdd 100644 --- a/packages/google-cloud-gsuiteaddons/google/cloud/gsuiteaddons_v1/gapic_version.py +++ b/packages/google-cloud-gsuiteaddons/google/cloud/gsuiteaddons_v1/gapic_version.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright 2022 Google LLC +# Copyright 2023 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.3.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_create_deployment_async.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_create_deployment_async.py new file mode 100644 index 000000000000..7fc25523faa7 --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_create_deployment_async.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 CreateDeployment +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_CreateDeployment_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 gsuiteaddons_v1 + + +async def sample_create_deployment(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsAsyncClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.CreateDeploymentRequest( + parent="parent_value", + deployment_id="deployment_id_value", + ) + + # Make the request + response = await client.create_deployment(request=request) + + # Handle the response + print(response) + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_CreateDeployment_async] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_create_deployment_sync.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_create_deployment_sync.py new file mode 100644 index 000000000000..2e8c2a31961c --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_create_deployment_sync.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 CreateDeployment +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_CreateDeployment_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 gsuiteaddons_v1 + + +def sample_create_deployment(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.CreateDeploymentRequest( + parent="parent_value", + deployment_id="deployment_id_value", + ) + + # Make the request + response = client.create_deployment(request=request) + + # Handle the response + print(response) + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_CreateDeployment_sync] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_delete_deployment_async.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_delete_deployment_async.py new file mode 100644 index 000000000000..b57339d3e26d --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_delete_deployment_async.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 DeleteDeployment +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_DeleteDeployment_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 gsuiteaddons_v1 + + +async def sample_delete_deployment(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsAsyncClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.DeleteDeploymentRequest( + name="name_value", + ) + + # Make the request + await client.delete_deployment(request=request) + + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_DeleteDeployment_async] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_delete_deployment_sync.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_delete_deployment_sync.py new file mode 100644 index 000000000000..5354f41182a2 --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_delete_deployment_sync.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 DeleteDeployment +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_DeleteDeployment_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 gsuiteaddons_v1 + + +def sample_delete_deployment(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.DeleteDeploymentRequest( + name="name_value", + ) + + # Make the request + client.delete_deployment(request=request) + + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_DeleteDeployment_sync] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_authorization_async.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_authorization_async.py new file mode 100644 index 000000000000..6de6c84d5ecf --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_authorization_async.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetAuthorization +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_GetAuthorization_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 gsuiteaddons_v1 + + +async def sample_get_authorization(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsAsyncClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.GetAuthorizationRequest( + name="name_value", + ) + + # Make the request + response = await client.get_authorization(request=request) + + # Handle the response + print(response) + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_GetAuthorization_async] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_authorization_sync.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_authorization_sync.py new file mode 100644 index 000000000000..90a789e4a1bd --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_authorization_sync.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetAuthorization +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_GetAuthorization_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 gsuiteaddons_v1 + + +def sample_get_authorization(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.GetAuthorizationRequest( + name="name_value", + ) + + # Make the request + response = client.get_authorization(request=request) + + # Handle the response + print(response) + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_GetAuthorization_sync] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_deployment_async.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_deployment_async.py new file mode 100644 index 000000000000..df81e6b59248 --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_deployment_async.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetDeployment +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_GetDeployment_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 gsuiteaddons_v1 + + +async def sample_get_deployment(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsAsyncClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.GetDeploymentRequest( + name="name_value", + ) + + # Make the request + response = await client.get_deployment(request=request) + + # Handle the response + print(response) + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_GetDeployment_async] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_deployment_sync.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_deployment_sync.py new file mode 100644 index 000000000000..4176e7739221 --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_deployment_sync.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetDeployment +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_GetDeployment_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 gsuiteaddons_v1 + + +def sample_get_deployment(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.GetDeploymentRequest( + name="name_value", + ) + + # Make the request + response = client.get_deployment(request=request) + + # Handle the response + print(response) + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_GetDeployment_sync] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_install_status_async.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_install_status_async.py new file mode 100644 index 000000000000..2817ed3c6f8a --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_install_status_async.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetInstallStatus +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_GetInstallStatus_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 gsuiteaddons_v1 + + +async def sample_get_install_status(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsAsyncClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.GetInstallStatusRequest( + name="name_value", + ) + + # Make the request + response = await client.get_install_status(request=request) + + # Handle the response + print(response) + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_GetInstallStatus_async] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_install_status_sync.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_install_status_sync.py new file mode 100644 index 000000000000..104f372df23f --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_get_install_status_sync.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 GetInstallStatus +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_GetInstallStatus_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 gsuiteaddons_v1 + + +def sample_get_install_status(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.GetInstallStatusRequest( + name="name_value", + ) + + # Make the request + response = client.get_install_status(request=request) + + # Handle the response + print(response) + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_GetInstallStatus_sync] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_install_deployment_async.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_install_deployment_async.py new file mode 100644 index 000000000000..2fc16a44fa00 --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_install_deployment_async.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 InstallDeployment +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_InstallDeployment_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 gsuiteaddons_v1 + + +async def sample_install_deployment(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsAsyncClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.InstallDeploymentRequest( + name="name_value", + ) + + # Make the request + await client.install_deployment(request=request) + + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_InstallDeployment_async] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_install_deployment_sync.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_install_deployment_sync.py new file mode 100644 index 000000000000..e7f72d885323 --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_install_deployment_sync.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 InstallDeployment +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_InstallDeployment_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 gsuiteaddons_v1 + + +def sample_install_deployment(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.InstallDeploymentRequest( + name="name_value", + ) + + # Make the request + client.install_deployment(request=request) + + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_InstallDeployment_sync] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_list_deployments_async.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_list_deployments_async.py new file mode 100644 index 000000000000..3d4aec183800 --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_list_deployments_async.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 ListDeployments +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_ListDeployments_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 gsuiteaddons_v1 + + +async def sample_list_deployments(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsAsyncClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.ListDeploymentsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_deployments(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_ListDeployments_async] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_list_deployments_sync.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_list_deployments_sync.py new file mode 100644 index 000000000000..81f911762c9d --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_list_deployments_sync.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 ListDeployments +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_ListDeployments_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 gsuiteaddons_v1 + + +def sample_list_deployments(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.ListDeploymentsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_deployments(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_ListDeployments_sync] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_replace_deployment_async.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_replace_deployment_async.py new file mode 100644 index 000000000000..50bf1e45c5e3 --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_replace_deployment_async.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 ReplaceDeployment +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_ReplaceDeployment_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 gsuiteaddons_v1 + + +async def sample_replace_deployment(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsAsyncClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.ReplaceDeploymentRequest( + ) + + # Make the request + response = await client.replace_deployment(request=request) + + # Handle the response + print(response) + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_ReplaceDeployment_async] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_replace_deployment_sync.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_replace_deployment_sync.py new file mode 100644 index 000000000000..61e154d4f3da --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_replace_deployment_sync.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 ReplaceDeployment +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_ReplaceDeployment_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 gsuiteaddons_v1 + + +def sample_replace_deployment(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.ReplaceDeploymentRequest( + ) + + # Make the request + response = client.replace_deployment(request=request) + + # Handle the response + print(response) + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_ReplaceDeployment_sync] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_uninstall_deployment_async.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_uninstall_deployment_async.py new file mode 100644 index 000000000000..2a643c2e8dba --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_uninstall_deployment_async.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 UninstallDeployment +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_UninstallDeployment_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 gsuiteaddons_v1 + + +async def sample_uninstall_deployment(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsAsyncClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.UninstallDeploymentRequest( + name="name_value", + ) + + # Make the request + await client.uninstall_deployment(request=request) + + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_UninstallDeployment_async] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_uninstall_deployment_sync.py b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_uninstall_deployment_sync.py new file mode 100644 index 000000000000..fc532e6a0b2d --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/gsuiteaddons_v1_generated_g_suite_add_ons_uninstall_deployment_sync.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Copyright 2023 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 UninstallDeployment +# 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-gsuiteaddons + + +# [START gsuiteaddons_v1_generated_GSuiteAddOns_UninstallDeployment_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 gsuiteaddons_v1 + + +def sample_uninstall_deployment(): + # Create a client + client = gsuiteaddons_v1.GSuiteAddOnsClient() + + # Initialize request argument(s) + request = gsuiteaddons_v1.UninstallDeploymentRequest( + name="name_value", + ) + + # Make the request + client.uninstall_deployment(request=request) + + +# [END gsuiteaddons_v1_generated_GSuiteAddOns_UninstallDeployment_sync] diff --git a/packages/google-cloud-gsuiteaddons/samples/generated_samples/snippet_metadata_google.cloud.gsuiteaddons.v1.json b/packages/google-cloud-gsuiteaddons/samples/generated_samples/snippet_metadata_google.cloud.gsuiteaddons.v1.json new file mode 100644 index 000000000000..1a4e67e71b2d --- /dev/null +++ b/packages/google-cloud-gsuiteaddons/samples/generated_samples/snippet_metadata_google.cloud.gsuiteaddons.v1.json @@ -0,0 +1,1462 @@ +{ + "clientLibrary": { + "apis": [ + { + "id": "google.cloud.gsuiteaddons.v1", + "version": "v1" + } + ], + "language": "PYTHON", + "name": "google-cloud-gsuiteaddons", + "version": "0.1.0" + }, + "snippets": [ + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient", + "shortName": "GSuiteAddOnsAsyncClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient.create_deployment", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.CreateDeployment", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "CreateDeployment" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.CreateDeploymentRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "deployment", + "type": "google.cloud.gsuiteaddons_v1.types.Deployment" + }, + { + "name": "deployment_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.gsuiteaddons_v1.types.Deployment", + "shortName": "create_deployment" + }, + "description": "Sample for CreateDeployment", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_create_deployment_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_CreateDeployment_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gsuiteaddons_v1_generated_g_suite_add_ons_create_deployment_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient", + "shortName": "GSuiteAddOnsClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient.create_deployment", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.CreateDeployment", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "CreateDeployment" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.CreateDeploymentRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "deployment", + "type": "google.cloud.gsuiteaddons_v1.types.Deployment" + }, + { + "name": "deployment_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.gsuiteaddons_v1.types.Deployment", + "shortName": "create_deployment" + }, + "description": "Sample for CreateDeployment", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_create_deployment_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_CreateDeployment_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gsuiteaddons_v1_generated_g_suite_add_ons_create_deployment_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient", + "shortName": "GSuiteAddOnsAsyncClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient.delete_deployment", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.DeleteDeployment", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "DeleteDeployment" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.DeleteDeploymentRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "delete_deployment" + }, + "description": "Sample for DeleteDeployment", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_delete_deployment_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_DeleteDeployment_async", + "segments": [ + { + "end": 49, + "start": 27, + "type": "FULL" + }, + { + "end": 49, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gsuiteaddons_v1_generated_g_suite_add_ons_delete_deployment_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient", + "shortName": "GSuiteAddOnsClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient.delete_deployment", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.DeleteDeployment", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "DeleteDeployment" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.DeleteDeploymentRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "delete_deployment" + }, + "description": "Sample for DeleteDeployment", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_delete_deployment_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_DeleteDeployment_sync", + "segments": [ + { + "end": 49, + "start": 27, + "type": "FULL" + }, + { + "end": 49, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gsuiteaddons_v1_generated_g_suite_add_ons_delete_deployment_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient", + "shortName": "GSuiteAddOnsAsyncClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient.get_authorization", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.GetAuthorization", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "GetAuthorization" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.GetAuthorizationRequest" + }, + { + "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.gsuiteaddons_v1.types.Authorization", + "shortName": "get_authorization" + }, + "description": "Sample for GetAuthorization", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_get_authorization_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_GetAuthorization_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": "gsuiteaddons_v1_generated_g_suite_add_ons_get_authorization_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient", + "shortName": "GSuiteAddOnsClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient.get_authorization", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.GetAuthorization", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "GetAuthorization" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.GetAuthorizationRequest" + }, + { + "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.gsuiteaddons_v1.types.Authorization", + "shortName": "get_authorization" + }, + "description": "Sample for GetAuthorization", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_get_authorization_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_GetAuthorization_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": "gsuiteaddons_v1_generated_g_suite_add_ons_get_authorization_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient", + "shortName": "GSuiteAddOnsAsyncClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient.get_deployment", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.GetDeployment", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "GetDeployment" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.GetDeploymentRequest" + }, + { + "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.gsuiteaddons_v1.types.Deployment", + "shortName": "get_deployment" + }, + "description": "Sample for GetDeployment", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_get_deployment_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_GetDeployment_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": "gsuiteaddons_v1_generated_g_suite_add_ons_get_deployment_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient", + "shortName": "GSuiteAddOnsClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient.get_deployment", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.GetDeployment", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "GetDeployment" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.GetDeploymentRequest" + }, + { + "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.gsuiteaddons_v1.types.Deployment", + "shortName": "get_deployment" + }, + "description": "Sample for GetDeployment", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_get_deployment_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_GetDeployment_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": "gsuiteaddons_v1_generated_g_suite_add_ons_get_deployment_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient", + "shortName": "GSuiteAddOnsAsyncClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient.get_install_status", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.GetInstallStatus", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "GetInstallStatus" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.GetInstallStatusRequest" + }, + { + "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.gsuiteaddons_v1.types.InstallStatus", + "shortName": "get_install_status" + }, + "description": "Sample for GetInstallStatus", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_get_install_status_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_GetInstallStatus_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": "gsuiteaddons_v1_generated_g_suite_add_ons_get_install_status_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient", + "shortName": "GSuiteAddOnsClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient.get_install_status", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.GetInstallStatus", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "GetInstallStatus" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.GetInstallStatusRequest" + }, + { + "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.gsuiteaddons_v1.types.InstallStatus", + "shortName": "get_install_status" + }, + "description": "Sample for GetInstallStatus", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_get_install_status_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_GetInstallStatus_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": "gsuiteaddons_v1_generated_g_suite_add_ons_get_install_status_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient", + "shortName": "GSuiteAddOnsAsyncClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient.install_deployment", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.InstallDeployment", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "InstallDeployment" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.InstallDeploymentRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "install_deployment" + }, + "description": "Sample for InstallDeployment", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_install_deployment_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_InstallDeployment_async", + "segments": [ + { + "end": 49, + "start": 27, + "type": "FULL" + }, + { + "end": 49, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gsuiteaddons_v1_generated_g_suite_add_ons_install_deployment_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient", + "shortName": "GSuiteAddOnsClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient.install_deployment", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.InstallDeployment", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "InstallDeployment" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.InstallDeploymentRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "install_deployment" + }, + "description": "Sample for InstallDeployment", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_install_deployment_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_InstallDeployment_sync", + "segments": [ + { + "end": 49, + "start": 27, + "type": "FULL" + }, + { + "end": 49, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gsuiteaddons_v1_generated_g_suite_add_ons_install_deployment_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient", + "shortName": "GSuiteAddOnsAsyncClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient.list_deployments", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.ListDeployments", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "ListDeployments" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.ListDeploymentsRequest" + }, + { + "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.gsuiteaddons_v1.services.g_suite_add_ons.pagers.ListDeploymentsAsyncPager", + "shortName": "list_deployments" + }, + "description": "Sample for ListDeployments", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_list_deployments_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_ListDeployments_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": "gsuiteaddons_v1_generated_g_suite_add_ons_list_deployments_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient", + "shortName": "GSuiteAddOnsClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient.list_deployments", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.ListDeployments", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "ListDeployments" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.ListDeploymentsRequest" + }, + { + "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.gsuiteaddons_v1.services.g_suite_add_ons.pagers.ListDeploymentsPager", + "shortName": "list_deployments" + }, + "description": "Sample for ListDeployments", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_list_deployments_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_ListDeployments_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": "gsuiteaddons_v1_generated_g_suite_add_ons_list_deployments_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient", + "shortName": "GSuiteAddOnsAsyncClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient.replace_deployment", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.ReplaceDeployment", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "ReplaceDeployment" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.ReplaceDeploymentRequest" + }, + { + "name": "deployment", + "type": "google.cloud.gsuiteaddons_v1.types.Deployment" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.gsuiteaddons_v1.types.Deployment", + "shortName": "replace_deployment" + }, + "description": "Sample for ReplaceDeployment", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_replace_deployment_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_ReplaceDeployment_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gsuiteaddons_v1_generated_g_suite_add_ons_replace_deployment_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient", + "shortName": "GSuiteAddOnsClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient.replace_deployment", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.ReplaceDeployment", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "ReplaceDeployment" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.ReplaceDeploymentRequest" + }, + { + "name": "deployment", + "type": "google.cloud.gsuiteaddons_v1.types.Deployment" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.gsuiteaddons_v1.types.Deployment", + "shortName": "replace_deployment" + }, + "description": "Sample for ReplaceDeployment", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_replace_deployment_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_ReplaceDeployment_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gsuiteaddons_v1_generated_g_suite_add_ons_replace_deployment_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient", + "shortName": "GSuiteAddOnsAsyncClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsAsyncClient.uninstall_deployment", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.UninstallDeployment", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "UninstallDeployment" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.UninstallDeploymentRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "uninstall_deployment" + }, + "description": "Sample for UninstallDeployment", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_uninstall_deployment_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_UninstallDeployment_async", + "segments": [ + { + "end": 49, + "start": 27, + "type": "FULL" + }, + { + "end": 49, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gsuiteaddons_v1_generated_g_suite_add_ons_uninstall_deployment_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient", + "shortName": "GSuiteAddOnsClient" + }, + "fullName": "google.cloud.gsuiteaddons_v1.GSuiteAddOnsClient.uninstall_deployment", + "method": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns.UninstallDeployment", + "service": { + "fullName": "google.cloud.gsuiteaddons.v1.GSuiteAddOns", + "shortName": "GSuiteAddOns" + }, + "shortName": "UninstallDeployment" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.gsuiteaddons_v1.types.UninstallDeploymentRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "uninstall_deployment" + }, + "description": "Sample for UninstallDeployment", + "file": "gsuiteaddons_v1_generated_g_suite_add_ons_uninstall_deployment_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "gsuiteaddons_v1_generated_GSuiteAddOns_UninstallDeployment_sync", + "segments": [ + { + "end": 49, + "start": 27, + "type": "FULL" + }, + { + "end": 49, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "gsuiteaddons_v1_generated_g_suite_add_ons_uninstall_deployment_sync.py" + } + ] +} diff --git a/packages/google-cloud-gsuiteaddons/tests/unit/gapic/gsuiteaddons_v1/test_g_suite_add_ons.py b/packages/google-cloud-gsuiteaddons/tests/unit/gapic/gsuiteaddons_v1/test_g_suite_add_ons.py index c1ecb27696ad..1742935e2a30 100644 --- a/packages/google-cloud-gsuiteaddons/tests/unit/gapic/gsuiteaddons_v1/test_g_suite_add_ons.py +++ b/packages/google-cloud-gsuiteaddons/tests/unit/gapic/gsuiteaddons_v1/test_g_suite_add_ons.py @@ -3124,8 +3124,9 @@ def test_get_authorization_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.Authorization.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.Authorization.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3202,8 +3203,9 @@ def test_get_authorization_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.Authorization.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.Authorization.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3328,8 +3330,9 @@ def test_get_authorization_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.Authorization.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.Authorization.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3479,6 +3482,73 @@ def test_create_deployment_rest(request_type): }, "etag": "etag_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gsuiteaddons.CreateDeploymentRequest.meta.fields["deployment"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["deployment"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["deployment"][field])): + del request_init["deployment"][field][i][subfield] + else: + del request_init["deployment"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -3493,8 +3563,9 @@ def test_create_deployment_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.Deployment.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.Deployment.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3581,8 +3652,9 @@ def test_create_deployment_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.Deployment.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.Deployment.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3685,105 +3757,6 @@ def test_create_deployment_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1"} - request_init["deployment"] = { - "name": "name_value", - "oauth_scopes": ["oauth_scopes_value1", "oauth_scopes_value2"], - "add_ons": { - "common": { - "name": "name_value", - "logo_url": "logo_url_value", - "layout_properties": { - "primary_color": "primary_color_value", - "secondary_color": "secondary_color_value", - }, - "add_on_widget_set": {"used_widgets": [1]}, - "use_locale_from_app": True, - "homepage_trigger": { - "run_function": "run_function_value", - "enabled": {"value": True}, - }, - "universal_actions": [ - { - "label": "label_value", - "open_link": "open_link_value", - "run_function": "run_function_value", - } - ], - "open_link_url_prefixes": { - "values": [ - { - "null_value": 0, - "number_value": 0.1285, - "string_value": "string_value_value", - "bool_value": True, - "struct_value": {"fields": {}}, - "list_value": {}, - } - ] - }, - }, - "gmail": { - "homepage_trigger": {}, - "contextual_triggers": [ - { - "unconditional": {}, - "on_trigger_function": "on_trigger_function_value", - } - ], - "universal_actions": [ - { - "text": "text_value", - "open_link": "open_link_value", - "run_function": "run_function_value", - } - ], - "compose_trigger": { - "actions": [ - { - "run_function": "run_function_value", - "label": "label_value", - "logo_url": "logo_url_value", - } - ], - "draft_access": 1, - }, - "authorization_check_function": "authorization_check_function_value", - }, - "drive": { - "homepage_trigger": {}, - "on_items_selected_trigger": {"run_function": "run_function_value"}, - }, - "calendar": { - "homepage_trigger": {}, - "conference_solution": [ - { - "on_create_function": "on_create_function_value", - "id": "id_value", - "name": "name_value", - "logo_url": "logo_url_value", - } - ], - "create_settings_url_function": "create_settings_url_function_value", - "event_open_trigger": {"run_function": "run_function_value"}, - "event_update_trigger": {}, - "current_event_access": 1, - }, - "docs": { - "homepage_trigger": {}, - "on_file_scope_granted_trigger": {"run_function": "run_function_value"}, - }, - "sheets": { - "homepage_trigger": {}, - "on_file_scope_granted_trigger": {"run_function": "run_function_value"}, - }, - "slides": { - "homepage_trigger": {}, - "on_file_scope_granted_trigger": {"run_function": "run_function_value"}, - }, - "http_options": {"authorization_header": 1}, - }, - "etag": "etag_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3823,8 +3796,9 @@ def test_create_deployment_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.Deployment.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.Deployment.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3976,6 +3950,73 @@ def test_replace_deployment_rest(request_type): }, "etag": "etag_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gsuiteaddons.ReplaceDeploymentRequest.meta.fields["deployment"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["deployment"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["deployment"][field])): + del request_init["deployment"][field][i][subfield] + else: + del request_init["deployment"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -3990,8 +4031,9 @@ def test_replace_deployment_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.Deployment.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.Deployment.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4064,8 +4106,9 @@ def test_replace_deployment_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.Deployment.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.Deployment.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4153,105 +4196,6 @@ def test_replace_deployment_rest_bad_request( # send a request that will satisfy transcoding request_init = {"deployment": {"name": "projects/sample1/deployments/sample2"}} - request_init["deployment"] = { - "name": "projects/sample1/deployments/sample2", - "oauth_scopes": ["oauth_scopes_value1", "oauth_scopes_value2"], - "add_ons": { - "common": { - "name": "name_value", - "logo_url": "logo_url_value", - "layout_properties": { - "primary_color": "primary_color_value", - "secondary_color": "secondary_color_value", - }, - "add_on_widget_set": {"used_widgets": [1]}, - "use_locale_from_app": True, - "homepage_trigger": { - "run_function": "run_function_value", - "enabled": {"value": True}, - }, - "universal_actions": [ - { - "label": "label_value", - "open_link": "open_link_value", - "run_function": "run_function_value", - } - ], - "open_link_url_prefixes": { - "values": [ - { - "null_value": 0, - "number_value": 0.1285, - "string_value": "string_value_value", - "bool_value": True, - "struct_value": {"fields": {}}, - "list_value": {}, - } - ] - }, - }, - "gmail": { - "homepage_trigger": {}, - "contextual_triggers": [ - { - "unconditional": {}, - "on_trigger_function": "on_trigger_function_value", - } - ], - "universal_actions": [ - { - "text": "text_value", - "open_link": "open_link_value", - "run_function": "run_function_value", - } - ], - "compose_trigger": { - "actions": [ - { - "run_function": "run_function_value", - "label": "label_value", - "logo_url": "logo_url_value", - } - ], - "draft_access": 1, - }, - "authorization_check_function": "authorization_check_function_value", - }, - "drive": { - "homepage_trigger": {}, - "on_items_selected_trigger": {"run_function": "run_function_value"}, - }, - "calendar": { - "homepage_trigger": {}, - "conference_solution": [ - { - "on_create_function": "on_create_function_value", - "id": "id_value", - "name": "name_value", - "logo_url": "logo_url_value", - } - ], - "create_settings_url_function": "create_settings_url_function_value", - "event_open_trigger": {"run_function": "run_function_value"}, - "event_update_trigger": {}, - "current_event_access": 1, - }, - "docs": { - "homepage_trigger": {}, - "on_file_scope_granted_trigger": {"run_function": "run_function_value"}, - }, - "sheets": { - "homepage_trigger": {}, - "on_file_scope_granted_trigger": {"run_function": "run_function_value"}, - }, - "slides": { - "homepage_trigger": {}, - "on_file_scope_granted_trigger": {"run_function": "run_function_value"}, - }, - "http_options": {"authorization_header": 1}, - }, - "etag": "etag_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4291,8 +4235,9 @@ def test_replace_deployment_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.Deployment.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.Deployment.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4358,8 +4303,9 @@ def test_get_deployment_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.Deployment.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.Deployment.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4436,8 +4382,9 @@ def test_get_deployment_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.Deployment.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.Deployment.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4562,8 +4509,9 @@ def test_get_deployment_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.Deployment.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.Deployment.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4626,8 +4574,9 @@ def test_list_deployments_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.ListDeploymentsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.ListDeploymentsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4709,8 +4658,9 @@ def test_list_deployments_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.ListDeploymentsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.ListDeploymentsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4843,8 +4793,9 @@ def test_list_deployments_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.ListDeploymentsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.ListDeploymentsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5723,8 +5674,9 @@ def test_get_install_status_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.InstallStatus.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.InstallStatus.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5799,8 +5751,9 @@ def test_get_install_status_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.InstallStatus.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.InstallStatus.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5925,8 +5878,9 @@ def test_get_install_status_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gsuiteaddons.InstallStatus.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gsuiteaddons.InstallStatus.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-iam/CONTRIBUTING.rst b/packages/google-cloud-iam/CONTRIBUTING.rst index 39dce30cf7db..e634a15687df 100644 --- a/packages/google-cloud-iam/CONTRIBUTING.rst +++ b/packages/google-cloud-iam/CONTRIBUTING.rst @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system- -- -k + $ nox -s system-3.11 -- -k .. note:: - System tests are only configured to run under Python. + System tests are only configured to run under Python 3.8, 3.9, 3.10 and 3.11. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-iam/docs/index.rst b/packages/google-cloud-iam/docs/index.rst index 0cf9b1824b40..4c3d3767f929 100644 --- a/packages/google-cloud-iam/docs/index.rst +++ b/packages/google-cloud-iam/docs/index.rst @@ -3,7 +3,7 @@ .. include:: multiprocessing.rst This package includes clients for multiple versions of Cloud Identity and Access Management. -By default, you will get version ``iam_credentials_v1``. +By default, you will get version ``iam_v2``. API Reference @@ -11,16 +11,16 @@ API Reference .. toctree:: :maxdepth: 2 - iam_credentials_v1/services - iam_credentials_v1/types + iam_v2/services + iam_v2/types API Reference ------------- .. toctree:: :maxdepth: 2 - iam_v2/services - iam_v2/types + iam_credentials_v1/services + iam_credentials_v1/types API Reference ------------- diff --git a/packages/google-cloud-iam/google/cloud/iam/gapic_version.py b/packages/google-cloud-iam/google/cloud/iam/gapic_version.py index 19e33e28af07..360a0d13ebdd 100644 --- a/packages/google-cloud-iam/google/cloud/iam/gapic_version.py +++ b/packages/google-cloud-iam/google/cloud/iam/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "2.12.2" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-iam/google/cloud/iam_credentials/gapic_version.py b/packages/google-cloud-iam/google/cloud/iam_credentials/gapic_version.py index 19e33e28af07..360a0d13ebdd 100644 --- a/packages/google-cloud-iam/google/cloud/iam_credentials/gapic_version.py +++ b/packages/google-cloud-iam/google/cloud/iam_credentials/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "2.12.2" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-iam/google/cloud/iam_credentials_v1/gapic_version.py b/packages/google-cloud-iam/google/cloud/iam_credentials_v1/gapic_version.py index 19e33e28af07..360a0d13ebdd 100644 --- a/packages/google-cloud-iam/google/cloud/iam_credentials_v1/gapic_version.py +++ b/packages/google-cloud-iam/google/cloud/iam_credentials_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "2.12.2" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-iam/google/cloud/iam_v2/gapic_version.py b/packages/google-cloud-iam/google/cloud/iam_v2/gapic_version.py index 19e33e28af07..360a0d13ebdd 100644 --- a/packages/google-cloud-iam/google/cloud/iam_v2/gapic_version.py +++ b/packages/google-cloud-iam/google/cloud/iam_v2/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "2.12.2" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-iam/google/cloud/iam_v2beta/gapic_version.py b/packages/google-cloud-iam/google/cloud/iam_v2beta/gapic_version.py index 19e33e28af07..360a0d13ebdd 100644 --- a/packages/google-cloud-iam/google/cloud/iam_v2beta/gapic_version.py +++ b/packages/google-cloud-iam/google/cloud/iam_v2beta/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "2.12.2" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-iam/noxfile.py b/packages/google-cloud-iam/noxfile.py index 9a2acd8b6787..be54712bfa8f 100644 --- a/packages/google-cloud-iam/noxfile.py +++ b/packages/google-cloud-iam/noxfile.py @@ -46,7 +46,7 @@ UNIT_TEST_EXTRAS = [] UNIT_TEST_EXTRAS_BY_PYTHON = {} -SYSTEM_TEST_PYTHON_VERSIONS = [] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11"] SYSTEM_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", @@ -405,24 +405,3 @@ def prerelease_deps(session): session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") - - system_test_path = os.path.join("tests", "system.py") - system_test_folder_path = os.path.join("tests", "system") - - # Only run system tests if found. - if os.path.exists(system_test_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_path, - *session.posargs, - ) - if os.path.exists(system_test_folder_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_folder_path, - *session.posargs, - ) diff --git a/packages/google-cloud-iam/samples/generated_samples/snippet_metadata_google.iam.credentials.v1.json b/packages/google-cloud-iam/samples/generated_samples/snippet_metadata_google.iam.credentials.v1.json index 012b483d6220..1e024f5ce6ce 100644 --- a/packages/google-cloud-iam/samples/generated_samples/snippet_metadata_google.iam.credentials.v1.json +++ b/packages/google-cloud-iam/samples/generated_samples/snippet_metadata_google.iam.credentials.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-iam", - "version": "2.12.2" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-iam/samples/generated_samples/snippet_metadata_google.iam.v2.json b/packages/google-cloud-iam/samples/generated_samples/snippet_metadata_google.iam.v2.json index e5b6264f45fa..41cce8e24813 100644 --- a/packages/google-cloud-iam/samples/generated_samples/snippet_metadata_google.iam.v2.json +++ b/packages/google-cloud-iam/samples/generated_samples/snippet_metadata_google.iam.v2.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-iam", - "version": "2.12.2" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-iam/samples/generated_samples/snippet_metadata_google.iam.v2beta.json b/packages/google-cloud-iam/samples/generated_samples/snippet_metadata_google.iam.v2beta.json index fe9d0ce12058..5c06ffb6bc77 100644 --- a/packages/google-cloud-iam/samples/generated_samples/snippet_metadata_google.iam.v2beta.json +++ b/packages/google-cloud-iam/samples/generated_samples/snippet_metadata_google.iam.v2beta.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-iam", - "version": "2.12.2" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-iam/tests/unit/gapic/iam_credentials_v1/test_iam_credentials.py b/packages/google-cloud-iam/tests/unit/gapic/iam_credentials_v1/test_iam_credentials.py index c30530324260..0c8e99e62cf8 100644 --- a/packages/google-cloud-iam/tests/unit/gapic/iam_credentials_v1/test_iam_credentials.py +++ b/packages/google-cloud-iam/tests/unit/gapic/iam_credentials_v1/test_iam_credentials.py @@ -1794,8 +1794,9 @@ def test_generate_access_token_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = common.GenerateAccessTokenResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.GenerateAccessTokenResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -1875,8 +1876,9 @@ def test_generate_access_token_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = common.GenerateAccessTokenResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.GenerateAccessTokenResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2012,8 +2014,9 @@ def test_generate_access_token_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = common.GenerateAccessTokenResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.GenerateAccessTokenResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2081,8 +2084,9 @@ def test_generate_id_token_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = common.GenerateIdTokenResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.GenerateIdTokenResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2162,8 +2166,9 @@ def test_generate_id_token_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = common.GenerateIdTokenResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.GenerateIdTokenResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2297,8 +2302,9 @@ def test_generate_id_token_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = common.GenerateIdTokenResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.GenerateIdTokenResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2367,8 +2373,9 @@ def test_sign_blob_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = common.SignBlobResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.SignBlobResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2447,8 +2454,9 @@ def test_sign_blob_rest_required_fields(request_type=common.SignBlobRequest): response_value = Response() response_value.status_code = 200 - pb_return_value = common.SignBlobResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.SignBlobResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2581,8 +2589,9 @@ def test_sign_blob_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = common.SignBlobResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.SignBlobResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2650,8 +2659,9 @@ def test_sign_jwt_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = common.SignJwtResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.SignJwtResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2730,8 +2740,9 @@ def test_sign_jwt_rest_required_fields(request_type=common.SignJwtRequest): response_value = Response() response_value.status_code = 200 - pb_return_value = common.SignJwtResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.SignJwtResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2864,8 +2875,9 @@ def test_sign_jwt_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = common.SignJwtResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = common.SignJwtResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-iam/tests/unit/gapic/iam_v2/test_policies.py b/packages/google-cloud-iam/tests/unit/gapic/iam_v2/test_policies.py index 13c9a39c6bff..7852a7588fed 100644 --- a/packages/google-cloud-iam/tests/unit/gapic/iam_v2/test_policies.py +++ b/packages/google-cloud-iam/tests/unit/gapic/iam_v2/test_policies.py @@ -1994,8 +1994,9 @@ def test_list_policies_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = policy.ListPoliciesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = policy.ListPoliciesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2075,8 +2076,9 @@ def test_list_policies_rest_required_fields(request_type=policy.ListPoliciesRequ response_value = Response() response_value.status_code = 200 - pb_return_value = policy.ListPoliciesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = policy.ListPoliciesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2205,8 +2207,9 @@ def test_list_policies_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = policy.ListPoliciesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = policy.ListPoliciesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2329,8 +2332,9 @@ def test_get_policy_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = policy.Policy.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = policy.Policy.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2408,8 +2412,9 @@ def test_get_policy_rest_required_fields(request_type=policy.GetPolicyRequest): response_value = Response() response_value.status_code = 200 - pb_return_value = policy.Policy.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = policy.Policy.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2528,8 +2533,9 @@ def test_get_policy_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = policy.Policy.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = policy.Policy.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2621,6 +2627,73 @@ def test_create_policy_rest(request_type): ], "managing_authority": "managing_authority_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gi_policy.CreatePolicyRequest.meta.fields["policy"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["policy"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["policy"][field])): + del request_init["policy"][field][i][subfield] + else: + del request_init["policy"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -2799,47 +2872,6 @@ def test_create_policy_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "policies/sample1/sample2"} - request_init["policy"] = { - "name": "name_value", - "uid": "uid_value", - "kind": "kind_value", - "display_name": "display_name_value", - "annotations": {}, - "etag": "etag_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "delete_time": {}, - "rules": [ - { - "deny_rule": { - "denied_principals": [ - "denied_principals_value1", - "denied_principals_value2", - ], - "exception_principals": [ - "exception_principals_value1", - "exception_principals_value2", - ], - "denied_permissions": [ - "denied_permissions_value1", - "denied_permissions_value2", - ], - "exception_permissions": [ - "exception_permissions_value1", - "exception_permissions_value2", - ], - "denial_condition": { - "expression": "expression_value", - "title": "title_value", - "description": "description_value", - "location": "location_value", - }, - }, - "description": "description_value", - } - ], - "managing_authority": "managing_authority_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2973,6 +3005,73 @@ def test_update_policy_rest(request_type): ], "managing_authority": "managing_authority_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = policy.UpdatePolicyRequest.meta.fields["policy"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["policy"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["policy"][field])): + del request_init["policy"][field][i][subfield] + else: + del request_init["policy"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -3136,47 +3235,6 @@ def test_update_policy_rest_bad_request( # send a request that will satisfy transcoding request_init = {"policy": {"name": "policies/sample1/sample2/sample3"}} - request_init["policy"] = { - "name": "policies/sample1/sample2/sample3", - "uid": "uid_value", - "kind": "kind_value", - "display_name": "display_name_value", - "annotations": {}, - "etag": "etag_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "delete_time": {}, - "rules": [ - { - "deny_rule": { - "denied_principals": [ - "denied_principals_value1", - "denied_principals_value2", - ], - "exception_principals": [ - "exception_principals_value1", - "exception_principals_value2", - ], - "denied_permissions": [ - "denied_permissions_value1", - "denied_permissions_value2", - ], - "exception_permissions": [ - "exception_permissions_value1", - "exception_permissions_value2", - ], - "denial_condition": { - "expression": "expression_value", - "title": "title_value", - "description": "description_value", - "location": "location_value", - }, - }, - "description": "description_value", - } - ], - "managing_authority": "managing_authority_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. diff --git a/packages/google-cloud-iap/CONTRIBUTING.rst b/packages/google-cloud-iap/CONTRIBUTING.rst index c239c131b7a6..68df44f106cb 100644 --- a/packages/google-cloud-iap/CONTRIBUTING.rst +++ b/packages/google-cloud-iap/CONTRIBUTING.rst @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system- -- -k + $ nox -s system-3.11 -- -k .. note:: - System tests are only configured to run under Python. + System tests are only configured to run under Python 3.8, 3.9, 3.10 and 3.11. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-iap/google/cloud/iap/gapic_version.py b/packages/google-cloud-iap/google/cloud/iap/gapic_version.py index 4316e0e5df1f..360a0d13ebdd 100644 --- a/packages/google-cloud-iap/google/cloud/iap/gapic_version.py +++ b/packages/google-cloud-iap/google/cloud/iap/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.11.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-iap/google/cloud/iap_v1/gapic_version.py b/packages/google-cloud-iap/google/cloud/iap_v1/gapic_version.py index 4316e0e5df1f..360a0d13ebdd 100644 --- a/packages/google-cloud-iap/google/cloud/iap_v1/gapic_version.py +++ b/packages/google-cloud-iap/google/cloud/iap_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.11.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-iap/noxfile.py b/packages/google-cloud-iap/noxfile.py index 9a2acd8b6787..be54712bfa8f 100644 --- a/packages/google-cloud-iap/noxfile.py +++ b/packages/google-cloud-iap/noxfile.py @@ -46,7 +46,7 @@ UNIT_TEST_EXTRAS = [] UNIT_TEST_EXTRAS_BY_PYTHON = {} -SYSTEM_TEST_PYTHON_VERSIONS = [] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11"] SYSTEM_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", @@ -405,24 +405,3 @@ def prerelease_deps(session): session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") - - system_test_path = os.path.join("tests", "system.py") - system_test_folder_path = os.path.join("tests", "system") - - # Only run system tests if found. - if os.path.exists(system_test_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_path, - *session.posargs, - ) - if os.path.exists(system_test_folder_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_folder_path, - *session.posargs, - ) diff --git a/packages/google-cloud-iap/samples/generated_samples/snippet_metadata_google.cloud.iap.v1.json b/packages/google-cloud-iap/samples/generated_samples/snippet_metadata_google.cloud.iap.v1.json index 0f924693f4bc..3170bc627f80 100644 --- a/packages/google-cloud-iap/samples/generated_samples/snippet_metadata_google.cloud.iap.v1.json +++ b/packages/google-cloud-iap/samples/generated_samples/snippet_metadata_google.cloud.iap.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-iap", - "version": "1.11.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-iap/tests/unit/gapic/iap_v1/test_identity_aware_proxy_admin_service.py b/packages/google-cloud-iap/tests/unit/gapic/iap_v1/test_identity_aware_proxy_admin_service.py index 2e65cb5ea37f..edb4ce64613a 100644 --- a/packages/google-cloud-iap/tests/unit/gapic/iap_v1/test_identity_aware_proxy_admin_service.py +++ b/packages/google-cloud-iap/tests/unit/gapic/iap_v1/test_identity_aware_proxy_admin_service.py @@ -3091,8 +3091,7 @@ def test_set_iam_policy_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3169,8 +3168,7 @@ def test_set_iam_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3310,8 +3308,7 @@ def test_get_iam_policy_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3388,8 +3385,7 @@ def test_get_iam_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3520,8 +3516,7 @@ def test_test_iam_permissions_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3601,8 +3596,7 @@ def test_test_iam_permissions_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3745,8 +3739,9 @@ def test_get_iap_settings_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.IapSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.IapSettings.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3821,8 +3816,9 @@ def test_get_iap_settings_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.IapSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.IapSettings.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3982,6 +3978,73 @@ def test_update_iap_settings_rest(request_type): }, }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = service.UpdateIapSettingsRequest.meta.fields["iap_settings"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["iap_settings"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["iap_settings"][field])): + del request_init["iap_settings"][field][i][subfield] + else: + del request_init["iap_settings"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -3994,8 +4057,9 @@ def test_update_iap_settings_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.IapSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.IapSettings.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4068,8 +4132,9 @@ def test_update_iap_settings_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.IapSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.IapSettings.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4157,46 +4222,6 @@ def test_update_iap_settings_rest_bad_request( # send a request that will satisfy transcoding request_init = {"iap_settings": {"name": "sample1"}} - request_init["iap_settings"] = { - "name": "sample1", - "access_settings": { - "gcip_settings": { - "tenant_ids": ["tenant_ids_value1", "tenant_ids_value2"], - "login_page_uri": {"value": "value_value"}, - }, - "cors_settings": {"allow_http_options": {"value": True}}, - "oauth_settings": { - "login_hint": {}, - "programmatic_clients": [ - "programmatic_clients_value1", - "programmatic_clients_value2", - ], - }, - "reauth_settings": { - "method": 1, - "max_age": {"seconds": 751, "nanos": 543}, - "policy_type": 1, - }, - "allowed_domains_settings": { - "enable": True, - "domains": ["domains_value1", "domains_value2"], - }, - }, - "application_settings": { - "csm_settings": {"rctoken_aud": {}}, - "access_denied_page_settings": { - "access_denied_page_uri": {}, - "generate_troubleshooting_uri": {}, - "remediation_token_generation_enabled": {}, - }, - "cookie_domain": {}, - "attribute_propagation_settings": { - "expression": "expression_value", - "output_credentials": [1], - "enable": True, - }, - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4244,8 +4269,9 @@ def test_list_tunnel_dest_groups_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListTunnelDestGroupsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListTunnelDestGroupsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4327,8 +4353,9 @@ def test_list_tunnel_dest_groups_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListTunnelDestGroupsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListTunnelDestGroupsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4463,8 +4490,9 @@ def test_list_tunnel_dest_groups_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListTunnelDestGroupsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListTunnelDestGroupsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4579,6 +4607,73 @@ def test_create_tunnel_dest_group_rest(request_type): "cidrs": ["cidrs_value1", "cidrs_value2"], "fqdns": ["fqdns_value1", "fqdns_value2"], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = service.CreateTunnelDestGroupRequest.meta.fields["tunnel_dest_group"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["tunnel_dest_group"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["tunnel_dest_group"][field])): + del request_init["tunnel_dest_group"][field][i][subfield] + else: + del request_init["tunnel_dest_group"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -4593,8 +4688,9 @@ def test_create_tunnel_dest_group_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.TunnelDestGroup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.TunnelDestGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4683,8 +4779,9 @@ def test_create_tunnel_dest_group_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.TunnelDestGroup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.TunnelDestGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4789,11 +4886,6 @@ def test_create_tunnel_dest_group_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/iap_tunnel/locations/sample2"} - request_init["tunnel_dest_group"] = { - "name": "name_value", - "cidrs": ["cidrs_value1", "cidrs_value2"], - "fqdns": ["fqdns_value1", "fqdns_value2"], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4833,8 +4925,9 @@ def test_create_tunnel_dest_group_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.TunnelDestGroup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.TunnelDestGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4905,8 +4998,9 @@ def test_get_tunnel_dest_group_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.TunnelDestGroup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.TunnelDestGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4983,8 +5077,9 @@ def test_get_tunnel_dest_group_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.TunnelDestGroup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.TunnelDestGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5115,8 +5210,9 @@ def test_get_tunnel_dest_group_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.TunnelDestGroup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.TunnelDestGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5438,6 +5534,73 @@ def test_update_tunnel_dest_group_rest(request_type): "cidrs": ["cidrs_value1", "cidrs_value2"], "fqdns": ["fqdns_value1", "fqdns_value2"], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = service.UpdateTunnelDestGroupRequest.meta.fields["tunnel_dest_group"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["tunnel_dest_group"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["tunnel_dest_group"][field])): + del request_init["tunnel_dest_group"][field][i][subfield] + else: + del request_init["tunnel_dest_group"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -5452,8 +5615,9 @@ def test_update_tunnel_dest_group_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.TunnelDestGroup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.TunnelDestGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5528,8 +5692,9 @@ def test_update_tunnel_dest_group_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.TunnelDestGroup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.TunnelDestGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5623,11 +5788,6 @@ def test_update_tunnel_dest_group_rest_bad_request( "name": "projects/sample1/iap_tunnel/locations/sample2/destGroups/sample3" } } - request_init["tunnel_dest_group"] = { - "name": "projects/sample1/iap_tunnel/locations/sample2/destGroups/sample3", - "cidrs": ["cidrs_value1", "cidrs_value2"], - "fqdns": ["fqdns_value1", "fqdns_value2"], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -5670,8 +5830,9 @@ def test_update_tunnel_dest_group_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.TunnelDestGroup.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.TunnelDestGroup.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-iap/tests/unit/gapic/iap_v1/test_identity_aware_proxy_o_auth_service.py b/packages/google-cloud-iap/tests/unit/gapic/iap_v1/test_identity_aware_proxy_o_auth_service.py index d59fd842d46b..7587f59b570f 100644 --- a/packages/google-cloud-iap/tests/unit/gapic/iap_v1/test_identity_aware_proxy_o_auth_service.py +++ b/packages/google-cloud-iap/tests/unit/gapic/iap_v1/test_identity_aware_proxy_o_auth_service.py @@ -2269,8 +2269,9 @@ def test_list_brands_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListBrandsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListBrandsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2342,8 +2343,9 @@ def test_list_brands_rest_required_fields(request_type=service.ListBrandsRequest response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListBrandsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListBrandsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2470,6 +2472,73 @@ def test_create_brand_rest(request_type): "application_title": "application_title_value", "org_internal_only": True, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = service.CreateBrandRequest.meta.fields["brand"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["brand"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["brand"][field])): + del request_init["brand"][field][i][subfield] + else: + del request_init["brand"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -2485,8 +2554,9 @@ def test_create_brand_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.Brand.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.Brand.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2563,8 +2633,9 @@ def test_create_brand_rest_required_fields(request_type=service.CreateBrandReque response_value = Response() response_value.status_code = 200 - pb_return_value = service.Brand.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.Brand.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2656,12 +2727,6 @@ def test_create_brand_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1"} - request_init["brand"] = { - "name": "name_value", - "support_email": "support_email_value", - "application_title": "application_title_value", - "org_internal_only": True, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -2712,8 +2777,9 @@ def test_get_brand_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.Brand.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.Brand.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2789,8 +2855,9 @@ def test_get_brand_rest_required_fields(request_type=service.GetBrandRequest): response_value = Response() response_value.status_code = 200 - pb_return_value = service.Brand.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.Brand.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2914,6 +2981,79 @@ def test_create_identity_aware_proxy_client_rest(request_type): "secret": "secret_value", "display_name": "display_name_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = service.CreateIdentityAwareProxyClientRequest.meta.fields[ + "identity_aware_proxy_client" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init[ + "identity_aware_proxy_client" + ].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range( + 0, len(request_init["identity_aware_proxy_client"][field]) + ): + del request_init["identity_aware_proxy_client"][field][i][subfield] + else: + del request_init["identity_aware_proxy_client"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -2928,8 +3068,9 @@ def test_create_identity_aware_proxy_client_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.IdentityAwareProxyClient.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.IdentityAwareProxyClient.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3007,8 +3148,9 @@ def test_create_identity_aware_proxy_client_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.IdentityAwareProxyClient.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.IdentityAwareProxyClient.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3108,11 +3250,6 @@ def test_create_identity_aware_proxy_client_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/brands/sample2"} - request_init["identity_aware_proxy_client"] = { - "name": "name_value", - "secret": "secret_value", - "display_name": "display_name_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3160,8 +3297,9 @@ def test_list_identity_aware_proxy_clients_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListIdentityAwareProxyClientsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListIdentityAwareProxyClientsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3243,10 +3381,11 @@ def test_list_identity_aware_proxy_clients_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListIdentityAwareProxyClientsResponse.pb( + # Convert return value to protobuf type + return_value = service.ListIdentityAwareProxyClientsResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3458,8 +3597,9 @@ def test_get_identity_aware_proxy_client_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.IdentityAwareProxyClient.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.IdentityAwareProxyClient.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3536,8 +3676,9 @@ def test_get_identity_aware_proxy_client_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.IdentityAwareProxyClient.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.IdentityAwareProxyClient.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3682,8 +3823,9 @@ def test_reset_identity_aware_proxy_client_secret_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.IdentityAwareProxyClient.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.IdentityAwareProxyClient.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3765,8 +3907,9 @@ def test_reset_identity_aware_proxy_client_secret_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.IdentityAwareProxyClient.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.IdentityAwareProxyClient.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-ids/CONTRIBUTING.rst b/packages/google-cloud-ids/CONTRIBUTING.rst index 10774d2e314d..ef7255f2b8c7 100644 --- a/packages/google-cloud-ids/CONTRIBUTING.rst +++ b/packages/google-cloud-ids/CONTRIBUTING.rst @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system- -- -k + $ nox -s system-3.11 -- -k .. note:: - System tests are only configured to run under Python. + System tests are only configured to run under Python 3.8, 3.9, 3.10 and 3.11. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-ids/google/cloud/ids/gapic_version.py b/packages/google-cloud-ids/google/cloud/ids/gapic_version.py index 21964d6e5abf..360a0d13ebdd 100644 --- a/packages/google-cloud-ids/google/cloud/ids/gapic_version.py +++ b/packages/google-cloud-ids/google/cloud/ids/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.5.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-ids/google/cloud/ids_v1/gapic_version.py b/packages/google-cloud-ids/google/cloud/ids_v1/gapic_version.py index 21964d6e5abf..360a0d13ebdd 100644 --- a/packages/google-cloud-ids/google/cloud/ids_v1/gapic_version.py +++ b/packages/google-cloud-ids/google/cloud/ids_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.5.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-ids/noxfile.py b/packages/google-cloud-ids/noxfile.py index 9a2acd8b6787..be54712bfa8f 100644 --- a/packages/google-cloud-ids/noxfile.py +++ b/packages/google-cloud-ids/noxfile.py @@ -46,7 +46,7 @@ UNIT_TEST_EXTRAS = [] UNIT_TEST_EXTRAS_BY_PYTHON = {} -SYSTEM_TEST_PYTHON_VERSIONS = [] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11"] SYSTEM_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", @@ -405,24 +405,3 @@ def prerelease_deps(session): session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") - - system_test_path = os.path.join("tests", "system.py") - system_test_folder_path = os.path.join("tests", "system") - - # Only run system tests if found. - if os.path.exists(system_test_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_path, - *session.posargs, - ) - if os.path.exists(system_test_folder_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_folder_path, - *session.posargs, - ) diff --git a/packages/google-cloud-ids/samples/generated_samples/snippet_metadata_google.cloud.ids.v1.json b/packages/google-cloud-ids/samples/generated_samples/snippet_metadata_google.cloud.ids.v1.json index cce3c72eb400..49e7eb64c25f 100644 --- a/packages/google-cloud-ids/samples/generated_samples/snippet_metadata_google.cloud.ids.v1.json +++ b/packages/google-cloud-ids/samples/generated_samples/snippet_metadata_google.cloud.ids.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-ids", - "version": "1.5.3" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-ids/tests/unit/gapic/ids_v1/test_ids.py b/packages/google-cloud-ids/tests/unit/gapic/ids_v1/test_ids.py index 7d1806463d42..6db47dba586c 100644 --- a/packages/google-cloud-ids/tests/unit/gapic/ids_v1/test_ids.py +++ b/packages/google-cloud-ids/tests/unit/gapic/ids_v1/test_ids.py @@ -1833,8 +1833,9 @@ def test_list_endpoints_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = ids.ListEndpointsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = ids.ListEndpointsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -1917,8 +1918,9 @@ def test_list_endpoints_rest_required_fields(request_type=ids.ListEndpointsReque response_value = Response() response_value.status_code = 200 - pb_return_value = ids.ListEndpointsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = ids.ListEndpointsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2049,8 +2051,9 @@ def test_list_endpoints_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = ids.ListEndpointsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = ids.ListEndpointsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2176,8 +2179,9 @@ def test_get_endpoint_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = ids.Endpoint.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = ids.Endpoint.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2257,8 +2261,9 @@ def test_get_endpoint_rest_required_fields(request_type=ids.GetEndpointRequest): response_value = Response() response_value.status_code = 200 - pb_return_value = ids.Endpoint.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = ids.Endpoint.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2379,8 +2384,9 @@ def test_get_endpoint_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = ids.Endpoint.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = ids.Endpoint.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2445,6 +2451,73 @@ def test_create_endpoint_rest(request_type): "state": 1, "traffic_logs": True, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = ids.CreateEndpointRequest.meta.fields["endpoint"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["endpoint"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["endpoint"][field])): + del request_init["endpoint"][field][i][subfield] + else: + del request_init["endpoint"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -2647,19 +2720,6 @@ def test_create_endpoint_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["endpoint"] = { - "name": "name_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "network": "network_value", - "endpoint_forwarding_rule": "endpoint_forwarding_rule_value", - "endpoint_ip": "endpoint_ip_value", - "description": "description_value", - "severity": 1, - "state": 1, - "traffic_logs": True, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. diff --git a/packages/google-cloud-memcache/CONTRIBUTING.rst b/packages/google-cloud-memcache/CONTRIBUTING.rst index e25664fd7208..acab31dd0496 100644 --- a/packages/google-cloud-memcache/CONTRIBUTING.rst +++ b/packages/google-cloud-memcache/CONTRIBUTING.rst @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system- -- -k + $ nox -s system-3.11 -- -k .. note:: - System tests are only configured to run under Python. + System tests are only configured to run under Python 3.8, 3.9, 3.10 and 3.11. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-memcache/google/cloud/memcache/gapic_version.py b/packages/google-cloud-memcache/google/cloud/memcache/gapic_version.py index 84f198c2d605..360a0d13ebdd 100644 --- a/packages/google-cloud-memcache/google/cloud/memcache/gapic_version.py +++ b/packages/google-cloud-memcache/google/cloud/memcache/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.7.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-memcache/google/cloud/memcache_v1/gapic_version.py b/packages/google-cloud-memcache/google/cloud/memcache_v1/gapic_version.py index 84f198c2d605..360a0d13ebdd 100644 --- a/packages/google-cloud-memcache/google/cloud/memcache_v1/gapic_version.py +++ b/packages/google-cloud-memcache/google/cloud/memcache_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.7.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-memcache/google/cloud/memcache_v1beta2/gapic_version.py b/packages/google-cloud-memcache/google/cloud/memcache_v1beta2/gapic_version.py index 84f198c2d605..360a0d13ebdd 100644 --- a/packages/google-cloud-memcache/google/cloud/memcache_v1beta2/gapic_version.py +++ b/packages/google-cloud-memcache/google/cloud/memcache_v1beta2/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.7.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-memcache/noxfile.py b/packages/google-cloud-memcache/noxfile.py index 9a2acd8b6787..be54712bfa8f 100644 --- a/packages/google-cloud-memcache/noxfile.py +++ b/packages/google-cloud-memcache/noxfile.py @@ -46,7 +46,7 @@ UNIT_TEST_EXTRAS = [] UNIT_TEST_EXTRAS_BY_PYTHON = {} -SYSTEM_TEST_PYTHON_VERSIONS = [] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11"] SYSTEM_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", @@ -405,24 +405,3 @@ def prerelease_deps(session): session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") - - system_test_path = os.path.join("tests", "system.py") - system_test_folder_path = os.path.join("tests", "system") - - # Only run system tests if found. - if os.path.exists(system_test_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_path, - *session.posargs, - ) - if os.path.exists(system_test_folder_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_folder_path, - *session.posargs, - ) diff --git a/packages/google-cloud-memcache/samples/generated_samples/snippet_metadata_google.cloud.memcache.v1.json b/packages/google-cloud-memcache/samples/generated_samples/snippet_metadata_google.cloud.memcache.v1.json index e68e758897ec..4fbe6f0f3a20 100644 --- a/packages/google-cloud-memcache/samples/generated_samples/snippet_metadata_google.cloud.memcache.v1.json +++ b/packages/google-cloud-memcache/samples/generated_samples/snippet_metadata_google.cloud.memcache.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-memcache", - "version": "1.7.3" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-memcache/samples/generated_samples/snippet_metadata_google.cloud.memcache.v1beta2.json b/packages/google-cloud-memcache/samples/generated_samples/snippet_metadata_google.cloud.memcache.v1beta2.json index 1b185e996cc7..a19a59a135cf 100644 --- a/packages/google-cloud-memcache/samples/generated_samples/snippet_metadata_google.cloud.memcache.v1beta2.json +++ b/packages/google-cloud-memcache/samples/generated_samples/snippet_metadata_google.cloud.memcache.v1beta2.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-memcache", - "version": "1.7.3" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-memcache/tests/unit/gapic/memcache_v1/test_cloud_memcache.py b/packages/google-cloud-memcache/tests/unit/gapic/memcache_v1/test_cloud_memcache.py index e13aa70ca8f4..d003712fcabc 100644 --- a/packages/google-cloud-memcache/tests/unit/gapic/memcache_v1/test_cloud_memcache.py +++ b/packages/google-cloud-memcache/tests/unit/gapic/memcache_v1/test_cloud_memcache.py @@ -2912,8 +2912,9 @@ def test_list_instances_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = cloud_memcache.ListInstancesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = cloud_memcache.ListInstancesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2998,8 +2999,9 @@ def test_list_instances_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = cloud_memcache.ListInstancesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = cloud_memcache.ListInstancesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3134,8 +3136,9 @@ def test_list_instances_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = cloud_memcache.ListInstancesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = cloud_memcache.ListInstancesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3264,8 +3267,9 @@ def test_get_instance_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = cloud_memcache.Instance.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = cloud_memcache.Instance.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3348,8 +3352,9 @@ def test_get_instance_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = cloud_memcache.Instance.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = cloud_memcache.Instance.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3476,8 +3481,9 @@ def test_get_instance_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = cloud_memcache.Instance.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = cloud_memcache.Instance.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3578,6 +3584,73 @@ def test_create_instance_rest(request_type): "schedule_deadline_time": {}, }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = cloud_memcache.CreateInstanceRequest.meta.fields["instance"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["instance"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["instance"][field])): + del request_init["instance"][field][i][subfield] + else: + del request_init["instance"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -3776,55 +3849,6 @@ def test_create_instance_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["instance"] = { - "name": "name_value", - "display_name": "display_name_value", - "labels": {}, - "authorized_network": "authorized_network_value", - "zones": ["zones_value1", "zones_value2"], - "node_count": 1070, - "node_config": {"cpu_count": 976, "memory_size_mb": 1505}, - "memcache_version": 1, - "parameters": {"id": "id_value", "params": {}}, - "memcache_nodes": [ - { - "node_id": "node_id_value", - "zone": "zone_value", - "state": 1, - "host": "host_value", - "port": 453, - "parameters": {}, - } - ], - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "state": 1, - "memcache_full_version": "memcache_full_version_value", - "instance_messages": [{"code": 1, "message": "message_value"}], - "discovery_endpoint": "discovery_endpoint_value", - "maintenance_policy": { - "create_time": {}, - "update_time": {}, - "description": "description_value", - "weekly_maintenance_window": [ - { - "day": 1, - "start_time": { - "hours": 561, - "minutes": 773, - "seconds": 751, - "nanos": 543, - }, - "duration": {"seconds": 751, "nanos": 543}, - } - ], - }, - "maintenance_schedule": { - "start_time": {}, - "end_time": {}, - "schedule_deadline_time": {}, - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -3969,6 +3993,73 @@ def test_update_instance_rest(request_type): "schedule_deadline_time": {}, }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = cloud_memcache.UpdateInstanceRequest.meta.fields["instance"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["instance"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["instance"][field])): + del request_init["instance"][field][i][subfield] + else: + del request_init["instance"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -4150,55 +4241,6 @@ def test_update_instance_rest_bad_request( request_init = { "instance": {"name": "projects/sample1/locations/sample2/instances/sample3"} } - request_init["instance"] = { - "name": "projects/sample1/locations/sample2/instances/sample3", - "display_name": "display_name_value", - "labels": {}, - "authorized_network": "authorized_network_value", - "zones": ["zones_value1", "zones_value2"], - "node_count": 1070, - "node_config": {"cpu_count": 976, "memory_size_mb": 1505}, - "memcache_version": 1, - "parameters": {"id": "id_value", "params": {}}, - "memcache_nodes": [ - { - "node_id": "node_id_value", - "zone": "zone_value", - "state": 1, - "host": "host_value", - "port": 453, - "parameters": {}, - } - ], - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "state": 1, - "memcache_full_version": "memcache_full_version_value", - "instance_messages": [{"code": 1, "message": "message_value"}], - "discovery_endpoint": "discovery_endpoint_value", - "maintenance_policy": { - "create_time": {}, - "update_time": {}, - "description": "description_value", - "weekly_maintenance_window": [ - { - "day": 1, - "start_time": { - "hours": 561, - "minutes": 773, - "seconds": 751, - "nanos": 543, - }, - "duration": {"seconds": 751, "nanos": 543}, - } - ], - }, - "maintenance_schedule": { - "start_time": {}, - "end_time": {}, - "schedule_deadline_time": {}, - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. diff --git a/packages/google-cloud-memcache/tests/unit/gapic/memcache_v1beta2/test_cloud_memcache.py b/packages/google-cloud-memcache/tests/unit/gapic/memcache_v1beta2/test_cloud_memcache.py index 9bba354f4826..e29d7ba91d6b 100644 --- a/packages/google-cloud-memcache/tests/unit/gapic/memcache_v1beta2/test_cloud_memcache.py +++ b/packages/google-cloud-memcache/tests/unit/gapic/memcache_v1beta2/test_cloud_memcache.py @@ -3177,8 +3177,9 @@ def test_list_instances_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = cloud_memcache.ListInstancesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = cloud_memcache.ListInstancesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3263,8 +3264,9 @@ def test_list_instances_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = cloud_memcache.ListInstancesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = cloud_memcache.ListInstancesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3399,8 +3401,9 @@ def test_list_instances_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = cloud_memcache.ListInstancesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = cloud_memcache.ListInstancesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3531,8 +3534,9 @@ def test_get_instance_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = cloud_memcache.Instance.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = cloud_memcache.Instance.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3616,8 +3620,9 @@ def test_get_instance_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = cloud_memcache.Instance.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = cloud_memcache.Instance.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3744,8 +3749,9 @@ def test_get_instance_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = cloud_memcache.Instance.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = cloud_memcache.Instance.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3849,6 +3855,73 @@ def test_create_instance_rest(request_type): "schedule_deadline_time": {}, }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = cloud_memcache.CreateInstanceRequest.meta.fields["resource"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["resource"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["resource"][field])): + del request_init["resource"][field][i][subfield] + else: + del request_init["resource"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -4047,57 +4120,6 @@ def test_create_instance_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["resource"] = { - "name": "name_value", - "display_name": "display_name_value", - "labels": {}, - "authorized_network": "authorized_network_value", - "zones": ["zones_value1", "zones_value2"], - "node_count": 1070, - "node_config": {"cpu_count": 976, "memory_size_mb": 1505}, - "memcache_version": 1, - "parameters": {"id": "id_value", "params": {}}, - "memcache_nodes": [ - { - "node_id": "node_id_value", - "zone": "zone_value", - "state": 1, - "host": "host_value", - "port": 453, - "parameters": {}, - "update_available": True, - } - ], - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "state": 1, - "memcache_full_version": "memcache_full_version_value", - "instance_messages": [{"code": 1, "message": "message_value"}], - "discovery_endpoint": "discovery_endpoint_value", - "update_available": True, - "maintenance_policy": { - "create_time": {}, - "update_time": {}, - "description": "description_value", - "weekly_maintenance_window": [ - { - "day": 1, - "start_time": { - "hours": 561, - "minutes": 773, - "seconds": 751, - "nanos": 543, - }, - "duration": {"seconds": 751, "nanos": 543}, - } - ], - }, - "maintenance_schedule": { - "start_time": {}, - "end_time": {}, - "schedule_deadline_time": {}, - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4245,6 +4267,73 @@ def test_update_instance_rest(request_type): "schedule_deadline_time": {}, }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = cloud_memcache.UpdateInstanceRequest.meta.fields["resource"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["resource"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["resource"][field])): + del request_init["resource"][field][i][subfield] + else: + del request_init["resource"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -4426,57 +4515,6 @@ def test_update_instance_rest_bad_request( request_init = { "resource": {"name": "projects/sample1/locations/sample2/instances/sample3"} } - request_init["resource"] = { - "name": "projects/sample1/locations/sample2/instances/sample3", - "display_name": "display_name_value", - "labels": {}, - "authorized_network": "authorized_network_value", - "zones": ["zones_value1", "zones_value2"], - "node_count": 1070, - "node_config": {"cpu_count": 976, "memory_size_mb": 1505}, - "memcache_version": 1, - "parameters": {"id": "id_value", "params": {}}, - "memcache_nodes": [ - { - "node_id": "node_id_value", - "zone": "zone_value", - "state": 1, - "host": "host_value", - "port": 453, - "parameters": {}, - "update_available": True, - } - ], - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "state": 1, - "memcache_full_version": "memcache_full_version_value", - "instance_messages": [{"code": 1, "message": "message_value"}], - "discovery_endpoint": "discovery_endpoint_value", - "update_available": True, - "maintenance_policy": { - "create_time": {}, - "update_time": {}, - "description": "description_value", - "weekly_maintenance_window": [ - { - "day": 1, - "start_time": { - "hours": 561, - "minutes": 773, - "seconds": 751, - "nanos": 543, - }, - "duration": {"seconds": 751, "nanos": 543}, - } - ], - }, - "maintenance_schedule": { - "start_time": {}, - "end_time": {}, - "schedule_deadline_time": {}, - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. diff --git a/packages/google-cloud-migrationcenter/CONTRIBUTING.rst b/packages/google-cloud-migrationcenter/CONTRIBUTING.rst index 4ee20948f33f..e00d3800644e 100644 --- a/packages/google-cloud-migrationcenter/CONTRIBUTING.rst +++ b/packages/google-cloud-migrationcenter/CONTRIBUTING.rst @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system- -- -k + $ nox -s system-3.11 -- -k .. note:: - System tests are only configured to run under Python. + System tests are only configured to run under Python 3.8, 3.9, 3.10 and 3.11. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-migrationcenter/google/cloud/migrationcenter/gapic_version.py b/packages/google-cloud-migrationcenter/google/cloud/migrationcenter/gapic_version.py index cf99f3acb1ee..360a0d13ebdd 100644 --- a/packages/google-cloud-migrationcenter/google/cloud/migrationcenter/gapic_version.py +++ b/packages/google-cloud-migrationcenter/google/cloud/migrationcenter/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.1.2" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-migrationcenter/google/cloud/migrationcenter_v1/gapic_version.py b/packages/google-cloud-migrationcenter/google/cloud/migrationcenter_v1/gapic_version.py index cf99f3acb1ee..360a0d13ebdd 100644 --- a/packages/google-cloud-migrationcenter/google/cloud/migrationcenter_v1/gapic_version.py +++ b/packages/google-cloud-migrationcenter/google/cloud/migrationcenter_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.1.2" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-migrationcenter/noxfile.py b/packages/google-cloud-migrationcenter/noxfile.py index 9a2acd8b6787..be54712bfa8f 100644 --- a/packages/google-cloud-migrationcenter/noxfile.py +++ b/packages/google-cloud-migrationcenter/noxfile.py @@ -46,7 +46,7 @@ UNIT_TEST_EXTRAS = [] UNIT_TEST_EXTRAS_BY_PYTHON = {} -SYSTEM_TEST_PYTHON_VERSIONS = [] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11"] SYSTEM_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", @@ -405,24 +405,3 @@ def prerelease_deps(session): session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") - - system_test_path = os.path.join("tests", "system.py") - system_test_folder_path = os.path.join("tests", "system") - - # Only run system tests if found. - if os.path.exists(system_test_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_path, - *session.posargs, - ) - if os.path.exists(system_test_folder_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_folder_path, - *session.posargs, - ) diff --git a/packages/google-cloud-migrationcenter/samples/generated_samples/snippet_metadata_google.cloud.migrationcenter.v1.json b/packages/google-cloud-migrationcenter/samples/generated_samples/snippet_metadata_google.cloud.migrationcenter.v1.json index c0c36ef22ee9..3fc0956a4d6c 100644 --- a/packages/google-cloud-migrationcenter/samples/generated_samples/snippet_metadata_google.cloud.migrationcenter.v1.json +++ b/packages/google-cloud-migrationcenter/samples/generated_samples/snippet_metadata_google.cloud.migrationcenter.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-migrationcenter", - "version": "0.1.2" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-migrationcenter/tests/unit/gapic/migrationcenter_v1/test_migration_center.py b/packages/google-cloud-migrationcenter/tests/unit/gapic/migrationcenter_v1/test_migration_center.py index 433ff31998a7..8844b49bb15f 100644 --- a/packages/google-cloud-migrationcenter/tests/unit/gapic/migrationcenter_v1/test_migration_center.py +++ b/packages/google-cloud-migrationcenter/tests/unit/gapic/migrationcenter_v1/test_migration_center.py @@ -14059,8 +14059,9 @@ def test_list_assets_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14146,8 +14147,9 @@ def test_list_assets_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14283,8 +14285,9 @@ def test_list_assets_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14407,8 +14410,9 @@ def test_get_asset_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Asset.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Asset.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14485,8 +14489,9 @@ def test_get_asset_rest_required_fields(request_type=migrationcenter.GetAssetReq response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Asset.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Asset.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14611,8 +14616,9 @@ def test_get_asset_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Asset.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Asset.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14932,6 +14938,73 @@ def test_update_asset_rest(request_type): "sources": ["sources_value1", "sources_value2"], "assigned_groups": ["assigned_groups_value1", "assigned_groups_value2"], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = migrationcenter.UpdateAssetRequest.meta.fields["asset"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["asset"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["asset"][field])): + del request_init["asset"][field][i][subfield] + else: + del request_init["asset"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -14946,8 +15019,9 @@ def test_update_asset_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Asset.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Asset.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15027,8 +15101,9 @@ def test_update_asset_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Asset.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Asset.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15131,272 +15206,6 @@ def test_update_asset_rest_bad_request( request_init = { "asset": {"name": "projects/sample1/locations/sample2/assets/sample3"} } - request_init["asset"] = { - "name": "projects/sample1/locations/sample2/assets/sample3", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "attributes": {}, - "machine_details": { - "uuid": "uuid_value", - "machine_name": "machine_name_value", - "create_time": {}, - "core_count": 1073, - "memory_mb": 967, - "power_state": 1, - "architecture": { - "cpu_architecture": "cpu_architecture_value", - "cpu_name": "cpu_name_value", - "vendor": "vendor_value", - "cpu_thread_count": 1703, - "cpu_socket_count": 1720, - "bios": { - "bios_name": "bios_name_value", - "id": "id_value", - "manufacturer": "manufacturer_value", - "version": "version_value", - "release_date": {"year": 433, "month": 550, "day": 318}, - "smbios_uuid": "smbios_uuid_value", - }, - "firmware_type": 1, - "hyperthreading": 1, - }, - "guest_os": { - "os_name": "os_name_value", - "family": 1, - "version": "version_value", - "config": { - "issue": "issue_value", - "fstab": { - "entries": [ - { - "spec": "spec_value", - "file": "file_value", - "vfstype": "vfstype_value", - "mntops": "mntops_value", - "freq": 430, - "passno": 660, - } - ] - }, - "hosts": { - "entries": [ - { - "ip": "ip_value", - "host_names": [ - "host_names_value1", - "host_names_value2", - ], - } - ] - }, - "nfs_exports": { - "entries": [ - { - "export_directory": "export_directory_value", - "hosts": ["hosts_value1", "hosts_value2"], - } - ] - }, - "selinux_mode": 1, - }, - "runtime": { - "services": { - "entries": [ - { - "service_name": "service_name_value", - "state": 1, - "start_mode": 1, - "exe_path": "exe_path_value", - "cmdline": "cmdline_value", - "pid": 317, - } - ] - }, - "processes": { - "entries": [ - { - "pid": 317, - "exe_path": "exe_path_value", - "cmdline": "cmdline_value", - "user": "user_value", - "attributes": {}, - } - ] - }, - "network": { - "scan_time": {}, - "connections": { - "entries": [ - { - "protocol": "protocol_value", - "local_ip_address": "local_ip_address_value", - "local_port": 1071, - "remote_ip_address": "remote_ip_address_value", - "remote_port": 1200, - "state": 1, - "pid": 317, - "process_name": "process_name_value", - } - ] - }, - }, - "last_boot_time": {}, - "domain": "domain_value", - "machine_name": "machine_name_value", - "installed_apps": { - "entries": [ - { - "application_name": "application_name_value", - "vendor": "vendor_value", - "install_time": {}, - "path": "path_value", - "version": "version_value", - } - ] - }, - "open_file_list": { - "entries": [ - { - "command": "command_value", - "user": "user_value", - "file_type": "file_type_value", - "file_path": "file_path_value", - } - ] - }, - }, - }, - "network": { - "primary_ip_address": "primary_ip_address_value", - "public_ip_address": "public_ip_address_value", - "primary_mac_address": "primary_mac_address_value", - "adapters": { - "entries": [ - { - "adapter_type": "adapter_type_value", - "mac_address": "mac_address_value", - "addresses": { - "entries": [ - { - "ip_address": "ip_address_value", - "subnet_mask": "subnet_mask_value", - "bcast": "bcast_value", - "fqdn": "fqdn_value", - "assignment": 1, - } - ] - }, - } - ] - }, - }, - "disks": { - "total_capacity_bytes": 2135, - "total_free_bytes": 1707, - "disks": { - "entries": [ - { - "capacity_bytes": 1492, - "free_bytes": 1064, - "disk_label": "disk_label_value", - "disk_label_type": "disk_label_type_value", - "interface_type": 1, - "partitions": { - "entries": [ - { - "type_": "type__value", - "file_system": "file_system_value", - "mount_point": "mount_point_value", - "capacity_bytes": 1492, - "free_bytes": 1064, - "uuid": "uuid_value", - "sub_partitions": {}, - } - ] - }, - "hw_address": "hw_address_value", - "vmware": { - "backing_type": 1, - "shared": True, - "vmdk_mode": 1, - "rdm_compatibility": 1, - }, - } - ] - }, - }, - "platform": { - "vmware_details": { - "vcenter_version": "vcenter_version_value", - "esx_version": "esx_version_value", - "osid": "osid_value", - "vcenter_folder": "vcenter_folder_value", - "vcenter_uri": "vcenter_uri_value", - "vcenter_vm_id": "vcenter_vm_id_value", - }, - "aws_ec2_details": { - "machine_type_label": "machine_type_label_value", - "location": "location_value", - }, - "azure_vm_details": { - "machine_type_label": "machine_type_label_value", - "location": "location_value", - "provisioning_state": "provisioning_state_value", - }, - "generic_details": {"location": "location_value"}, - "physical_details": {"location": "location_value"}, - }, - }, - "insight_list": { - "insights": [ - { - "migration_insight": { - "fit": {"fit_level": 1}, - "compute_engine_target": { - "shape": { - "memory_mb": 967, - "physical_core_count": 2029, - "logical_core_count": 1899, - "series": "series_value", - "machine_type": "machine_type_value", - "storage": [{"type_": 1, "size_gb": 739}], - } - }, - }, - "generic_insight": { - "message_id": 1041, - "default_message": "default_message_value", - "additional_information": [ - "additional_information_value1", - "additional_information_value2", - ], - }, - } - ], - "update_time": {}, - }, - "performance_data": { - "daily_resource_usage_aggregations": [ - { - "date": {}, - "cpu": { - "utilization_percentage": { - "average": 0.731, - "median": 0.622, - "nintey_fifth_percentile": 0.2449, - "peak": 0.417, - } - }, - "memory": {"utilization_percentage": {}}, - "network": {"ingress_bps": {}, "egress_bps": {}}, - "disk": {"iops": {}}, - } - ] - }, - "sources": ["sources_value1", "sources_value2"], - "assigned_groups": ["assigned_groups_value1", "assigned_groups_value2"], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -15437,8 +15246,9 @@ def test_update_asset_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Asset.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Asset.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15502,8 +15312,9 @@ def test_batch_update_assets_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.BatchUpdateAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.BatchUpdateAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15578,8 +15389,9 @@ def test_batch_update_assets_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.BatchUpdateAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.BatchUpdateAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15717,8 +15529,9 @@ def test_batch_update_assets_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.BatchUpdateAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.BatchUpdateAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -16531,6 +16344,73 @@ def test_report_asset_frames_rest(request_type): } ] } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = migrationcenter.ReportAssetFramesRequest.meta.fields["frames"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["frames"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["frames"][field])): + del request_init["frames"][field][i][subfield] + else: + del request_init["frames"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -16541,8 +16421,9 @@ def test_report_asset_frames_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ReportAssetFramesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ReportAssetFramesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -16626,8 +16507,9 @@ def test_report_asset_frames_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ReportAssetFramesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ReportAssetFramesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -16729,239 +16611,6 @@ def test_report_asset_frames_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["frames"] = { - "frames_data": [ - { - "machine_details": { - "uuid": "uuid_value", - "machine_name": "machine_name_value", - "create_time": {"seconds": 751, "nanos": 543}, - "core_count": 1073, - "memory_mb": 967, - "power_state": 1, - "architecture": { - "cpu_architecture": "cpu_architecture_value", - "cpu_name": "cpu_name_value", - "vendor": "vendor_value", - "cpu_thread_count": 1703, - "cpu_socket_count": 1720, - "bios": { - "bios_name": "bios_name_value", - "id": "id_value", - "manufacturer": "manufacturer_value", - "version": "version_value", - "release_date": {"year": 433, "month": 550, "day": 318}, - "smbios_uuid": "smbios_uuid_value", - }, - "firmware_type": 1, - "hyperthreading": 1, - }, - "guest_os": { - "os_name": "os_name_value", - "family": 1, - "version": "version_value", - "config": { - "issue": "issue_value", - "fstab": { - "entries": [ - { - "spec": "spec_value", - "file": "file_value", - "vfstype": "vfstype_value", - "mntops": "mntops_value", - "freq": 430, - "passno": 660, - } - ] - }, - "hosts": { - "entries": [ - { - "ip": "ip_value", - "host_names": [ - "host_names_value1", - "host_names_value2", - ], - } - ] - }, - "nfs_exports": { - "entries": [ - { - "export_directory": "export_directory_value", - "hosts": ["hosts_value1", "hosts_value2"], - } - ] - }, - "selinux_mode": 1, - }, - "runtime": { - "services": { - "entries": [ - { - "service_name": "service_name_value", - "state": 1, - "start_mode": 1, - "exe_path": "exe_path_value", - "cmdline": "cmdline_value", - "pid": 317, - } - ] - }, - "processes": { - "entries": [ - { - "pid": 317, - "exe_path": "exe_path_value", - "cmdline": "cmdline_value", - "user": "user_value", - "attributes": {}, - } - ] - }, - "network": { - "scan_time": {}, - "connections": { - "entries": [ - { - "protocol": "protocol_value", - "local_ip_address": "local_ip_address_value", - "local_port": 1071, - "remote_ip_address": "remote_ip_address_value", - "remote_port": 1200, - "state": 1, - "pid": 317, - "process_name": "process_name_value", - } - ] - }, - }, - "last_boot_time": {}, - "domain": "domain_value", - "machine_name": "machine_name_value", - "installed_apps": { - "entries": [ - { - "application_name": "application_name_value", - "vendor": "vendor_value", - "install_time": {}, - "path": "path_value", - "version": "version_value", - } - ] - }, - "open_file_list": { - "entries": [ - { - "command": "command_value", - "user": "user_value", - "file_type": "file_type_value", - "file_path": "file_path_value", - } - ] - }, - }, - }, - "network": { - "primary_ip_address": "primary_ip_address_value", - "public_ip_address": "public_ip_address_value", - "primary_mac_address": "primary_mac_address_value", - "adapters": { - "entries": [ - { - "adapter_type": "adapter_type_value", - "mac_address": "mac_address_value", - "addresses": { - "entries": [ - { - "ip_address": "ip_address_value", - "subnet_mask": "subnet_mask_value", - "bcast": "bcast_value", - "fqdn": "fqdn_value", - "assignment": 1, - } - ] - }, - } - ] - }, - }, - "disks": { - "total_capacity_bytes": 2135, - "total_free_bytes": 1707, - "disks": { - "entries": [ - { - "capacity_bytes": 1492, - "free_bytes": 1064, - "disk_label": "disk_label_value", - "disk_label_type": "disk_label_type_value", - "interface_type": 1, - "partitions": { - "entries": [ - { - "type_": "type__value", - "file_system": "file_system_value", - "mount_point": "mount_point_value", - "capacity_bytes": 1492, - "free_bytes": 1064, - "uuid": "uuid_value", - "sub_partitions": {}, - } - ] - }, - "hw_address": "hw_address_value", - "vmware": { - "backing_type": 1, - "shared": True, - "vmdk_mode": 1, - "rdm_compatibility": 1, - }, - } - ] - }, - }, - "platform": { - "vmware_details": { - "vcenter_version": "vcenter_version_value", - "esx_version": "esx_version_value", - "osid": "osid_value", - "vcenter_folder": "vcenter_folder_value", - "vcenter_uri": "vcenter_uri_value", - "vcenter_vm_id": "vcenter_vm_id_value", - }, - "aws_ec2_details": { - "machine_type_label": "machine_type_label_value", - "location": "location_value", - }, - "azure_vm_details": { - "machine_type_label": "machine_type_label_value", - "location": "location_value", - "provisioning_state": "provisioning_state_value", - }, - "generic_details": {"location": "location_value"}, - "physical_details": {"location": "location_value"}, - }, - }, - "report_time": {}, - "labels": {}, - "attributes": {}, - "performance_samples": [ - { - "sample_time": {}, - "memory": {"utilized_percentage": 0.2023}, - "cpu": {"utilized_percentage": 0.2023}, - "network": { - "average_ingress_bps": 0.20090000000000002, - "average_egress_bps": 0.1895, - }, - "disk": {"average_iops": 0.1269}, - } - ], - "trace_token": "trace_token_value", - } - ] - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -17007,8 +16656,9 @@ def test_aggregate_assets_values_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.AggregateAssetsValuesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.AggregateAssetsValuesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -17083,10 +16733,11 @@ def test_aggregate_assets_values_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.AggregateAssetsValuesResponse.pb( + # Convert return value to protobuf type + return_value = migrationcenter.AggregateAssetsValuesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -17246,6 +16897,73 @@ def test_create_import_job_rest(request_type): "total_rows_count": 1750, }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = migrationcenter.CreateImportJobRequest.meta.fields["import_job"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["import_job"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["import_job"][field])): + del request_init["import_job"][field][i][subfield] + else: + del request_init["import_job"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -17452,43 +17170,8 @@ def test_create_import_job_rest_bad_request( transport=transport, ) - # send a request that will satisfy transcoding - request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["import_job"] = { - "name": "name_value", - "display_name": "display_name_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "complete_time": {}, - "state": 1, - "labels": {}, - "asset_source": "asset_source_value", - "validation_report": { - "file_validations": [ - { - "file_name": "file_name_value", - "row_errors": [ - { - "row_number": 1088, - "vm_name": "vm_name_value", - "vm_uuid": "vm_uuid_value", - "errors": [ - {"error_details": "error_details_value", "severity": 1} - ], - } - ], - "partial_report": True, - "file_errors": {}, - } - ], - "job_errors": {}, - }, - "execution_report": { - "frames_reported": 1602, - "execution_errors": {}, - "total_rows_count": 1750, - }, - } + # send a request that will satisfy transcoding + request_init = {"parent": "projects/sample1/locations/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -17595,8 +17278,9 @@ def test_list_import_jobs_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListImportJobsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListImportJobsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -17682,8 +17366,9 @@ def test_list_import_jobs_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListImportJobsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListImportJobsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -17819,8 +17504,9 @@ def test_list_import_jobs_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListImportJobsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListImportJobsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -17944,8 +17630,9 @@ def test_get_import_job_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ImportJob.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ImportJob.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -18028,8 +17715,9 @@ def test_get_import_job_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ImportJob.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ImportJob.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -18156,8 +17844,9 @@ def test_get_import_job_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ImportJob.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ImportJob.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -18525,6 +18214,73 @@ def test_update_import_job_rest(request_type): "total_rows_count": 1750, }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = migrationcenter.UpdateImportJobRequest.meta.fields["import_job"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["import_job"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["import_job"][field])): + del request_init["import_job"][field][i][subfield] + else: + del request_init["import_job"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -18716,41 +18472,6 @@ def test_update_import_job_rest_bad_request( request_init = { "import_job": {"name": "projects/sample1/locations/sample2/importJobs/sample3"} } - request_init["import_job"] = { - "name": "projects/sample1/locations/sample2/importJobs/sample3", - "display_name": "display_name_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "complete_time": {}, - "state": 1, - "labels": {}, - "asset_source": "asset_source_value", - "validation_report": { - "file_validations": [ - { - "file_name": "file_name_value", - "row_errors": [ - { - "row_number": 1088, - "vm_name": "vm_name_value", - "vm_uuid": "vm_uuid_value", - "errors": [ - {"error_details": "error_details_value", "severity": 1} - ], - } - ], - "partial_report": True, - "file_errors": {}, - } - ], - "job_errors": {}, - }, - "execution_report": { - "frames_reported": 1602, - "execution_errors": {}, - "total_rows_count": 1750, - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -19396,8 +19117,9 @@ def test_get_import_data_file_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ImportDataFile.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ImportDataFile.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -19478,8 +19200,9 @@ def test_get_import_data_file_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ImportDataFile.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ImportDataFile.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -19608,8 +19331,9 @@ def test_get_import_data_file_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ImportDataFile.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ImportDataFile.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -19675,8 +19399,9 @@ def test_list_import_data_files_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListImportDataFilesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListImportDataFilesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -19761,10 +19486,9 @@ def test_list_import_data_files_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListImportDataFilesResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListImportDataFilesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -19901,8 +19625,9 @@ def test_list_import_data_files_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListImportDataFilesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListImportDataFilesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -20026,6 +19751,75 @@ def test_create_import_data_file_rest(request_type): "uri_expiration_time": {}, }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = migrationcenter.CreateImportDataFileRequest.meta.fields[ + "import_data_file" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["import_data_file"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["import_data_file"][field])): + del request_init["import_data_file"][field][i][subfield] + else: + del request_init["import_data_file"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -20234,18 +20028,6 @@ def test_create_import_data_file_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2/importJobs/sample3"} - request_init["import_data_file"] = { - "name": "name_value", - "display_name": "display_name_value", - "format_": 1, - "create_time": {"seconds": 751, "nanos": 543}, - "state": 1, - "upload_file_info": { - "signed_uri": "signed_uri_value", - "headers": {}, - "uri_expiration_time": {}, - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -20626,8 +20408,9 @@ def test_list_groups_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListGroupsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListGroupsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -20712,8 +20495,9 @@ def test_list_groups_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListGroupsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListGroupsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -20848,8 +20632,9 @@ def test_list_groups_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListGroupsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListGroupsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -20972,8 +20757,9 @@ def test_get_group_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Group.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Group.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -21048,8 +20834,9 @@ def test_get_group_rest_required_fields(request_type=migrationcenter.GetGroupReq response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Group.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Group.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -21174,8 +20961,9 @@ def test_get_group_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Group.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Group.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -21235,6 +21023,73 @@ def test_create_group_rest(request_type): "display_name": "display_name_value", "description": "description_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = migrationcenter.CreateGroupRequest.meta.fields["group"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["group"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["group"][field])): + del request_init["group"][field][i][subfield] + else: + del request_init["group"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -21443,14 +21298,6 @@ def test_create_group_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["group"] = { - "name": "name_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "display_name": "display_name_value", - "description": "description_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -21554,6 +21401,73 @@ def test_update_group_rest(request_type): "display_name": "display_name_value", "description": "description_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = migrationcenter.UpdateGroupRequest.meta.fields["group"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["group"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["group"][field])): + del request_init["group"][field][i][subfield] + else: + del request_init["group"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -21745,14 +21659,6 @@ def test_update_group_rest_bad_request( request_init = { "group": {"name": "projects/sample1/locations/sample2/groups/sample3"} } - request_init["group"] = { - "name": "projects/sample1/locations/sample2/groups/sample3", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "display_name": "display_name_value", - "description": "description_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -22668,8 +22574,9 @@ def test_list_error_frames_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListErrorFramesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListErrorFramesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -22753,8 +22660,9 @@ def test_list_error_frames_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListErrorFramesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListErrorFramesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -22890,8 +22798,9 @@ def test_list_error_frames_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListErrorFramesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListErrorFramesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -23017,8 +22926,9 @@ def test_get_error_frame_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ErrorFrame.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ErrorFrame.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -23095,8 +23005,9 @@ def test_get_error_frame_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ErrorFrame.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ErrorFrame.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -23225,8 +23136,9 @@ def test_get_error_frame_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ErrorFrame.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ErrorFrame.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -23292,8 +23204,9 @@ def test_list_sources_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListSourcesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -23378,8 +23291,9 @@ def test_list_sources_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListSourcesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -23514,8 +23428,9 @@ def test_list_sources_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListSourcesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -23644,8 +23559,9 @@ def test_get_source_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Source.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -23726,8 +23642,9 @@ def test_get_source_rest_required_fields(request_type=migrationcenter.GetSourceR response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Source.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -23852,8 +23769,9 @@ def test_get_source_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Source.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -23918,6 +23836,73 @@ def test_create_source_rest(request_type): "error_frame_count": 1820, "state": 1, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = migrationcenter.CreateSourceRequest.meta.fields["source"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["source"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["source"][field])): + del request_init["source"][field][i][subfield] + else: + del request_init["source"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -24126,19 +24111,6 @@ def test_create_source_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["source"] = { - "name": "name_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "display_name": "display_name_value", - "description": "description_value", - "type_": 1, - "priority": 898, - "managed": True, - "pending_frame_count": 2007, - "error_frame_count": 1820, - "state": 1, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -24247,6 +24219,73 @@ def test_update_source_rest(request_type): "error_frame_count": 1820, "state": 1, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = migrationcenter.UpdateSourceRequest.meta.fields["source"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["source"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["source"][field])): + del request_init["source"][field][i][subfield] + else: + del request_init["source"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -24438,19 +24477,6 @@ def test_update_source_rest_bad_request( request_init = { "source": {"name": "projects/sample1/locations/sample2/sources/sample3"} } - request_init["source"] = { - "name": "projects/sample1/locations/sample2/sources/sample3", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "display_name": "display_name_value", - "description": "description_value", - "type_": 1, - "priority": 898, - "managed": True, - "pending_frame_count": 2007, - "error_frame_count": 1820, - "state": 1, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -24822,8 +24848,9 @@ def test_list_preference_sets_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListPreferenceSetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListPreferenceSetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -24907,10 +24934,9 @@ def test_list_preference_sets_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListPreferenceSetsResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListPreferenceSetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -25044,8 +25070,9 @@ def test_list_preference_sets_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListPreferenceSetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListPreferenceSetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -25169,8 +25196,9 @@ def test_get_preference_set_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.PreferenceSet.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.PreferenceSet.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -25247,8 +25275,9 @@ def test_get_preference_set_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.PreferenceSet.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.PreferenceSet.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -25375,8 +25404,9 @@ def test_get_preference_set_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.PreferenceSet.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.PreferenceSet.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -25465,6 +25495,75 @@ def test_create_preference_set_rest(request_type): }, }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = migrationcenter.CreatePreferenceSetRequest.meta.fields[ + "preference_set" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["preference_set"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["preference_set"][field])): + del request_init["preference_set"][field][i][subfield] + else: + del request_init["preference_set"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -25639,76 +25738,40 @@ def test_create_preference_set_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson( - operations_pb2.Operation() - ) - - request = migrationcenter.CreatePreferenceSetRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = operations_pb2.Operation() - - client.create_preference_set( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], - ) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_preference_set_rest_bad_request( - transport: str = "rest", request_type=migrationcenter.CreatePreferenceSetRequest -): - client = MigrationCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["preference_set"] = { - "name": "name_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "display_name": "display_name_value", - "description": "description_value", - "virtual_machine_preferences": { - "target_product": 1, - "region_preferences": { - "preferred_regions": [ - "preferred_regions_value1", - "preferred_regions_value2", - ] - }, - "commitment_plan": 1, - "sizing_optimization_strategy": 1, - "compute_engine_preferences": { - "machine_preferences": { - "allowed_machine_series": [{"code": "code_value"}] - }, - "license_type": 1, - }, - "vmware_engine_preferences": { - "cpu_overcommit_ratio": 0.2154, - "memory_overcommit_ratio": 0.24910000000000002, - "storage_deduplication_compression_ratio": 0.4168, - "commitment_plan": 1, - }, - "sole_tenancy_preferences": { - "cpu_overcommit_ratio": 0.2154, - "host_maintenance_policy": 1, - "commitment_plan": 1, - "node_types": [{"node_name": "node_name_value"}], - }, - }, - } + req.return_value._content = json_format.MessageToJson( + operations_pb2.Operation() + ) + + request = migrationcenter.CreatePreferenceSetRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = operations_pb2.Operation() + + client.create_preference_set( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_preference_set_rest_bad_request( + transport: str = "rest", request_type=migrationcenter.CreatePreferenceSetRequest +): + client = MigrationCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "projects/sample1/locations/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -25843,6 +25906,75 @@ def test_update_preference_set_rest(request_type): }, }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = migrationcenter.UpdatePreferenceSetRequest.meta.fields[ + "preference_set" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["preference_set"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["preference_set"][field])): + del request_init["preference_set"][field][i][subfield] + else: + del request_init["preference_set"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -26036,42 +26168,6 @@ def test_update_preference_set_rest_bad_request( "name": "projects/sample1/locations/sample2/preferenceSets/sample3" } } - request_init["preference_set"] = { - "name": "projects/sample1/locations/sample2/preferenceSets/sample3", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "display_name": "display_name_value", - "description": "description_value", - "virtual_machine_preferences": { - "target_product": 1, - "region_preferences": { - "preferred_regions": [ - "preferred_regions_value1", - "preferred_regions_value2", - ] - }, - "commitment_plan": 1, - "sizing_optimization_strategy": 1, - "compute_engine_preferences": { - "machine_preferences": { - "allowed_machine_series": [{"code": "code_value"}] - }, - "license_type": 1, - }, - "vmware_engine_preferences": { - "cpu_overcommit_ratio": 0.2154, - "memory_overcommit_ratio": 0.24910000000000002, - "storage_deduplication_compression_ratio": 0.4168, - "commitment_plan": 1, - }, - "sole_tenancy_preferences": { - "cpu_overcommit_ratio": 0.2154, - "host_maintenance_policy": 1, - "commitment_plan": 1, - "node_types": [{"node_name": "node_name_value"}], - }, - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -26448,8 +26544,9 @@ def test_get_settings_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Settings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Settings.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -26525,8 +26622,9 @@ def test_get_settings_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Settings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Settings.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -26651,8 +26749,9 @@ def test_get_settings_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Settings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Settings.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -26708,6 +26807,73 @@ def test_update_settings_rest(request_type): "name": "projects/sample1/locations/sample2/settings", "preference_set": "preference_set_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = migrationcenter.UpdateSettingsRequest.meta.fields["settings"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["settings"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["settings"][field])): + del request_init["settings"][field][i][subfield] + else: + del request_init["settings"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -26897,10 +27063,6 @@ def test_update_settings_rest_bad_request( # send a request that will satisfy transcoding request_init = {"settings": {"name": "projects/sample1/locations/sample2/settings"}} - request_init["settings"] = { - "name": "projects/sample1/locations/sample2/settings", - "preference_set": "preference_set_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -27005,6 +27167,73 @@ def test_create_report_config_rest(request_type): {"group": "group_value", "preference_set": "preference_set_value"} ], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = migrationcenter.CreateReportConfigRequest.meta.fields["report_config"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["report_config"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["report_config"][field])): + del request_init["report_config"][field][i][subfield] + else: + del request_init["report_config"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -27213,16 +27442,6 @@ def test_create_report_config_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["report_config"] = { - "name": "name_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "display_name": "display_name_value", - "description": "description_value", - "group_preferenceset_assignments": [ - {"group": "group_value", "preference_set": "preference_set_value"} - ], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -27331,8 +27550,9 @@ def test_get_report_config_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ReportConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ReportConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -27409,8 +27629,9 @@ def test_get_report_config_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ReportConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ReportConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -27537,8 +27758,9 @@ def test_get_report_config_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ReportConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ReportConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -27604,8 +27826,9 @@ def test_list_report_configs_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListReportConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListReportConfigsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -27690,8 +27913,9 @@ def test_list_report_configs_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListReportConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListReportConfigsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -27826,8 +28050,9 @@ def test_list_report_configs_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListReportConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListReportConfigsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -28345,6 +28570,73 @@ def test_create_report_rest(request_type): ], }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = migrationcenter.CreateReportRequest.meta.fields["report"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["report"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["report"][field])): + del request_init["report"][field][i][subfield] + else: + del request_init["report"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -28555,132 +28847,6 @@ def test_create_report_rest_bad_request( request_init = { "parent": "projects/sample1/locations/sample2/reportConfigs/sample3" } - request_init["report"] = { - "name": "name_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "display_name": "display_name_value", - "description": "description_value", - "type_": 1, - "state": 1, - "summary": { - "all_assets_stats": { - "total_memory_bytes": 1954, - "total_storage_bytes": 2046, - "total_cores": 1183, - "total_assets": 1302, - "memory_utilization_chart": {"used": 433, "free": 418}, - "storage_utilization_chart": {}, - "operating_system": { - "data_points": [{"label": "label_value", "value": 0.541}] - }, - "core_count_histogram": { - "buckets": [ - {"lower_bound": 1184, "upper_bound": 1187, "count": 553} - ] - }, - "memory_bytes_histogram": {}, - "storage_bytes_histogram": {}, - }, - "group_findings": [ - { - "display_name": "display_name_value", - "description": "description_value", - "asset_aggregate_stats": {}, - "overlapping_asset_count": 2478, - "preference_set_findings": [ - { - "display_name": "display_name_value", - "description": "description_value", - "machine_preferences": { - "target_product": 1, - "region_preferences": { - "preferred_regions": [ - "preferred_regions_value1", - "preferred_regions_value2", - ] - }, - "commitment_plan": 1, - "sizing_optimization_strategy": 1, - "compute_engine_preferences": { - "machine_preferences": { - "allowed_machine_series": [ - {"code": "code_value"} - ] - }, - "license_type": 1, - }, - "vmware_engine_preferences": { - "cpu_overcommit_ratio": 0.2154, - "memory_overcommit_ratio": 0.24910000000000002, - "storage_deduplication_compression_ratio": 0.4168, - "commitment_plan": 1, - }, - "sole_tenancy_preferences": { - "cpu_overcommit_ratio": 0.2154, - "host_maintenance_policy": 1, - "commitment_plan": 1, - "node_types": [{"node_name": "node_name_value"}], - }, - }, - "monthly_cost_total": { - "currency_code": "currency_code_value", - "units": 563, - "nanos": 543, - }, - "monthly_cost_compute": {}, - "monthly_cost_os_license": {}, - "monthly_cost_network_egress": {}, - "monthly_cost_storage": {}, - "monthly_cost_other": {}, - "compute_engine_finding": { - "allocated_regions": [ - "allocated_regions_value1", - "allocated_regions_value2", - ], - "allocated_asset_count": 2224, - "machine_series_allocations": [ - { - "machine_series": {}, - "allocated_asset_count": 2224, - } - ], - "allocated_disk_types": [1], - }, - "vmware_engine_finding": { - "allocated_regions": [ - "allocated_regions_value1", - "allocated_regions_value2", - ], - "allocated_asset_count": 2224, - "node_allocations": [ - { - "vmware_node": {"code": "code_value"}, - "node_count": 1070, - "allocated_asset_count": 2224, - } - ], - }, - "sole_tenant_finding": { - "allocated_regions": [ - "allocated_regions_value1", - "allocated_regions_value2", - ], - "allocated_asset_count": 2224, - "node_allocations": [ - { - "node": {}, - "node_count": 1070, - "allocated_asset_count": 2224, - } - ], - }, - } - ], - } - ], - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -28795,8 +28961,9 @@ def test_get_report_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Report.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Report.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -28875,8 +29042,9 @@ def test_get_report_rest_required_fields(request_type=migrationcenter.GetReportR response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Report.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Report.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -29005,8 +29173,9 @@ def test_get_report_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.Report.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.Report.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -29074,8 +29243,9 @@ def test_list_reports_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListReportsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListReportsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -29161,8 +29331,9 @@ def test_list_reports_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListReportsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListReportsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -29302,8 +29473,9 @@ def test_list_reports_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = migrationcenter.ListReportsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = migrationcenter.ListReportsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value diff --git a/packages/google-cloud-netapp/CONTRIBUTING.rst b/packages/google-cloud-netapp/CONTRIBUTING.rst index f2d08d655303..7ae8cefb2cb7 100644 --- a/packages/google-cloud-netapp/CONTRIBUTING.rst +++ b/packages/google-cloud-netapp/CONTRIBUTING.rst @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system- -- -k + $ nox -s system-3.11 -- -k .. note:: - System tests are only configured to run under Python. + System tests are only configured to run under Python 3.8, 3.9, 3.10 and 3.11. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-netapp/google/cloud/netapp/gapic_version.py b/packages/google-cloud-netapp/google/cloud/netapp/gapic_version.py index 5c99b56d549d..360a0d13ebdd 100644 --- a/packages/google-cloud-netapp/google/cloud/netapp/gapic_version.py +++ b/packages/google-cloud-netapp/google/cloud/netapp/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.3.1" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-netapp/google/cloud/netapp_v1/gapic_version.py b/packages/google-cloud-netapp/google/cloud/netapp_v1/gapic_version.py index 5c99b56d549d..360a0d13ebdd 100644 --- a/packages/google-cloud-netapp/google/cloud/netapp_v1/gapic_version.py +++ b/packages/google-cloud-netapp/google/cloud/netapp_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.3.1" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-netapp/noxfile.py b/packages/google-cloud-netapp/noxfile.py index 9a2acd8b6787..be54712bfa8f 100644 --- a/packages/google-cloud-netapp/noxfile.py +++ b/packages/google-cloud-netapp/noxfile.py @@ -46,7 +46,7 @@ UNIT_TEST_EXTRAS = [] UNIT_TEST_EXTRAS_BY_PYTHON = {} -SYSTEM_TEST_PYTHON_VERSIONS = [] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11"] SYSTEM_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", @@ -405,24 +405,3 @@ def prerelease_deps(session): session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") - - system_test_path = os.path.join("tests", "system.py") - system_test_folder_path = os.path.join("tests", "system") - - # Only run system tests if found. - if os.path.exists(system_test_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_path, - *session.posargs, - ) - if os.path.exists(system_test_folder_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_folder_path, - *session.posargs, - ) diff --git a/packages/google-cloud-netapp/samples/generated_samples/snippet_metadata_google.cloud.netapp.v1.json b/packages/google-cloud-netapp/samples/generated_samples/snippet_metadata_google.cloud.netapp.v1.json index b39dbd6fd8d8..ce7f517963cb 100644 --- a/packages/google-cloud-netapp/samples/generated_samples/snippet_metadata_google.cloud.netapp.v1.json +++ b/packages/google-cloud-netapp/samples/generated_samples/snippet_metadata_google.cloud.netapp.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-netapp", - "version": "0.3.1" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-netapp/tests/unit/gapic/netapp_v1/test_net_app.py b/packages/google-cloud-netapp/tests/unit/gapic/netapp_v1/test_net_app.py index d2625d1bea3c..7fcc9b6b2232 100644 --- a/packages/google-cloud-netapp/tests/unit/gapic/netapp_v1/test_net_app.py +++ b/packages/google-cloud-netapp/tests/unit/gapic/netapp_v1/test_net_app.py @@ -10363,8 +10363,9 @@ def test_list_storage_pools_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = storage_pool.ListStoragePoolsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = storage_pool.ListStoragePoolsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10449,8 +10450,9 @@ def test_list_storage_pools_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = storage_pool.ListStoragePoolsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = storage_pool.ListStoragePoolsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10583,8 +10585,9 @@ def test_list_storage_pools_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = storage_pool.ListStoragePoolsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = storage_pool.ListStoragePoolsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -10713,6 +10716,73 @@ def test_create_storage_pool_rest(request_type): "encryption_type": 1, "global_access_allowed": True, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_storage_pool.CreateStoragePoolRequest.meta.fields["storage_pool"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["storage_pool"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["storage_pool"][field])): + del request_init["storage_pool"][field][i][subfield] + else: + del request_init["storage_pool"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -10909,25 +10979,6 @@ def test_create_storage_pool_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["storage_pool"] = { - "name": "name_value", - "service_level": 1, - "capacity_gib": 1247, - "volume_capacity_gib": 2006, - "volume_count": 1312, - "state": 1, - "state_details": "state_details_value", - "create_time": {"seconds": 751, "nanos": 543}, - "description": "description_value", - "labels": {}, - "network": "network_value", - "active_directory": "active_directory_value", - "kms_config": "kms_config_value", - "ldap_enabled": True, - "psa_range": "psa_range_value", - "encryption_type": 1, - "global_access_allowed": True, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -11048,8 +11099,9 @@ def test_get_storage_pool_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = storage_pool.StoragePool.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = storage_pool.StoragePool.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -11138,8 +11190,9 @@ def test_get_storage_pool_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = storage_pool.StoragePool.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = storage_pool.StoragePool.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -11264,8 +11317,9 @@ def test_get_storage_pool_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = storage_pool.StoragePool.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = storage_pool.StoragePool.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -11341,6 +11395,73 @@ def test_update_storage_pool_rest(request_type): "encryption_type": 1, "global_access_allowed": True, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_storage_pool.UpdateStoragePoolRequest.meta.fields["storage_pool"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["storage_pool"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["storage_pool"][field])): + del request_init["storage_pool"][field][i][subfield] + else: + del request_init["storage_pool"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -11522,25 +11643,6 @@ def test_update_storage_pool_rest_bad_request( "name": "projects/sample1/locations/sample2/storagePools/sample3" } } - request_init["storage_pool"] = { - "name": "projects/sample1/locations/sample2/storagePools/sample3", - "service_level": 1, - "capacity_gib": 1247, - "volume_capacity_gib": 2006, - "volume_count": 1312, - "state": 1, - "state_details": "state_details_value", - "create_time": {"seconds": 751, "nanos": 543}, - "description": "description_value", - "labels": {}, - "network": "network_value", - "active_directory": "active_directory_value", - "kms_config": "kms_config_value", - "ldap_enabled": True, - "psa_range": "psa_range_value", - "encryption_type": 1, - "global_access_allowed": True, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -11913,8 +12015,9 @@ def test_list_volumes_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = volume.ListVolumesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = volume.ListVolumesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -11997,8 +12100,9 @@ def test_list_volumes_rest_required_fields(request_type=volume.ListVolumesReques response_value = Response() response_value.status_code = 200 - pb_return_value = volume.ListVolumesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = volume.ListVolumesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12129,8 +12233,9 @@ def test_list_volumes_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = volume.ListVolumesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = volume.ListVolumesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12272,8 +12377,9 @@ def test_get_volume_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = volume.Volume.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = volume.Volume.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12369,8 +12475,9 @@ def test_get_volume_rest_required_fields(request_type=volume.GetVolumeRequest): response_value = Response() response_value.status_code = 200 - pb_return_value = volume.Volume.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = volume.Volume.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12489,8 +12596,9 @@ def test_get_volume_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = volume.Volume.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = volume.Volume.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12620,6 +12728,73 @@ def test_create_volume_rest(request_type): "has_replication": True, "restricted_actions": [1], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_volume.CreateVolumeRequest.meta.fields["volume"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["volume"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["volume"][field])): + del request_init["volume"][field][i][subfield] + else: + del request_init["volume"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -12814,84 +12989,6 @@ def test_create_volume_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["volume"] = { - "name": "name_value", - "state": 1, - "state_details": "state_details_value", - "create_time": {"seconds": 751, "nanos": 543}, - "share_name": "share_name_value", - "psa_range": "psa_range_value", - "storage_pool": "storage_pool_value", - "network": "network_value", - "service_level": 1, - "capacity_gib": 1247, - "export_policy": { - "rules": [ - { - "allowed_clients": "allowed_clients_value", - "has_root_access": "has_root_access_value", - "access_type": 1, - "nfsv3": True, - "nfsv4": True, - "kerberos_5_read_only": True, - "kerberos_5_read_write": True, - "kerberos_5i_read_only": True, - "kerberos_5i_read_write": True, - "kerberos_5p_read_only": True, - "kerberos_5p_read_write": True, - } - ] - }, - "protocols": [1], - "smb_settings": [1], - "mount_options": [ - { - "export": "export_value", - "export_full": "export_full_value", - "protocol": 1, - "instructions": "instructions_value", - } - ], - "unix_permissions": "unix_permissions_value", - "labels": {}, - "description": "description_value", - "snapshot_policy": { - "enabled": True, - "hourly_schedule": { - "snapshots_to_keep": 0.18330000000000002, - "minute": 0.658, - }, - "daily_schedule": { - "snapshots_to_keep": 0.18330000000000002, - "minute": 0.658, - "hour": 0.446, - }, - "weekly_schedule": { - "snapshots_to_keep": 0.18330000000000002, - "minute": 0.658, - "hour": 0.446, - "day": "day_value", - }, - "monthly_schedule": { - "snapshots_to_keep": 0.18330000000000002, - "minute": 0.658, - "hour": 0.446, - "days_of_month": "days_of_month_value", - }, - }, - "snap_reserve": 0.1293, - "snapshot_directory": True, - "used_gib": 834, - "security_style": 1, - "kerberos_enabled": True, - "ldap_enabled": True, - "active_directory": "active_directory_value", - "restore_parameters": {"source_snapshot": "source_snapshot_value"}, - "kms_config": "kms_config_value", - "encryption_type": 1, - "has_replication": True, - "restricted_actions": [1], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -13065,6 +13162,73 @@ def test_update_volume_rest(request_type): "has_replication": True, "restricted_actions": [1], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_volume.UpdateVolumeRequest.meta.fields["volume"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["volume"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["volume"][field])): + del request_init["volume"][field][i][subfield] + else: + del request_init["volume"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -13242,84 +13406,6 @@ def test_update_volume_rest_bad_request( request_init = { "volume": {"name": "projects/sample1/locations/sample2/volumes/sample3"} } - request_init["volume"] = { - "name": "projects/sample1/locations/sample2/volumes/sample3", - "state": 1, - "state_details": "state_details_value", - "create_time": {"seconds": 751, "nanos": 543}, - "share_name": "share_name_value", - "psa_range": "psa_range_value", - "storage_pool": "storage_pool_value", - "network": "network_value", - "service_level": 1, - "capacity_gib": 1247, - "export_policy": { - "rules": [ - { - "allowed_clients": "allowed_clients_value", - "has_root_access": "has_root_access_value", - "access_type": 1, - "nfsv3": True, - "nfsv4": True, - "kerberos_5_read_only": True, - "kerberos_5_read_write": True, - "kerberos_5i_read_only": True, - "kerberos_5i_read_write": True, - "kerberos_5p_read_only": True, - "kerberos_5p_read_write": True, - } - ] - }, - "protocols": [1], - "smb_settings": [1], - "mount_options": [ - { - "export": "export_value", - "export_full": "export_full_value", - "protocol": 1, - "instructions": "instructions_value", - } - ], - "unix_permissions": "unix_permissions_value", - "labels": {}, - "description": "description_value", - "snapshot_policy": { - "enabled": True, - "hourly_schedule": { - "snapshots_to_keep": 0.18330000000000002, - "minute": 0.658, - }, - "daily_schedule": { - "snapshots_to_keep": 0.18330000000000002, - "minute": 0.658, - "hour": 0.446, - }, - "weekly_schedule": { - "snapshots_to_keep": 0.18330000000000002, - "minute": 0.658, - "hour": 0.446, - "day": "day_value", - }, - "monthly_schedule": { - "snapshots_to_keep": 0.18330000000000002, - "minute": 0.658, - "hour": 0.446, - "days_of_month": "days_of_month_value", - }, - }, - "snap_reserve": 0.1293, - "snapshot_directory": True, - "used_gib": 834, - "security_style": 1, - "kerberos_enabled": True, - "ldap_enabled": True, - "active_directory": "active_directory_value", - "restore_parameters": {"source_snapshot": "source_snapshot_value"}, - "kms_config": "kms_config_value", - "encryption_type": 1, - "has_replication": True, - "restricted_actions": [1], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -13900,8 +13986,9 @@ def test_list_snapshots_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = snapshot.ListSnapshotsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = snapshot.ListSnapshotsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -13986,8 +14073,9 @@ def test_list_snapshots_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = snapshot.ListSnapshotsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = snapshot.ListSnapshotsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14120,8 +14208,9 @@ def test_list_snapshots_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = snapshot.ListSnapshotsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = snapshot.ListSnapshotsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14249,8 +14338,9 @@ def test_get_snapshot_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = snapshot.Snapshot.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = snapshot.Snapshot.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14327,8 +14417,9 @@ def test_get_snapshot_rest_required_fields(request_type=snapshot.GetSnapshotRequ response_value = Response() response_value.status_code = 200 - pb_return_value = snapshot.Snapshot.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = snapshot.Snapshot.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14451,8 +14542,9 @@ def test_get_snapshot_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = snapshot.Snapshot.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = snapshot.Snapshot.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14514,6 +14606,73 @@ def test_create_snapshot_rest(request_type): "create_time": {"seconds": 751, "nanos": 543}, "labels": {}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_snapshot.CreateSnapshotRequest.meta.fields["snapshot"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["snapshot"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["snapshot"][field])): + del request_init["snapshot"][field][i][subfield] + else: + del request_init["snapshot"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -14710,15 +14869,6 @@ def test_create_snapshot_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2/volumes/sample3"} - request_init["snapshot"] = { - "name": "name_value", - "state": 1, - "state_details": "state_details_value", - "description": "description_value", - "used_bytes": 0.10790000000000001, - "create_time": {"seconds": 751, "nanos": 543}, - "labels": {}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -15093,6 +15243,73 @@ def test_update_snapshot_rest(request_type): "create_time": {"seconds": 751, "nanos": 543}, "labels": {}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_snapshot.UpdateSnapshotRequest.meta.fields["snapshot"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["snapshot"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["snapshot"][field])): + del request_init["snapshot"][field][i][subfield] + else: + del request_init["snapshot"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -15274,15 +15491,6 @@ def test_update_snapshot_rest_bad_request( "name": "projects/sample1/locations/sample2/volumes/sample3/snapshots/sample4" } } - request_init["snapshot"] = { - "name": "projects/sample1/locations/sample2/volumes/sample3/snapshots/sample4", - "state": 1, - "state_details": "state_details_value", - "description": "description_value", - "used_bytes": 0.10790000000000001, - "create_time": {"seconds": 751, "nanos": 543}, - "labels": {}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -15392,10 +15600,9 @@ def test_list_active_directories_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = active_directory.ListActiveDirectoriesResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = active_directory.ListActiveDirectoriesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15480,10 +15687,11 @@ def test_list_active_directories_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = active_directory.ListActiveDirectoriesResponse.pb( + # Convert return value to protobuf type + return_value = active_directory.ListActiveDirectoriesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15618,10 +15826,9 @@ def test_list_active_directories_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = active_directory.ListActiveDirectoriesResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = active_directory.ListActiveDirectoriesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15763,8 +15970,9 @@ def test_get_active_directory_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = active_directory.ActiveDirectory.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = active_directory.ActiveDirectory.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15857,8 +16065,9 @@ def test_get_active_directory_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = active_directory.ActiveDirectory.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = active_directory.ActiveDirectory.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15985,8 +16194,9 @@ def test_get_active_directory_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = active_directory.ActiveDirectory.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = active_directory.ActiveDirectory.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -16065,6 +16275,75 @@ def test_create_active_directory_rest(request_type): "labels": {}, "state_details": "state_details_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_active_directory.CreateActiveDirectoryRequest.meta.fields[ + "active_directory" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["active_directory"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["active_directory"][field])): + del request_init["active_directory"][field][i][subfield] + else: + del request_init["active_directory"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -16262,32 +16541,6 @@ def test_create_active_directory_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["active_directory"] = { - "name": "name_value", - "create_time": {"seconds": 751, "nanos": 543}, - "state": 1, - "domain": "domain_value", - "site": "site_value", - "dns": "dns_value", - "net_bios_prefix": "net_bios_prefix_value", - "organizational_unit": "organizational_unit_value", - "aes_encryption": True, - "username": "username_value", - "password": "password_value", - "backup_operators": ["backup_operators_value1", "backup_operators_value2"], - "security_operators": [ - "security_operators_value1", - "security_operators_value2", - ], - "kdc_hostname": "kdc_hostname_value", - "kdc_ip": "kdc_ip_value", - "nfs_users_with_ldap": True, - "description": "description_value", - "ldap_signing": True, - "encrypt_dc_connections": True, - "labels": {}, - "state_details": "state_details_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -16412,6 +16665,75 @@ def test_update_active_directory_rest(request_type): "labels": {}, "state_details": "state_details_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_active_directory.UpdateActiveDirectoryRequest.meta.fields[ + "active_directory" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["active_directory"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["active_directory"][field])): + del request_init["active_directory"][field][i][subfield] + else: + del request_init["active_directory"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -16594,32 +16916,6 @@ def test_update_active_directory_rest_bad_request( "name": "projects/sample1/locations/sample2/activeDirectories/sample3" } } - request_init["active_directory"] = { - "name": "projects/sample1/locations/sample2/activeDirectories/sample3", - "create_time": {"seconds": 751, "nanos": 543}, - "state": 1, - "domain": "domain_value", - "site": "site_value", - "dns": "dns_value", - "net_bios_prefix": "net_bios_prefix_value", - "organizational_unit": "organizational_unit_value", - "aes_encryption": True, - "username": "username_value", - "password": "password_value", - "backup_operators": ["backup_operators_value1", "backup_operators_value2"], - "security_operators": [ - "security_operators_value1", - "security_operators_value2", - ], - "kdc_hostname": "kdc_hostname_value", - "kdc_ip": "kdc_ip_value", - "nfs_users_with_ldap": True, - "description": "description_value", - "ldap_signing": True, - "encrypt_dc_connections": True, - "labels": {}, - "state_details": "state_details_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -16996,8 +17292,9 @@ def test_list_kms_configs_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = kms.ListKmsConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = kms.ListKmsConfigsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -17080,8 +17377,9 @@ def test_list_kms_configs_rest_required_fields(request_type=kms.ListKmsConfigsRe response_value = Response() response_value.status_code = 200 - pb_return_value = kms.ListKmsConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = kms.ListKmsConfigsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -17212,8 +17510,9 @@ def test_list_kms_configs_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = kms.ListKmsConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = kms.ListKmsConfigsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -17331,6 +17630,73 @@ def test_create_kms_config_rest(request_type): "instructions": "instructions_value", "service_account": "service_account_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = kms.CreateKmsConfigRequest.meta.fields["kms_config"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["kms_config"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["kms_config"][field])): + del request_init["kms_config"][field][i][subfield] + else: + del request_init["kms_config"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -17525,17 +17891,6 @@ def test_create_kms_config_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["kms_config"] = { - "name": "name_value", - "crypto_key_name": "crypto_key_name_value", - "state": 1, - "state_details": "state_details_value", - "create_time": {"seconds": 751, "nanos": 543}, - "description": "description_value", - "labels": {}, - "instructions": "instructions_value", - "service_account": "service_account_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -17647,8 +18002,9 @@ def test_get_kms_config_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = kms.KmsConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = kms.KmsConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -17727,8 +18083,9 @@ def test_get_kms_config_rest_required_fields(request_type=kms.GetKmsConfigReques response_value = Response() response_value.status_code = 200 - pb_return_value = kms.KmsConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = kms.KmsConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -17849,8 +18206,9 @@ def test_get_kms_config_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = kms.KmsConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = kms.KmsConfig.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -17915,6 +18273,73 @@ def test_update_kms_config_rest(request_type): "instructions": "instructions_value", "service_account": "service_account_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = kms.UpdateKmsConfigRequest.meta.fields["kms_config"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["kms_config"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["kms_config"][field])): + del request_init["kms_config"][field][i][subfield] + else: + del request_init["kms_config"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -18092,17 +18517,6 @@ def test_update_kms_config_rest_bad_request( request_init = { "kms_config": {"name": "projects/sample1/locations/sample2/kmsConfigs/sample3"} } - request_init["kms_config"] = { - "name": "projects/sample1/locations/sample2/kmsConfigs/sample3", - "crypto_key_name": "crypto_key_name_value", - "state": 1, - "state_details": "state_details_value", - "create_time": {"seconds": 751, "nanos": 543}, - "description": "description_value", - "labels": {}, - "instructions": "instructions_value", - "service_account": "service_account_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -18416,8 +18830,9 @@ def test_verify_kms_config_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = kms.VerifyKmsConfigResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = kms.VerifyKmsConfigResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -18495,8 +18910,9 @@ def test_verify_kms_config_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = kms.VerifyKmsConfigResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = kms.VerifyKmsConfigResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -18888,8 +19304,9 @@ def test_list_replications_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = replication.ListReplicationsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = replication.ListReplicationsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -18974,8 +19391,9 @@ def test_list_replications_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = replication.ListReplicationsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = replication.ListReplicationsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -19110,8 +19528,9 @@ def test_list_replications_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = replication.ListReplicationsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = replication.ListReplicationsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -19246,8 +19665,9 @@ def test_get_replication_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = replication.Replication.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = replication.Replication.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -19334,8 +19754,9 @@ def test_get_replication_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = replication.Replication.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = replication.Replication.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -19462,8 +19883,9 @@ def test_get_replication_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = replication.Replication.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = replication.Replication.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -19546,6 +19968,73 @@ def test_create_replication_rest(request_type): }, "source_volume": "source_volume_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_replication.CreateReplicationRequest.meta.fields["replication"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["replication"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["replication"][field])): + del request_init["replication"][field][i][subfield] + else: + del request_init["replication"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -19742,36 +20231,6 @@ def test_create_replication_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2/volumes/sample3"} - request_init["replication"] = { - "name": "name_value", - "state": 1, - "state_details": "state_details_value", - "role": 1, - "replication_schedule": 1, - "mirror_state": 1, - "healthy": True, - "create_time": {"seconds": 751, "nanos": 543}, - "destination_volume": "destination_volume_value", - "transfer_stats": { - "transfer_bytes": 1515, - "total_transfer_duration": {"seconds": 751, "nanos": 543}, - "last_transfer_bytes": 2046, - "last_transfer_duration": {}, - "lag_duration": {}, - "update_time": {}, - "last_transfer_end_time": {}, - "last_transfer_error": "last_transfer_error_value", - }, - "labels": {}, - "description": "description_value", - "destination_volume_parameters": { - "storage_pool": "storage_pool_value", - "volume_id": "volume_id_value", - "share_name": "share_name_value", - "description": "description_value", - }, - "source_volume": "source_volume_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -20169,6 +20628,73 @@ def test_update_replication_rest(request_type): }, "source_volume": "source_volume_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_replication.UpdateReplicationRequest.meta.fields["replication"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["replication"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["replication"][field])): + del request_init["replication"][field][i][subfield] + else: + del request_init["replication"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -20350,36 +20876,6 @@ def test_update_replication_rest_bad_request( "name": "projects/sample1/locations/sample2/volumes/sample3/replications/sample4" } } - request_init["replication"] = { - "name": "projects/sample1/locations/sample2/volumes/sample3/replications/sample4", - "state": 1, - "state_details": "state_details_value", - "role": 1, - "replication_schedule": 1, - "mirror_state": 1, - "healthy": True, - "create_time": {"seconds": 751, "nanos": 543}, - "destination_volume": "destination_volume_value", - "transfer_stats": { - "transfer_bytes": 1515, - "total_transfer_duration": {"seconds": 751, "nanos": 543}, - "last_transfer_bytes": 2046, - "last_transfer_duration": {}, - "lag_duration": {}, - "update_time": {}, - "last_transfer_end_time": {}, - "last_transfer_error": "last_transfer_error_value", - }, - "labels": {}, - "description": "description_value", - "destination_volume_parameters": { - "storage_pool": "storage_pool_value", - "volume_id": "volume_id_value", - "share_name": "share_name_value", - "description": "description_value", - }, - "source_volume": "source_volume_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. diff --git a/packages/google-cloud-network-management/CONTRIBUTING.rst b/packages/google-cloud-network-management/CONTRIBUTING.rst index 2b6b52708693..0b7bcbe54152 100644 --- a/packages/google-cloud-network-management/CONTRIBUTING.rst +++ b/packages/google-cloud-network-management/CONTRIBUTING.rst @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system- -- -k + $ nox -s system-3.11 -- -k .. note:: - System tests are only configured to run under Python. + System tests are only configured to run under Python 3.8, 3.9, 3.10 and 3.11. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-network-management/google/cloud/network_management/gapic_version.py b/packages/google-cloud-network-management/google/cloud/network_management/gapic_version.py index e03808f0e56f..360a0d13ebdd 100644 --- a/packages/google-cloud-network-management/google/cloud/network_management/gapic_version.py +++ b/packages/google-cloud-network-management/google/cloud/network_management/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.11.1" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-network-management/google/cloud/network_management_v1/gapic_version.py b/packages/google-cloud-network-management/google/cloud/network_management_v1/gapic_version.py index e03808f0e56f..360a0d13ebdd 100644 --- a/packages/google-cloud-network-management/google/cloud/network_management_v1/gapic_version.py +++ b/packages/google-cloud-network-management/google/cloud/network_management_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.11.1" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-network-management/noxfile.py b/packages/google-cloud-network-management/noxfile.py index 9a2acd8b6787..be54712bfa8f 100644 --- a/packages/google-cloud-network-management/noxfile.py +++ b/packages/google-cloud-network-management/noxfile.py @@ -46,7 +46,7 @@ UNIT_TEST_EXTRAS = [] UNIT_TEST_EXTRAS_BY_PYTHON = {} -SYSTEM_TEST_PYTHON_VERSIONS = [] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11"] SYSTEM_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", @@ -405,24 +405,3 @@ def prerelease_deps(session): session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") - - system_test_path = os.path.join("tests", "system.py") - system_test_folder_path = os.path.join("tests", "system") - - # Only run system tests if found. - if os.path.exists(system_test_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_path, - *session.posargs, - ) - if os.path.exists(system_test_folder_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_folder_path, - *session.posargs, - ) diff --git a/packages/google-cloud-network-management/samples/generated_samples/snippet_metadata_google.cloud.networkmanagement.v1.json b/packages/google-cloud-network-management/samples/generated_samples/snippet_metadata_google.cloud.networkmanagement.v1.json index db097e98adcc..21f45711959c 100644 --- a/packages/google-cloud-network-management/samples/generated_samples/snippet_metadata_google.cloud.networkmanagement.v1.json +++ b/packages/google-cloud-network-management/samples/generated_samples/snippet_metadata_google.cloud.networkmanagement.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-network-management", - "version": "1.11.1" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-network-management/tests/unit/gapic/network_management_v1/test_reachability_service.py b/packages/google-cloud-network-management/tests/unit/gapic/network_management_v1/test_reachability_service.py index 4ff848f13d13..56181d3c7ec9 100644 --- a/packages/google-cloud-network-management/tests/unit/gapic/network_management_v1/test_reachability_service.py +++ b/packages/google-cloud-network-management/tests/unit/gapic/network_management_v1/test_reachability_service.py @@ -2415,8 +2415,9 @@ def test_list_connectivity_tests_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = reachability.ListConnectivityTestsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = reachability.ListConnectivityTestsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2501,10 +2502,9 @@ def test_list_connectivity_tests_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = reachability.ListConnectivityTestsResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = reachability.ListConnectivityTestsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2639,8 +2639,9 @@ def test_list_connectivity_tests_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = reachability.ListConnectivityTestsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = reachability.ListConnectivityTestsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2768,8 +2769,9 @@ def test_get_connectivity_test_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = connectivity_test.ConnectivityTest.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = connectivity_test.ConnectivityTest.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2848,8 +2850,9 @@ def test_get_connectivity_test_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = connectivity_test.ConnectivityTest.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = connectivity_test.ConnectivityTest.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -2978,8 +2981,9 @@ def test_get_connectivity_test_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = connectivity_test.ConnectivityTest.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = connectivity_test.ConnectivityTest.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3282,6 +3286,73 @@ def test_create_connectivity_test_rest(request_type): }, }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = reachability.CreateConnectivityTestRequest.meta.fields["resource"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["resource"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["resource"][field])): + del request_init["resource"][field][i][subfield] + else: + del request_init["resource"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -3480,8 +3551,106 @@ def test_create_connectivity_test_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/global"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_connectivity_test(request) + + +def test_create_connectivity_test_rest_flattened(): + client = ReachabilityServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name="operations/spam") + + # get arguments that satisfy an http rule for this method + sample_request = {"parent": "projects/sample1/locations/global"} + + # get truthy value for each flattened field + mock_args = dict( + parent="parent_value", + test_id="test_id_value", + resource=connectivity_test.ConnectivityTest(name="name_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.create_connectivity_test(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{parent=projects/*/locations/global}/connectivityTests" + % client.transport._host, + args[1], + ) + + +def test_create_connectivity_test_rest_flattened_error(transport: str = "rest"): + client = ReachabilityServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_connectivity_test( + reachability.CreateConnectivityTestRequest(), + parent="parent_value", + test_id="test_id_value", + resource=connectivity_test.ConnectivityTest(name="name_value"), + ) + + +def test_create_connectivity_test_rest_error(): + client = ReachabilityServiceClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + reachability.UpdateConnectivityTestRequest, + dict, + ], +) +def test_update_connectivity_test_rest(request_type): + client = ReachabilityServiceClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "resource": { + "name": "projects/sample1/locations/global/connectivityTests/sample2" + } + } request_init["resource"] = { - "name": "name_value", + "name": "projects/sample1/locations/global/connectivityTests/sample2", "description": "description_value", "source": { "ip_address": "ip_address_value", @@ -3730,413 +3899,132 @@ def test_create_connectivity_test_rest_bad_request( }, }, } - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_connectivity_test(request) + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = reachability.UpdateConnectivityTestRequest.meta.fields["resource"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["resource"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) -def test_create_connectivity_test_rest_flattened(): - client = ReachabilityServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["resource"][field])): + del request_init["resource"][field][i][subfield] + else: + del request_init["resource"][field][subfield] + request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. return_value = operations_pb2.Operation(name="operations/spam") - # get arguments that satisfy an http rule for this method - sample_request = {"parent": "projects/sample1/locations/global"} - - # get truthy value for each flattened field - mock_args = dict( - parent="parent_value", - test_id="test_id_value", - resource=connectivity_test.ConnectivityTest(name="name_value"), - ) - mock_args.update(sample_request) - # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 json_return_value = json_format.MessageToJson(return_value) + response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value + response = client.update_connectivity_test(request) - client.create_connectivity_test(**mock_args) + # Establish that the response is the type that we expect. + assert response.operation.name == "operations/spam" - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate( - "%s/v1/{parent=projects/*/locations/global}/connectivityTests" - % client.transport._host, - args[1], - ) +def test_update_connectivity_test_rest_required_fields( + request_type=reachability.UpdateConnectivityTestRequest, +): + transport_class = transports.ReachabilityServiceRestTransport -def test_create_connectivity_test_rest_flattened_error(transport: str = "rest"): - client = ReachabilityServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) ) - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_connectivity_test( - reachability.CreateConnectivityTestRequest(), - parent="parent_value", - test_id="test_id_value", - resource=connectivity_test.ConnectivityTest(name="name_value"), - ) + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).update_connectivity_test._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + # verify required fields with default values are now present -def test_create_connectivity_test_rest_error(): - client = ReachabilityServiceClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).update_connectivity_test._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask",)) + jsonified_request.update(unset_fields) + # verify required fields with non-default values are left alone -@pytest.mark.parametrize( - "request_type", - [ - reachability.UpdateConnectivityTestRequest, - dict, - ], -) -def test_update_connectivity_test_rest(request_type): client = ReachabilityServiceClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) - - # send a request that will satisfy transcoding - request_init = { - "resource": { - "name": "projects/sample1/locations/global/connectivityTests/sample2" - } - } - request_init["resource"] = { - "name": "projects/sample1/locations/global/connectivityTests/sample2", - "description": "description_value", - "source": { - "ip_address": "ip_address_value", - "port": 453, - "instance": "instance_value", - "forwarding_rule": "forwarding_rule_value", - "forwarding_rule_target": 1, - "load_balancer_id": "load_balancer_id_value", - "load_balancer_type": 1, - "gke_master_cluster": "gke_master_cluster_value", - "cloud_sql_instance": "cloud_sql_instance_value", - "cloud_function": {"uri": "uri_value"}, - "app_engine_version": {"uri": "uri_value"}, - "cloud_run_revision": {"uri": "uri_value"}, - "network": "network_value", - "network_type": 1, - "project_id": "project_id_value", - }, - "destination": {}, - "protocol": "protocol_value", - "related_projects": ["related_projects_value1", "related_projects_value2"], - "display_name": "display_name_value", - "labels": {}, - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "reachability_details": { - "result": 1, - "verify_time": {}, - "error": { - "code": 411, - "message": "message_value", - "details": [ - { - "type_url": "type.googleapis.com/google.protobuf.Duration", - "value": b"\x08\x0c\x10\xdb\x07", - } - ], - }, - "traces": [ - { - "endpoint_info": { - "source_ip": "source_ip_value", - "destination_ip": "destination_ip_value", - "protocol": "protocol_value", - "source_port": 1205, - "destination_port": 1734, - "source_network_uri": "source_network_uri_value", - "destination_network_uri": "destination_network_uri_value", - "source_agent_uri": "source_agent_uri_value", - }, - "steps": [ - { - "description": "description_value", - "state": 1, - "causes_drop": True, - "project_id": "project_id_value", - "instance": { - "display_name": "display_name_value", - "uri": "uri_value", - "interface": "interface_value", - "network_uri": "network_uri_value", - "internal_ip": "internal_ip_value", - "external_ip": "external_ip_value", - "network_tags": [ - "network_tags_value1", - "network_tags_value2", - ], - "service_account": "service_account_value", - }, - "firewall": { - "display_name": "display_name_value", - "uri": "uri_value", - "direction": "direction_value", - "action": "action_value", - "priority": 898, - "network_uri": "network_uri_value", - "target_tags": [ - "target_tags_value1", - "target_tags_value2", - ], - "target_service_accounts": [ - "target_service_accounts_value1", - "target_service_accounts_value2", - ], - "policy": "policy_value", - "firewall_rule_type": 1, - }, - "route": { - "route_type": 1, - "next_hop_type": 1, - "route_scope": 1, - "display_name": "display_name_value", - "uri": "uri_value", - "dest_ip_range": "dest_ip_range_value", - "next_hop": "next_hop_value", - "network_uri": "network_uri_value", - "priority": 898, - "instance_tags": [ - "instance_tags_value1", - "instance_tags_value2", - ], - "src_ip_range": "src_ip_range_value", - "dest_port_ranges": [ - "dest_port_ranges_value1", - "dest_port_ranges_value2", - ], - "src_port_ranges": [ - "src_port_ranges_value1", - "src_port_ranges_value2", - ], - "protocols": ["protocols_value1", "protocols_value2"], - "ncc_hub_uri": "ncc_hub_uri_value", - "ncc_spoke_uri": "ncc_spoke_uri_value", - }, - "endpoint": {}, - "google_service": { - "source_ip": "source_ip_value", - "google_service_type": 1, - }, - "forwarding_rule": { - "display_name": "display_name_value", - "uri": "uri_value", - "matched_protocol": "matched_protocol_value", - "matched_port_range": "matched_port_range_value", - "vip": "vip_value", - "target": "target_value", - "network_uri": "network_uri_value", - }, - "vpn_gateway": { - "display_name": "display_name_value", - "uri": "uri_value", - "network_uri": "network_uri_value", - "ip_address": "ip_address_value", - "vpn_tunnel_uri": "vpn_tunnel_uri_value", - "region": "region_value", - }, - "vpn_tunnel": { - "display_name": "display_name_value", - "uri": "uri_value", - "source_gateway": "source_gateway_value", - "remote_gateway": "remote_gateway_value", - "remote_gateway_ip": "remote_gateway_ip_value", - "source_gateway_ip": "source_gateway_ip_value", - "network_uri": "network_uri_value", - "region": "region_value", - "routing_type": 1, - }, - "vpc_connector": { - "display_name": "display_name_value", - "uri": "uri_value", - "location": "location_value", - }, - "deliver": { - "target": 1, - "resource_uri": "resource_uri_value", - }, - "forward": { - "target": 1, - "resource_uri": "resource_uri_value", - }, - "abort": { - "cause": 1, - "resource_uri": "resource_uri_value", - "projects_missing_permission": [ - "projects_missing_permission_value1", - "projects_missing_permission_value2", - ], - }, - "drop": {"cause": 1, "resource_uri": "resource_uri_value"}, - "load_balancer": { - "load_balancer_type": 1, - "health_check_uri": "health_check_uri_value", - "backends": [ - { - "display_name": "display_name_value", - "uri": "uri_value", - "health_check_firewall_state": 1, - "health_check_allowing_firewall_rules": [ - "health_check_allowing_firewall_rules_value1", - "health_check_allowing_firewall_rules_value2", - ], - "health_check_blocking_firewall_rules": [ - "health_check_blocking_firewall_rules_value1", - "health_check_blocking_firewall_rules_value2", - ], - } - ], - "backend_type": 1, - "backend_uri": "backend_uri_value", - }, - "network": { - "display_name": "display_name_value", - "uri": "uri_value", - "matched_ip_range": "matched_ip_range_value", - }, - "gke_master": { - "cluster_uri": "cluster_uri_value", - "cluster_network_uri": "cluster_network_uri_value", - "internal_ip": "internal_ip_value", - "external_ip": "external_ip_value", - }, - "cloud_sql_instance": { - "display_name": "display_name_value", - "uri": "uri_value", - "network_uri": "network_uri_value", - "internal_ip": "internal_ip_value", - "external_ip": "external_ip_value", - "region": "region_value", - }, - "cloud_function": { - "display_name": "display_name_value", - "uri": "uri_value", - "location": "location_value", - "version_id": 1074, - }, - "app_engine_version": { - "display_name": "display_name_value", - "uri": "uri_value", - "runtime": "runtime_value", - "environment": "environment_value", - }, - "cloud_run_revision": { - "display_name": "display_name_value", - "uri": "uri_value", - "location": "location_value", - "service_uri": "service_uri_value", - }, - } - ], - } - ], - }, - "probing_details": { - "result": 1, - "verify_time": {}, - "error": {}, - "abort_cause": 1, - "sent_probe_count": 1721, - "successful_probe_count": 2367, - "endpoint_info": {}, - "probing_latency": { - "latency_percentiles": [{"percent": 753, "latency_micros": 1500}] - }, - "destination_egress_location": { - "metropolitan_area": "metropolitan_area_value" - }, - }, - } - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name="operations/spam") - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.update_connectivity_test(request) - - # Establish that the response is the type that we expect. - assert response.operation.name == "operations/spam" - - -def test_update_connectivity_test_rest_required_fields( - request_type=reachability.UpdateConnectivityTestRequest, -): - transport_class = transports.ReachabilityServiceRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads( - json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False, - ) - ) - - # verify fields with default values are dropped - - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).update_connectivity_test._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).update_connectivity_test._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask",)) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = ReachabilityServiceClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - request = request_type(**request_init) + request = request_type(**request_init) # Designate an appropriate value for the returned response. return_value = operations_pb2.Operation(name="operations/spam") @@ -4261,256 +4149,6 @@ def test_update_connectivity_test_rest_bad_request( "name": "projects/sample1/locations/global/connectivityTests/sample2" } } - request_init["resource"] = { - "name": "projects/sample1/locations/global/connectivityTests/sample2", - "description": "description_value", - "source": { - "ip_address": "ip_address_value", - "port": 453, - "instance": "instance_value", - "forwarding_rule": "forwarding_rule_value", - "forwarding_rule_target": 1, - "load_balancer_id": "load_balancer_id_value", - "load_balancer_type": 1, - "gke_master_cluster": "gke_master_cluster_value", - "cloud_sql_instance": "cloud_sql_instance_value", - "cloud_function": {"uri": "uri_value"}, - "app_engine_version": {"uri": "uri_value"}, - "cloud_run_revision": {"uri": "uri_value"}, - "network": "network_value", - "network_type": 1, - "project_id": "project_id_value", - }, - "destination": {}, - "protocol": "protocol_value", - "related_projects": ["related_projects_value1", "related_projects_value2"], - "display_name": "display_name_value", - "labels": {}, - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "reachability_details": { - "result": 1, - "verify_time": {}, - "error": { - "code": 411, - "message": "message_value", - "details": [ - { - "type_url": "type.googleapis.com/google.protobuf.Duration", - "value": b"\x08\x0c\x10\xdb\x07", - } - ], - }, - "traces": [ - { - "endpoint_info": { - "source_ip": "source_ip_value", - "destination_ip": "destination_ip_value", - "protocol": "protocol_value", - "source_port": 1205, - "destination_port": 1734, - "source_network_uri": "source_network_uri_value", - "destination_network_uri": "destination_network_uri_value", - "source_agent_uri": "source_agent_uri_value", - }, - "steps": [ - { - "description": "description_value", - "state": 1, - "causes_drop": True, - "project_id": "project_id_value", - "instance": { - "display_name": "display_name_value", - "uri": "uri_value", - "interface": "interface_value", - "network_uri": "network_uri_value", - "internal_ip": "internal_ip_value", - "external_ip": "external_ip_value", - "network_tags": [ - "network_tags_value1", - "network_tags_value2", - ], - "service_account": "service_account_value", - }, - "firewall": { - "display_name": "display_name_value", - "uri": "uri_value", - "direction": "direction_value", - "action": "action_value", - "priority": 898, - "network_uri": "network_uri_value", - "target_tags": [ - "target_tags_value1", - "target_tags_value2", - ], - "target_service_accounts": [ - "target_service_accounts_value1", - "target_service_accounts_value2", - ], - "policy": "policy_value", - "firewall_rule_type": 1, - }, - "route": { - "route_type": 1, - "next_hop_type": 1, - "route_scope": 1, - "display_name": "display_name_value", - "uri": "uri_value", - "dest_ip_range": "dest_ip_range_value", - "next_hop": "next_hop_value", - "network_uri": "network_uri_value", - "priority": 898, - "instance_tags": [ - "instance_tags_value1", - "instance_tags_value2", - ], - "src_ip_range": "src_ip_range_value", - "dest_port_ranges": [ - "dest_port_ranges_value1", - "dest_port_ranges_value2", - ], - "src_port_ranges": [ - "src_port_ranges_value1", - "src_port_ranges_value2", - ], - "protocols": ["protocols_value1", "protocols_value2"], - "ncc_hub_uri": "ncc_hub_uri_value", - "ncc_spoke_uri": "ncc_spoke_uri_value", - }, - "endpoint": {}, - "google_service": { - "source_ip": "source_ip_value", - "google_service_type": 1, - }, - "forwarding_rule": { - "display_name": "display_name_value", - "uri": "uri_value", - "matched_protocol": "matched_protocol_value", - "matched_port_range": "matched_port_range_value", - "vip": "vip_value", - "target": "target_value", - "network_uri": "network_uri_value", - }, - "vpn_gateway": { - "display_name": "display_name_value", - "uri": "uri_value", - "network_uri": "network_uri_value", - "ip_address": "ip_address_value", - "vpn_tunnel_uri": "vpn_tunnel_uri_value", - "region": "region_value", - }, - "vpn_tunnel": { - "display_name": "display_name_value", - "uri": "uri_value", - "source_gateway": "source_gateway_value", - "remote_gateway": "remote_gateway_value", - "remote_gateway_ip": "remote_gateway_ip_value", - "source_gateway_ip": "source_gateway_ip_value", - "network_uri": "network_uri_value", - "region": "region_value", - "routing_type": 1, - }, - "vpc_connector": { - "display_name": "display_name_value", - "uri": "uri_value", - "location": "location_value", - }, - "deliver": { - "target": 1, - "resource_uri": "resource_uri_value", - }, - "forward": { - "target": 1, - "resource_uri": "resource_uri_value", - }, - "abort": { - "cause": 1, - "resource_uri": "resource_uri_value", - "projects_missing_permission": [ - "projects_missing_permission_value1", - "projects_missing_permission_value2", - ], - }, - "drop": {"cause": 1, "resource_uri": "resource_uri_value"}, - "load_balancer": { - "load_balancer_type": 1, - "health_check_uri": "health_check_uri_value", - "backends": [ - { - "display_name": "display_name_value", - "uri": "uri_value", - "health_check_firewall_state": 1, - "health_check_allowing_firewall_rules": [ - "health_check_allowing_firewall_rules_value1", - "health_check_allowing_firewall_rules_value2", - ], - "health_check_blocking_firewall_rules": [ - "health_check_blocking_firewall_rules_value1", - "health_check_blocking_firewall_rules_value2", - ], - } - ], - "backend_type": 1, - "backend_uri": "backend_uri_value", - }, - "network": { - "display_name": "display_name_value", - "uri": "uri_value", - "matched_ip_range": "matched_ip_range_value", - }, - "gke_master": { - "cluster_uri": "cluster_uri_value", - "cluster_network_uri": "cluster_network_uri_value", - "internal_ip": "internal_ip_value", - "external_ip": "external_ip_value", - }, - "cloud_sql_instance": { - "display_name": "display_name_value", - "uri": "uri_value", - "network_uri": "network_uri_value", - "internal_ip": "internal_ip_value", - "external_ip": "external_ip_value", - "region": "region_value", - }, - "cloud_function": { - "display_name": "display_name_value", - "uri": "uri_value", - "location": "location_value", - "version_id": 1074, - }, - "app_engine_version": { - "display_name": "display_name_value", - "uri": "uri_value", - "runtime": "runtime_value", - "environment": "environment_value", - }, - "cloud_run_revision": { - "display_name": "display_name_value", - "uri": "uri_value", - "location": "location_value", - "service_uri": "service_uri_value", - }, - } - ], - } - ], - }, - "probing_details": { - "result": 1, - "verify_time": {}, - "error": {}, - "abort_cause": 1, - "sent_probe_count": 1721, - "successful_probe_count": 2367, - "endpoint_info": {}, - "probing_latency": { - "latency_percentiles": [{"percent": 753, "latency_micros": 1500}] - }, - "destination_egress_location": { - "metropolitan_area": "metropolitan_area_value" - }, - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. diff --git a/packages/google-cloud-network-security/CONTRIBUTING.rst b/packages/google-cloud-network-security/CONTRIBUTING.rst index 3113c32935d8..7631bc7db880 100644 --- a/packages/google-cloud-network-security/CONTRIBUTING.rst +++ b/packages/google-cloud-network-security/CONTRIBUTING.rst @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system- -- -k + $ nox -s system-3.11 -- -k .. note:: - System tests are only configured to run under Python. + System tests are only configured to run under Python 3.8, 3.9, 3.10 and 3.11. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-network-security/google/cloud/network_security/gapic_version.py b/packages/google-cloud-network-security/google/cloud/network_security/gapic_version.py index 6efd85519fa1..360a0d13ebdd 100644 --- a/packages/google-cloud-network-security/google/cloud/network_security/gapic_version.py +++ b/packages/google-cloud-network-security/google/cloud/network_security/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.9.4" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-network-security/google/cloud/network_security_v1/gapic_version.py b/packages/google-cloud-network-security/google/cloud/network_security_v1/gapic_version.py index 6efd85519fa1..360a0d13ebdd 100644 --- a/packages/google-cloud-network-security/google/cloud/network_security_v1/gapic_version.py +++ b/packages/google-cloud-network-security/google/cloud/network_security_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.9.4" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-network-security/google/cloud/network_security_v1beta1/gapic_version.py b/packages/google-cloud-network-security/google/cloud/network_security_v1beta1/gapic_version.py index 6efd85519fa1..360a0d13ebdd 100644 --- a/packages/google-cloud-network-security/google/cloud/network_security_v1beta1/gapic_version.py +++ b/packages/google-cloud-network-security/google/cloud/network_security_v1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.9.4" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-network-security/noxfile.py b/packages/google-cloud-network-security/noxfile.py index 9a2acd8b6787..be54712bfa8f 100644 --- a/packages/google-cloud-network-security/noxfile.py +++ b/packages/google-cloud-network-security/noxfile.py @@ -46,7 +46,7 @@ UNIT_TEST_EXTRAS = [] UNIT_TEST_EXTRAS_BY_PYTHON = {} -SYSTEM_TEST_PYTHON_VERSIONS = [] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11"] SYSTEM_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", @@ -405,24 +405,3 @@ def prerelease_deps(session): session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") - - system_test_path = os.path.join("tests", "system.py") - system_test_folder_path = os.path.join("tests", "system") - - # Only run system tests if found. - if os.path.exists(system_test_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_path, - *session.posargs, - ) - if os.path.exists(system_test_folder_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_folder_path, - *session.posargs, - ) diff --git a/packages/google-cloud-network-security/samples/generated_samples/snippet_metadata_google.cloud.networksecurity.v1.json b/packages/google-cloud-network-security/samples/generated_samples/snippet_metadata_google.cloud.networksecurity.v1.json index 06ed6f6d2a00..0bc5339e0c8a 100644 --- a/packages/google-cloud-network-security/samples/generated_samples/snippet_metadata_google.cloud.networksecurity.v1.json +++ b/packages/google-cloud-network-security/samples/generated_samples/snippet_metadata_google.cloud.networksecurity.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-network-security", - "version": "0.9.4" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-network-security/samples/generated_samples/snippet_metadata_google.cloud.networksecurity.v1beta1.json b/packages/google-cloud-network-security/samples/generated_samples/snippet_metadata_google.cloud.networksecurity.v1beta1.json index 57acb56f8d84..fd7e421ca0d6 100644 --- a/packages/google-cloud-network-security/samples/generated_samples/snippet_metadata_google.cloud.networksecurity.v1beta1.json +++ b/packages/google-cloud-network-security/samples/generated_samples/snippet_metadata_google.cloud.networksecurity.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-network-security", - "version": "0.9.4" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-network-security/tests/unit/gapic/network_security_v1/test_network_security.py b/packages/google-cloud-network-security/tests/unit/gapic/network_security_v1/test_network_security.py index 5dd15f2fa22f..fa3d3245137c 100644 --- a/packages/google-cloud-network-security/tests/unit/gapic/network_security_v1/test_network_security.py +++ b/packages/google-cloud-network-security/tests/unit/gapic/network_security_v1/test_network_security.py @@ -5162,10 +5162,11 @@ def test_list_authorization_policies_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = authorization_policy.ListAuthorizationPoliciesResponse.pb( + # Convert return value to protobuf type + return_value = authorization_policy.ListAuthorizationPoliciesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5247,10 +5248,11 @@ def test_list_authorization_policies_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = authorization_policy.ListAuthorizationPoliciesResponse.pb( + # Convert return value to protobuf type + return_value = authorization_policy.ListAuthorizationPoliciesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5386,10 +5388,11 @@ def test_list_authorization_policies_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = authorization_policy.ListAuthorizationPoliciesResponse.pb( + # Convert return value to protobuf type + return_value = authorization_policy.ListAuthorizationPoliciesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5518,8 +5521,9 @@ def test_get_authorization_policy_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = authorization_policy.AuthorizationPolicy.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = authorization_policy.AuthorizationPolicy.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5596,8 +5600,9 @@ def test_get_authorization_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = authorization_policy.AuthorizationPolicy.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = authorization_policy.AuthorizationPolicy.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5727,8 +5732,9 @@ def test_get_authorization_policy_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = authorization_policy.AuthorizationPolicy.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = authorization_policy.AuthorizationPolicy.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5810,6 +5816,77 @@ def test_create_authorization_policy_rest(request_type): } ], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_authorization_policy.CreateAuthorizationPolicyRequest.meta.fields[ + "authorization_policy" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init[ + "authorization_policy" + ].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["authorization_policy"][field])): + del request_init["authorization_policy"][field][i][subfield] + else: + del request_init["authorization_policy"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -6012,35 +6089,6 @@ def test_create_authorization_policy_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["authorization_policy"] = { - "name": "name_value", - "description": "description_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "action": 1, - "rules": [ - { - "sources": [ - { - "principals": ["principals_value1", "principals_value2"], - "ip_blocks": ["ip_blocks_value1", "ip_blocks_value2"], - } - ], - "destinations": [ - { - "hosts": ["hosts_value1", "hosts_value2"], - "ports": [569, 570], - "methods": ["methods_value1", "methods_value2"], - "http_header_match": { - "regex_match": "regex_match_value", - "header_name": "header_name_value", - }, - } - ], - } - ], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -6172,6 +6220,77 @@ def test_update_authorization_policy_rest(request_type): } ], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_authorization_policy.UpdateAuthorizationPolicyRequest.meta.fields[ + "authorization_policy" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init[ + "authorization_policy" + ].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["authorization_policy"][field])): + del request_init["authorization_policy"][field][i][subfield] + else: + del request_init["authorization_policy"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -6348,35 +6467,6 @@ def test_update_authorization_policy_rest_bad_request( "name": "projects/sample1/locations/sample2/authorizationPolicies/sample3" } } - request_init["authorization_policy"] = { - "name": "projects/sample1/locations/sample2/authorizationPolicies/sample3", - "description": "description_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "action": 1, - "rules": [ - { - "sources": [ - { - "principals": ["principals_value1", "principals_value2"], - "ip_blocks": ["ip_blocks_value1", "ip_blocks_value2"], - } - ], - "destinations": [ - { - "hosts": ["hosts_value1", "hosts_value2"], - "ports": [569, 570], - "methods": ["methods_value1", "methods_value2"], - "http_header_match": { - "regex_match": "regex_match_value", - "header_name": "header_name_value", - }, - } - ], - } - ], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -6759,10 +6849,9 @@ def test_list_server_tls_policies_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = server_tls_policy.ListServerTlsPoliciesResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = server_tls_policy.ListServerTlsPoliciesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6844,10 +6933,11 @@ def test_list_server_tls_policies_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = server_tls_policy.ListServerTlsPoliciesResponse.pb( + # Convert return value to protobuf type + return_value = server_tls_policy.ListServerTlsPoliciesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6982,10 +7072,9 @@ def test_list_server_tls_policies_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = server_tls_policy.ListServerTlsPoliciesResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = server_tls_policy.ListServerTlsPoliciesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7111,8 +7200,9 @@ def test_get_server_tls_policy_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = server_tls_policy.ServerTlsPolicy.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = server_tls_policy.ServerTlsPolicy.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7189,8 +7279,9 @@ def test_get_server_tls_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = server_tls_policy.ServerTlsPolicy.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = server_tls_policy.ServerTlsPolicy.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7319,8 +7410,9 @@ def test_get_server_tls_policy_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = server_tls_policy.ServerTlsPolicy.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = server_tls_policy.ServerTlsPolicy.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7392,6 +7484,75 @@ def test_create_server_tls_policy_rest(request_type): ] }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_server_tls_policy.CreateServerTlsPolicyRequest.meta.fields[ + "server_tls_policy" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["server_tls_policy"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["server_tls_policy"][field])): + del request_init["server_tls_policy"][field][i][subfield] + else: + del request_init["server_tls_policy"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -7593,25 +7754,6 @@ def test_create_server_tls_policy_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["server_tls_policy"] = { - "name": "name_value", - "description": "description_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "allow_open": True, - "server_certificate": { - "grpc_endpoint": {"target_uri": "target_uri_value"}, - "certificate_provider_instance": { - "plugin_instance": "plugin_instance_value" - }, - }, - "mtls_policy": { - "client_validation_ca": [ - {"grpc_endpoint": {}, "certificate_provider_instance": {}} - ] - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -7729,6 +7871,75 @@ def test_update_server_tls_policy_rest(request_type): ] }, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_server_tls_policy.UpdateServerTlsPolicyRequest.meta.fields[ + "server_tls_policy" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["server_tls_policy"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["server_tls_policy"][field])): + del request_init["server_tls_policy"][field][i][subfield] + else: + del request_init["server_tls_policy"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -7905,25 +8116,6 @@ def test_update_server_tls_policy_rest_bad_request( "name": "projects/sample1/locations/sample2/serverTlsPolicies/sample3" } } - request_init["server_tls_policy"] = { - "name": "projects/sample1/locations/sample2/serverTlsPolicies/sample3", - "description": "description_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "allow_open": True, - "server_certificate": { - "grpc_endpoint": {"target_uri": "target_uri_value"}, - "certificate_provider_instance": { - "plugin_instance": "plugin_instance_value" - }, - }, - "mtls_policy": { - "client_validation_ca": [ - {"grpc_endpoint": {}, "certificate_provider_instance": {}} - ] - }, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -8301,10 +8493,9 @@ def test_list_client_tls_policies_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = client_tls_policy.ListClientTlsPoliciesResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = client_tls_policy.ListClientTlsPoliciesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8386,10 +8577,11 @@ def test_list_client_tls_policies_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = client_tls_policy.ListClientTlsPoliciesResponse.pb( + # Convert return value to protobuf type + return_value = client_tls_policy.ListClientTlsPoliciesResponse.pb( return_value ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8524,10 +8716,9 @@ def test_list_client_tls_policies_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = client_tls_policy.ListClientTlsPoliciesResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = client_tls_policy.ListClientTlsPoliciesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8653,8 +8844,9 @@ def test_get_client_tls_policy_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = client_tls_policy.ClientTlsPolicy.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = client_tls_policy.ClientTlsPolicy.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8731,8 +8923,9 @@ def test_get_client_tls_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = client_tls_policy.ClientTlsPolicy.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = client_tls_policy.ClientTlsPolicy.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8861,8 +9054,9 @@ def test_get_client_tls_policy_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = client_tls_policy.ClientTlsPolicy.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = client_tls_policy.ClientTlsPolicy.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8932,6 +9126,75 @@ def test_create_client_tls_policy_rest(request_type): {"grpc_endpoint": {}, "certificate_provider_instance": {}} ], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_client_tls_policy.CreateClientTlsPolicyRequest.meta.fields[ + "client_tls_policy" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["client_tls_policy"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["client_tls_policy"][field])): + del request_init["client_tls_policy"][field][i][subfield] + else: + del request_init["client_tls_policy"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -9133,23 +9396,6 @@ def test_create_client_tls_policy_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["client_tls_policy"] = { - "name": "name_value", - "description": "description_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "sni": "sni_value", - "client_certificate": { - "grpc_endpoint": {"target_uri": "target_uri_value"}, - "certificate_provider_instance": { - "plugin_instance": "plugin_instance_value" - }, - }, - "server_validation_ca": [ - {"grpc_endpoint": {}, "certificate_provider_instance": {}} - ], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -9265,6 +9511,75 @@ def test_update_client_tls_policy_rest(request_type): {"grpc_endpoint": {}, "certificate_provider_instance": {}} ], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_client_tls_policy.UpdateClientTlsPolicyRequest.meta.fields[ + "client_tls_policy" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["client_tls_policy"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["client_tls_policy"][field])): + del request_init["client_tls_policy"][field][i][subfield] + else: + del request_init["client_tls_policy"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -9441,23 +9756,6 @@ def test_update_client_tls_policy_rest_bad_request( "name": "projects/sample1/locations/sample2/clientTlsPolicies/sample3" } } - request_init["client_tls_policy"] = { - "name": "projects/sample1/locations/sample2/clientTlsPolicies/sample3", - "description": "description_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "sni": "sni_value", - "client_certificate": { - "grpc_endpoint": {"target_uri": "target_uri_value"}, - "certificate_provider_instance": { - "plugin_instance": "plugin_instance_value" - }, - }, - "server_validation_ca": [ - {"grpc_endpoint": {}, "certificate_provider_instance": {}} - ], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. diff --git a/packages/google-cloud-network-services/tests/unit/gapic/network_services_v1/test_network_services.py b/packages/google-cloud-network-services/tests/unit/gapic/network_services_v1/test_network_services.py index 788ab5fdcbd7..38a08067e23e 100644 --- a/packages/google-cloud-network-services/tests/unit/gapic/network_services_v1/test_network_services.py +++ b/packages/google-cloud-network-services/tests/unit/gapic/network_services_v1/test_network_services.py @@ -11812,8 +11812,9 @@ def test_list_endpoint_policies_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = endpoint_policy.ListEndpointPoliciesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = endpoint_policy.ListEndpointPoliciesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -11895,10 +11896,9 @@ def test_list_endpoint_policies_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = endpoint_policy.ListEndpointPoliciesResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = endpoint_policy.ListEndpointPoliciesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12033,8 +12033,9 @@ def test_list_endpoint_policies_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = endpoint_policy.ListEndpointPoliciesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = endpoint_policy.ListEndpointPoliciesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12163,8 +12164,9 @@ def test_get_endpoint_policy_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = endpoint_policy.EndpointPolicy.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = endpoint_policy.EndpointPolicy.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12247,8 +12249,9 @@ def test_get_endpoint_policy_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = endpoint_policy.EndpointPolicy.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = endpoint_policy.EndpointPolicy.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12377,8 +12380,9 @@ def test_get_endpoint_policy_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = endpoint_policy.EndpointPolicy.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = endpoint_policy.EndpointPolicy.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -12454,6 +12458,75 @@ def test_create_endpoint_policy_rest(request_type): "server_tls_policy": "server_tls_policy_value", "client_tls_policy": "client_tls_policy_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_endpoint_policy.CreateEndpointPolicyRequest.meta.fields[ + "endpoint_policy" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["endpoint_policy"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["endpoint_policy"][field])): + del request_init["endpoint_policy"][field][i][subfield] + else: + del request_init["endpoint_policy"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -12653,29 +12726,6 @@ def test_create_endpoint_policy_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["endpoint_policy"] = { - "name": "name_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "type_": 1, - "authorization_policy": "authorization_policy_value", - "endpoint_matcher": { - "metadata_label_matcher": { - "metadata_label_match_criteria": 1, - "metadata_labels": [ - { - "label_name": "label_name_value", - "label_value": "label_value_value", - } - ], - } - }, - "traffic_port_selector": {"ports": ["ports_value1", "ports_value2"]}, - "description": "description_value", - "server_tls_policy": "server_tls_policy_value", - "client_tls_policy": "client_tls_policy_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -12797,6 +12847,75 @@ def test_update_endpoint_policy_rest(request_type): "server_tls_policy": "server_tls_policy_value", "client_tls_policy": "client_tls_policy_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_endpoint_policy.UpdateEndpointPolicyRequest.meta.fields[ + "endpoint_policy" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["endpoint_policy"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["endpoint_policy"][field])): + del request_init["endpoint_policy"][field][i][subfield] + else: + del request_init["endpoint_policy"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -12973,29 +13092,6 @@ def test_update_endpoint_policy_rest_bad_request( "name": "projects/sample1/locations/sample2/endpointPolicies/sample3" } } - request_init["endpoint_policy"] = { - "name": "projects/sample1/locations/sample2/endpointPolicies/sample3", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "type_": 1, - "authorization_policy": "authorization_policy_value", - "endpoint_matcher": { - "metadata_label_matcher": { - "metadata_label_match_criteria": 1, - "metadata_labels": [ - { - "label_name": "label_name_value", - "label_value": "label_value_value", - } - ], - } - }, - "traffic_port_selector": {"ports": ["ports_value1", "ports_value2"]}, - "description": "description_value", - "server_tls_policy": "server_tls_policy_value", - "client_tls_policy": "client_tls_policy_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -13373,8 +13469,9 @@ def test_list_gateways_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gateway.ListGatewaysResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gateway.ListGatewaysResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -13454,8 +13551,9 @@ def test_list_gateways_rest_required_fields(request_type=gateway.ListGatewaysReq response_value = Response() response_value.status_code = 200 - pb_return_value = gateway.ListGatewaysResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gateway.ListGatewaysResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -13586,8 +13684,9 @@ def test_list_gateways_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gateway.ListGatewaysResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gateway.ListGatewaysResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -13712,8 +13811,9 @@ def test_get_gateway_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gateway.Gateway.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gateway.Gateway.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -13792,8 +13892,9 @@ def test_get_gateway_rest_required_fields(request_type=gateway.GetGatewayRequest response_value = Response() response_value.status_code = 200 - pb_return_value = gateway.Gateway.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gateway.Gateway.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -13914,8 +14015,9 @@ def test_get_gateway_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gateway.Gateway.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = gateway.Gateway.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -13979,6 +14081,73 @@ def test_create_gateway_rest(request_type): "scope": "scope_value", "server_tls_policy": "server_tls_policy_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_gateway.CreateGatewayRequest.meta.fields["gateway"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["gateway"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["gateway"][field])): + del request_init["gateway"][field][i][subfield] + else: + del request_init["gateway"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -14177,18 +14346,6 @@ def test_create_gateway_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["gateway"] = { - "name": "name_value", - "self_link": "self_link_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "description": "description_value", - "type_": 1, - "ports": [569, 570], - "scope": "scope_value", - "server_tls_policy": "server_tls_policy_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -14296,6 +14453,73 @@ def test_update_gateway_rest(request_type): "scope": "scope_value", "server_tls_policy": "server_tls_policy_value", } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_gateway.UpdateGatewayRequest.meta.fields["gateway"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["gateway"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["gateway"][field])): + del request_init["gateway"][field][i][subfield] + else: + del request_init["gateway"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -14469,18 +14693,6 @@ def test_update_gateway_rest_bad_request( request_init = { "gateway": {"name": "projects/sample1/locations/sample2/gateways/sample3"} } - request_init["gateway"] = { - "name": "projects/sample1/locations/sample2/gateways/sample3", - "self_link": "self_link_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "description": "description_value", - "type_": 1, - "ports": [569, 570], - "scope": "scope_value", - "server_tls_policy": "server_tls_policy_value", - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -14845,8 +15057,9 @@ def test_list_grpc_routes_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = grpc_route.ListGrpcRoutesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = grpc_route.ListGrpcRoutesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -14928,8 +15141,9 @@ def test_list_grpc_routes_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = grpc_route.ListGrpcRoutesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = grpc_route.ListGrpcRoutesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15062,8 +15276,9 @@ def test_list_grpc_routes_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = grpc_route.ListGrpcRoutesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = grpc_route.ListGrpcRoutesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15187,8 +15402,9 @@ def test_get_grpc_route_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = grpc_route.GrpcRoute.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = grpc_route.GrpcRoute.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15268,8 +15484,9 @@ def test_get_grpc_route_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = grpc_route.GrpcRoute.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = grpc_route.GrpcRoute.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15392,8 +15609,9 @@ def test_get_grpc_route_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = grpc_route.GrpcRoute.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = grpc_route.GrpcRoute.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -15493,6 +15711,73 @@ def test_create_grpc_route_rest(request_type): } ], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_grpc_route.CreateGrpcRouteRequest.meta.fields["grpc_route"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["grpc_route"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["grpc_route"][field])): + del request_init["grpc_route"][field][i][subfield] + else: + del request_init["grpc_route"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -15691,54 +15976,6 @@ def test_create_grpc_route_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["grpc_route"] = { - "name": "name_value", - "self_link": "self_link_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "description": "description_value", - "hostnames": ["hostnames_value1", "hostnames_value2"], - "meshes": ["meshes_value1", "meshes_value2"], - "gateways": ["gateways_value1", "gateways_value2"], - "rules": [ - { - "matches": [ - { - "method": { - "type_": 1, - "grpc_service": "grpc_service_value", - "grpc_method": "grpc_method_value", - "case_sensitive": True, - }, - "headers": [ - {"type_": 1, "key": "key_value", "value": "value_value"} - ], - } - ], - "action": { - "destinations": [ - {"service_name": "service_name_value", "weight": 648} - ], - "fault_injection_policy": { - "delay": { - "fixed_delay": {"seconds": 751, "nanos": 543}, - "percentage": 1054, - }, - "abort": {"http_status": 1219, "percentage": 1054}, - }, - "timeout": {}, - "retry_policy": { - "retry_conditions": [ - "retry_conditions_value1", - "retry_conditions_value2", - ], - "num_retries": 1197, - }, - }, - } - ], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -15882,6 +16119,73 @@ def test_update_grpc_route_rest(request_type): } ], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_grpc_route.UpdateGrpcRouteRequest.meta.fields["grpc_route"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["grpc_route"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["grpc_route"][field])): + del request_init["grpc_route"][field][i][subfield] + else: + del request_init["grpc_route"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -16055,54 +16359,6 @@ def test_update_grpc_route_rest_bad_request( request_init = { "grpc_route": {"name": "projects/sample1/locations/sample2/grpcRoutes/sample3"} } - request_init["grpc_route"] = { - "name": "projects/sample1/locations/sample2/grpcRoutes/sample3", - "self_link": "self_link_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "description": "description_value", - "hostnames": ["hostnames_value1", "hostnames_value2"], - "meshes": ["meshes_value1", "meshes_value2"], - "gateways": ["gateways_value1", "gateways_value2"], - "rules": [ - { - "matches": [ - { - "method": { - "type_": 1, - "grpc_service": "grpc_service_value", - "grpc_method": "grpc_method_value", - "case_sensitive": True, - }, - "headers": [ - {"type_": 1, "key": "key_value", "value": "value_value"} - ], - } - ], - "action": { - "destinations": [ - {"service_name": "service_name_value", "weight": 648} - ], - "fault_injection_policy": { - "delay": { - "fixed_delay": {"seconds": 751, "nanos": 543}, - "percentage": 1054, - }, - "abort": {"http_status": 1219, "percentage": 1054}, - }, - "timeout": {}, - "retry_policy": { - "retry_conditions": [ - "retry_conditions_value1", - "retry_conditions_value2", - ], - "num_retries": 1197, - }, - }, - } - ], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -16475,8 +16731,9 @@ def test_list_http_routes_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = http_route.ListHttpRoutesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = http_route.ListHttpRoutesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -16558,8 +16815,9 @@ def test_list_http_routes_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = http_route.ListHttpRoutesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = http_route.ListHttpRoutesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -16692,8 +16950,9 @@ def test_list_http_routes_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = http_route.ListHttpRoutesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = http_route.ListHttpRoutesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -16817,8 +17076,9 @@ def test_get_http_route_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = http_route.HttpRoute.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = http_route.HttpRoute.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -16898,8 +17158,9 @@ def test_get_http_route_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = http_route.HttpRoute.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = http_route.HttpRoute.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -17022,8 +17283,9 @@ def test_get_http_route_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = http_route.HttpRoute.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = http_route.HttpRoute.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -17184,6 +17446,73 @@ def test_create_http_route_rest(request_type): } ], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_http_route.CreateHttpRouteRequest.meta.fields["http_route"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["http_route"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["http_route"][field])): + del request_init["http_route"][field][i][subfield] + else: + del request_init["http_route"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -17382,115 +17711,6 @@ def test_create_http_route_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["http_route"] = { - "name": "name_value", - "self_link": "self_link_value", - "description": "description_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "hostnames": ["hostnames_value1", "hostnames_value2"], - "meshes": ["meshes_value1", "meshes_value2"], - "gateways": ["gateways_value1", "gateways_value2"], - "labels": {}, - "rules": [ - { - "matches": [ - { - "full_path_match": "full_path_match_value", - "prefix_match": "prefix_match_value", - "regex_match": "regex_match_value", - "ignore_case": True, - "headers": [ - { - "exact_match": "exact_match_value", - "regex_match": "regex_match_value", - "prefix_match": "prefix_match_value", - "present_match": True, - "suffix_match": "suffix_match_value", - "range_match": {"start": 558, "end": 311}, - "header": "header_value", - "invert_match": True, - } - ], - "query_parameters": [ - { - "exact_match": "exact_match_value", - "regex_match": "regex_match_value", - "present_match": True, - "query_parameter": "query_parameter_value", - } - ], - } - ], - "action": { - "destinations": [ - {"service_name": "service_name_value", "weight": 648} - ], - "redirect": { - "host_redirect": "host_redirect_value", - "path_redirect": "path_redirect_value", - "prefix_rewrite": "prefix_rewrite_value", - "response_code": 1, - "https_redirect": True, - "strip_query": True, - "port_redirect": 1398, - }, - "fault_injection_policy": { - "delay": { - "fixed_delay": {"seconds": 751, "nanos": 543}, - "percentage": 1054, - }, - "abort": {"http_status": 1219, "percentage": 1054}, - }, - "request_header_modifier": { - "set": {}, - "add": {}, - "remove": ["remove_value1", "remove_value2"], - }, - "response_header_modifier": {}, - "url_rewrite": { - "path_prefix_rewrite": "path_prefix_rewrite_value", - "host_rewrite": "host_rewrite_value", - }, - "timeout": {}, - "retry_policy": { - "retry_conditions": [ - "retry_conditions_value1", - "retry_conditions_value2", - ], - "num_retries": 1197, - "per_try_timeout": {}, - }, - "request_mirror_policy": {"destination": {}}, - "cors_policy": { - "allow_origins": [ - "allow_origins_value1", - "allow_origins_value2", - ], - "allow_origin_regexes": [ - "allow_origin_regexes_value1", - "allow_origin_regexes_value2", - ], - "allow_methods": [ - "allow_methods_value1", - "allow_methods_value2", - ], - "allow_headers": [ - "allow_headers_value1", - "allow_headers_value2", - ], - "expose_headers": [ - "expose_headers_value1", - "expose_headers_value2", - ], - "max_age": "max_age_value", - "allow_credentials": True, - "disabled": True, - }, - }, - } - ], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -17695,6 +17915,73 @@ def test_update_http_route_rest(request_type): } ], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_http_route.UpdateHttpRouteRequest.meta.fields["http_route"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["http_route"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["http_route"][field])): + del request_init["http_route"][field][i][subfield] + else: + del request_init["http_route"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -17790,192 +18077,83 @@ def test_update_http_route_rest_required_fields( def test_update_http_route_rest_unset_required_fields(): transport = transports.NetworkServicesRestTransport( - credentials=ga_credentials.AnonymousCredentials - ) - - unset_fields = transport.update_http_route._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask",)) & set(("httpRoute",))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_http_route_rest_interceptors(null_interceptor): - transport = transports.NetworkServicesRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None - if null_interceptor - else transports.NetworkServicesRestInterceptor(), - ) - client = NetworkServicesClient(transport=transport) - with mock.patch.object( - type(client.transport._session), "request" - ) as req, mock.patch.object( - path_template, "transcode" - ) as transcode, mock.patch.object( - operation.Operation, "_set_result_from_operation" - ), mock.patch.object( - transports.NetworkServicesRestInterceptor, "post_update_http_route" - ) as post, mock.patch.object( - transports.NetworkServicesRestInterceptor, "pre_update_http_route" - ) as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = gcn_http_route.UpdateHttpRouteRequest.pb( - gcn_http_route.UpdateHttpRouteRequest() - ) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson( - operations_pb2.Operation() - ) - - request = gcn_http_route.UpdateHttpRouteRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = operations_pb2.Operation() - - client.update_http_route( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], - ) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_http_route_rest_bad_request( - transport: str = "rest", request_type=gcn_http_route.UpdateHttpRouteRequest -): - client = NetworkServicesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = { - "http_route": {"name": "projects/sample1/locations/sample2/httpRoutes/sample3"} - } - request_init["http_route"] = { - "name": "projects/sample1/locations/sample2/httpRoutes/sample3", - "self_link": "self_link_value", - "description": "description_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "hostnames": ["hostnames_value1", "hostnames_value2"], - "meshes": ["meshes_value1", "meshes_value2"], - "gateways": ["gateways_value1", "gateways_value2"], - "labels": {}, - "rules": [ - { - "matches": [ - { - "full_path_match": "full_path_match_value", - "prefix_match": "prefix_match_value", - "regex_match": "regex_match_value", - "ignore_case": True, - "headers": [ - { - "exact_match": "exact_match_value", - "regex_match": "regex_match_value", - "prefix_match": "prefix_match_value", - "present_match": True, - "suffix_match": "suffix_match_value", - "range_match": {"start": 558, "end": 311}, - "header": "header_value", - "invert_match": True, - } - ], - "query_parameters": [ - { - "exact_match": "exact_match_value", - "regex_match": "regex_match_value", - "present_match": True, - "query_parameter": "query_parameter_value", - } - ], - } - ], - "action": { - "destinations": [ - {"service_name": "service_name_value", "weight": 648} - ], - "redirect": { - "host_redirect": "host_redirect_value", - "path_redirect": "path_redirect_value", - "prefix_rewrite": "prefix_rewrite_value", - "response_code": 1, - "https_redirect": True, - "strip_query": True, - "port_redirect": 1398, - }, - "fault_injection_policy": { - "delay": { - "fixed_delay": {"seconds": 751, "nanos": 543}, - "percentage": 1054, - }, - "abort": {"http_status": 1219, "percentage": 1054}, - }, - "request_header_modifier": { - "set": {}, - "add": {}, - "remove": ["remove_value1", "remove_value2"], - }, - "response_header_modifier": {}, - "url_rewrite": { - "path_prefix_rewrite": "path_prefix_rewrite_value", - "host_rewrite": "host_rewrite_value", - }, - "timeout": {}, - "retry_policy": { - "retry_conditions": [ - "retry_conditions_value1", - "retry_conditions_value2", - ], - "num_retries": 1197, - "per_try_timeout": {}, - }, - "request_mirror_policy": {"destination": {}}, - "cors_policy": { - "allow_origins": [ - "allow_origins_value1", - "allow_origins_value2", - ], - "allow_origin_regexes": [ - "allow_origin_regexes_value1", - "allow_origin_regexes_value2", - ], - "allow_methods": [ - "allow_methods_value1", - "allow_methods_value2", - ], - "allow_headers": [ - "allow_headers_value1", - "allow_headers_value2", - ], - "expose_headers": [ - "expose_headers_value1", - "expose_headers_value2", - ], - "max_age": "max_age_value", - "allow_credentials": True, - "disabled": True, - }, - }, - } - ], + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.update_http_route._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask",)) & set(("httpRoute",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_http_route_rest_interceptors(null_interceptor): + transport = transports.NetworkServicesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.NetworkServicesRestInterceptor(), + ) + client = NetworkServicesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + operation.Operation, "_set_result_from_operation" + ), mock.patch.object( + transports.NetworkServicesRestInterceptor, "post_update_http_route" + ) as post, mock.patch.object( + transports.NetworkServicesRestInterceptor, "pre_update_http_route" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = gcn_http_route.UpdateHttpRouteRequest.pb( + gcn_http_route.UpdateHttpRouteRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson( + operations_pb2.Operation() + ) + + request = gcn_http_route.UpdateHttpRouteRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = operations_pb2.Operation() + + client.update_http_route( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_http_route_rest_bad_request( + transport: str = "rest", request_type=gcn_http_route.UpdateHttpRouteRequest +): + client = NetworkServicesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "http_route": {"name": "projects/sample1/locations/sample2/httpRoutes/sample3"} } request = request_type(**request_init) @@ -18349,8 +18527,9 @@ def test_list_tcp_routes_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = tcp_route.ListTcpRoutesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = tcp_route.ListTcpRoutesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -18432,8 +18611,9 @@ def test_list_tcp_routes_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = tcp_route.ListTcpRoutesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = tcp_route.ListTcpRoutesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -18564,8 +18744,9 @@ def test_list_tcp_routes_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = tcp_route.ListTcpRoutesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = tcp_route.ListTcpRoutesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -18688,8 +18869,9 @@ def test_get_tcp_route_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = tcp_route.TcpRoute.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = tcp_route.TcpRoute.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -18766,8 +18948,9 @@ def test_get_tcp_route_rest_required_fields(request_type=tcp_route.GetTcpRouteRe response_value = Response() response_value.status_code = 200 - pb_return_value = tcp_route.TcpRoute.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = tcp_route.TcpRoute.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -18890,8 +19073,9 @@ def test_get_tcp_route_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = tcp_route.TcpRoute.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = tcp_route.TcpRoute.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -18964,6 +19148,73 @@ def test_create_tcp_route_rest(request_type): "gateways": ["gateways_value1", "gateways_value2"], "labels": {}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_tcp_route.CreateTcpRouteRequest.meta.fields["tcp_route"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["tcp_route"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["tcp_route"][field])): + del request_init["tcp_route"][field][i][subfield] + else: + del request_init["tcp_route"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -19162,27 +19413,6 @@ def test_create_tcp_route_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["tcp_route"] = { - "name": "name_value", - "self_link": "self_link_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "description": "description_value", - "rules": [ - { - "matches": [{"address": "address_value", "port": "port_value"}], - "action": { - "destinations": [ - {"service_name": "service_name_value", "weight": 648} - ], - "original_destination": True, - }, - } - ], - "meshes": ["meshes_value1", "meshes_value2"], - "gateways": ["gateways_value1", "gateways_value2"], - "labels": {}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -19299,6 +19529,73 @@ def test_update_tcp_route_rest(request_type): "gateways": ["gateways_value1", "gateways_value2"], "labels": {}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_tcp_route.UpdateTcpRouteRequest.meta.fields["tcp_route"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["tcp_route"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["tcp_route"][field])): + del request_init["tcp_route"][field][i][subfield] + else: + del request_init["tcp_route"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -19472,27 +19769,6 @@ def test_update_tcp_route_rest_bad_request( request_init = { "tcp_route": {"name": "projects/sample1/locations/sample2/tcpRoutes/sample3"} } - request_init["tcp_route"] = { - "name": "projects/sample1/locations/sample2/tcpRoutes/sample3", - "self_link": "self_link_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "description": "description_value", - "rules": [ - { - "matches": [{"address": "address_value", "port": "port_value"}], - "action": { - "destinations": [ - {"service_name": "service_name_value", "weight": 648} - ], - "original_destination": True, - }, - } - ], - "meshes": ["meshes_value1", "meshes_value2"], - "gateways": ["gateways_value1", "gateways_value2"], - "labels": {}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -19865,8 +20141,9 @@ def test_list_tls_routes_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = tls_route.ListTlsRoutesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = tls_route.ListTlsRoutesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -19948,8 +20225,9 @@ def test_list_tls_routes_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = tls_route.ListTlsRoutesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = tls_route.ListTlsRoutesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -20080,8 +20358,9 @@ def test_list_tls_routes_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = tls_route.ListTlsRoutesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = tls_route.ListTlsRoutesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -20204,8 +20483,9 @@ def test_get_tls_route_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = tls_route.TlsRoute.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = tls_route.TlsRoute.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -20282,8 +20562,9 @@ def test_get_tls_route_rest_required_fields(request_type=tls_route.GetTlsRouteRe response_value = Response() response_value.status_code = 200 - pb_return_value = tls_route.TlsRoute.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = tls_route.TlsRoute.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -20406,8 +20687,9 @@ def test_get_tls_route_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = tls_route.TlsRoute.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = tls_route.TlsRoute.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -20483,6 +20765,73 @@ def test_create_tls_route_rest(request_type): "meshes": ["meshes_value1", "meshes_value2"], "gateways": ["gateways_value1", "gateways_value2"], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_tls_route.CreateTlsRouteRequest.meta.fields["tls_route"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["tls_route"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["tls_route"][field])): + del request_init["tls_route"][field][i][subfield] + else: + del request_init["tls_route"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -20681,30 +21030,6 @@ def test_create_tls_route_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["tls_route"] = { - "name": "name_value", - "self_link": "self_link_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "description": "description_value", - "rules": [ - { - "matches": [ - { - "sni_host": ["sni_host_value1", "sni_host_value2"], - "alpn": ["alpn_value1", "alpn_value2"], - } - ], - "action": { - "destinations": [ - {"service_name": "service_name_value", "weight": 648} - ] - }, - } - ], - "meshes": ["meshes_value1", "meshes_value2"], - "gateways": ["gateways_value1", "gateways_value2"], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -20824,6 +21149,73 @@ def test_update_tls_route_rest(request_type): "meshes": ["meshes_value1", "meshes_value2"], "gateways": ["gateways_value1", "gateways_value2"], } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_tls_route.UpdateTlsRouteRequest.meta.fields["tls_route"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["tls_route"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["tls_route"][field])): + del request_init["tls_route"][field][i][subfield] + else: + del request_init["tls_route"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -20997,30 +21389,6 @@ def test_update_tls_route_rest_bad_request( request_init = { "tls_route": {"name": "projects/sample1/locations/sample2/tlsRoutes/sample3"} } - request_init["tls_route"] = { - "name": "projects/sample1/locations/sample2/tlsRoutes/sample3", - "self_link": "self_link_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "description": "description_value", - "rules": [ - { - "matches": [ - { - "sni_host": ["sni_host_value1", "sni_host_value2"], - "alpn": ["alpn_value1", "alpn_value2"], - } - ], - "action": { - "destinations": [ - {"service_name": "service_name_value", "weight": 648} - ] - }, - } - ], - "meshes": ["meshes_value1", "meshes_value2"], - "gateways": ["gateways_value1", "gateways_value2"], - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -21393,8 +21761,9 @@ def test_list_service_bindings_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service_binding.ListServiceBindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service_binding.ListServiceBindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -21476,10 +21845,9 @@ def test_list_service_bindings_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service_binding.ListServiceBindingsResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service_binding.ListServiceBindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -21612,8 +21980,9 @@ def test_list_service_bindings_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service_binding.ListServiceBindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service_binding.ListServiceBindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -21739,8 +22108,9 @@ def test_get_service_binding_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service_binding.ServiceBinding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service_binding.ServiceBinding.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -21817,8 +22187,9 @@ def test_get_service_binding_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service_binding.ServiceBinding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service_binding.ServiceBinding.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -21947,8 +22318,9 @@ def test_get_service_binding_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service_binding.ServiceBinding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service_binding.ServiceBinding.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -22009,6 +22381,75 @@ def test_create_service_binding_rest(request_type): "service": "service_value", "labels": {}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_service_binding.CreateServiceBindingRequest.meta.fields[ + "service_binding" + ] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["service_binding"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["service_binding"][field])): + del request_init["service_binding"][field][i][subfield] + else: + del request_init["service_binding"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -22208,14 +22649,6 @@ def test_create_service_binding_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["service_binding"] = { - "name": "name_value", - "description": "description_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "service": "service_value", - "labels": {}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -22591,8 +23024,9 @@ def test_list_meshes_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = mesh.ListMeshesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = mesh.ListMeshesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -22672,8 +23106,9 @@ def test_list_meshes_rest_required_fields(request_type=mesh.ListMeshesRequest): response_value = Response() response_value.status_code = 200 - pb_return_value = mesh.ListMeshesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = mesh.ListMeshesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -22804,8 +23239,9 @@ def test_list_meshes_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = mesh.ListMeshesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = mesh.ListMeshesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -22927,8 +23363,9 @@ def test_get_mesh_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = mesh.Mesh.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = mesh.Mesh.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -23004,8 +23441,9 @@ def test_get_mesh_rest_required_fields(request_type=mesh.GetMeshRequest): response_value = Response() response_value.status_code = 200 - pb_return_value = mesh.Mesh.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = mesh.Mesh.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -23126,8 +23564,9 @@ def test_get_mesh_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = mesh.Mesh.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = mesh.Mesh.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -23188,6 +23627,73 @@ def test_create_mesh_rest(request_type): "description": "description_value", "interception_port": 1848, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_mesh.CreateMeshRequest.meta.fields["mesh"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["mesh"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["mesh"][field])): + del request_init["mesh"][field][i][subfield] + else: + del request_init["mesh"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -23382,15 +23888,6 @@ def test_create_mesh_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["mesh"] = { - "name": "name_value", - "self_link": "self_link_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "description": "description_value", - "interception_port": 1848, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -23495,6 +23992,73 @@ def test_update_mesh_rest(request_type): "description": "description_value", "interception_port": 1848, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = gcn_mesh.UpdateMeshRequest.meta.fields["mesh"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["mesh"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["mesh"][field])): + del request_init["mesh"][field][i][subfield] + else: + del request_init["mesh"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -23664,15 +24228,6 @@ def test_update_mesh_rest_bad_request( request_init = { "mesh": {"name": "projects/sample1/locations/sample2/meshes/sample3"} } - request_init["mesh"] = { - "name": "projects/sample1/locations/sample2/meshes/sample3", - "self_link": "self_link_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "labels": {}, - "description": "description_value", - "interception_port": 1848, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. diff --git a/packages/google-cloud-notebooks/CONTRIBUTING.rst b/packages/google-cloud-notebooks/CONTRIBUTING.rst index e044d75901a2..367329f37474 100644 --- a/packages/google-cloud-notebooks/CONTRIBUTING.rst +++ b/packages/google-cloud-notebooks/CONTRIBUTING.rst @@ -143,12 +143,12 @@ Running System Tests $ nox -s system # Run a single system test - $ nox -s system- -- -k + $ nox -s system-3.11 -- -k .. note:: - System tests are only configured to run under Python. + System tests are only configured to run under Python 3.8, 3.9, 3.10 and 3.11. For expediency, we do not run them in older versions of Python 3. This alone will not run the tests. You'll need to change some local diff --git a/packages/google-cloud-notebooks/google/cloud/notebooks/gapic_version.py b/packages/google-cloud-notebooks/google/cloud/notebooks/gapic_version.py index 77568987f69a..360a0d13ebdd 100644 --- a/packages/google-cloud-notebooks/google/cloud/notebooks/gapic_version.py +++ b/packages/google-cloud-notebooks/google/cloud/notebooks/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.8.1" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-notebooks/google/cloud/notebooks_v1/gapic_version.py b/packages/google-cloud-notebooks/google/cloud/notebooks_v1/gapic_version.py index 77568987f69a..360a0d13ebdd 100644 --- a/packages/google-cloud-notebooks/google/cloud/notebooks_v1/gapic_version.py +++ b/packages/google-cloud-notebooks/google/cloud/notebooks_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.8.1" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-notebooks/google/cloud/notebooks_v1beta1/gapic_version.py b/packages/google-cloud-notebooks/google/cloud/notebooks_v1beta1/gapic_version.py index 77568987f69a..360a0d13ebdd 100644 --- a/packages/google-cloud-notebooks/google/cloud/notebooks_v1beta1/gapic_version.py +++ b/packages/google-cloud-notebooks/google/cloud/notebooks_v1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.8.1" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-notebooks/google/cloud/notebooks_v2/gapic_version.py b/packages/google-cloud-notebooks/google/cloud/notebooks_v2/gapic_version.py index 77568987f69a..360a0d13ebdd 100644 --- a/packages/google-cloud-notebooks/google/cloud/notebooks_v2/gapic_version.py +++ b/packages/google-cloud-notebooks/google/cloud/notebooks_v2/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.8.1" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-notebooks/noxfile.py b/packages/google-cloud-notebooks/noxfile.py index 9a2acd8b6787..be54712bfa8f 100644 --- a/packages/google-cloud-notebooks/noxfile.py +++ b/packages/google-cloud-notebooks/noxfile.py @@ -46,7 +46,7 @@ UNIT_TEST_EXTRAS = [] UNIT_TEST_EXTRAS_BY_PYTHON = {} -SYSTEM_TEST_PYTHON_VERSIONS = [] +SYSTEM_TEST_PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11"] SYSTEM_TEST_STANDARD_DEPENDENCIES = [ "mock", "pytest", @@ -405,24 +405,3 @@ def prerelease_deps(session): session.run("python", "-c", "import google.auth; print(google.auth.__version__)") session.run("py.test", "tests/unit") - - system_test_path = os.path.join("tests", "system.py") - system_test_folder_path = os.path.join("tests", "system") - - # Only run system tests if found. - if os.path.exists(system_test_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_path, - *session.posargs, - ) - if os.path.exists(system_test_folder_path): - session.run( - "py.test", - "--verbose", - f"--junitxml=system_{session.python}_sponge_log.xml", - system_test_folder_path, - *session.posargs, - ) diff --git a/packages/google-cloud-notebooks/samples/generated_samples/snippet_metadata_google.cloud.notebooks.v1.json b/packages/google-cloud-notebooks/samples/generated_samples/snippet_metadata_google.cloud.notebooks.v1.json index 979517bb8fdc..1e5dcb8dbe89 100644 --- a/packages/google-cloud-notebooks/samples/generated_samples/snippet_metadata_google.cloud.notebooks.v1.json +++ b/packages/google-cloud-notebooks/samples/generated_samples/snippet_metadata_google.cloud.notebooks.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-notebooks", - "version": "1.8.1" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-notebooks/samples/generated_samples/snippet_metadata_google.cloud.notebooks.v1beta1.json b/packages/google-cloud-notebooks/samples/generated_samples/snippet_metadata_google.cloud.notebooks.v1beta1.json index f08da2c0f86b..7bc31789024f 100644 --- a/packages/google-cloud-notebooks/samples/generated_samples/snippet_metadata_google.cloud.notebooks.v1beta1.json +++ b/packages/google-cloud-notebooks/samples/generated_samples/snippet_metadata_google.cloud.notebooks.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-notebooks", - "version": "1.8.1" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-notebooks/samples/generated_samples/snippet_metadata_google.cloud.notebooks.v2.json b/packages/google-cloud-notebooks/samples/generated_samples/snippet_metadata_google.cloud.notebooks.v2.json index 5eed62c5422d..6fad38d8fc89 100644 --- a/packages/google-cloud-notebooks/samples/generated_samples/snippet_metadata_google.cloud.notebooks.v2.json +++ b/packages/google-cloud-notebooks/samples/generated_samples/snippet_metadata_google.cloud.notebooks.v2.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-notebooks", - "version": "1.8.1" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-notebooks/tests/unit/gapic/notebooks_v1beta1/test_notebook_service.py b/packages/google-cloud-notebooks/tests/unit/gapic/notebooks_v1beta1/test_notebook_service.py index d61c4fc0417f..ab9ac060acc0 100644 --- a/packages/google-cloud-notebooks/tests/unit/gapic/notebooks_v1beta1/test_notebook_service.py +++ b/packages/google-cloud-notebooks/tests/unit/gapic/notebooks_v1beta1/test_notebook_service.py @@ -4138,8 +4138,9 @@ def test_list_instances_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListInstancesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListInstancesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4220,8 +4221,9 @@ def test_list_instances_rest_required_fields(request_type=service.ListInstancesR response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListInstancesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListInstancesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4438,8 +4440,9 @@ def test_get_instance_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = instance.Instance.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = instance.Instance.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4533,8 +4536,9 @@ def test_get_instance_rest_required_fields(request_type=service.GetInstanceReque response_value = Response() response_value.status_code = 200 - pb_return_value = instance.Instance.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = instance.Instance.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -4693,6 +4697,73 @@ def test_create_instance_rest(request_type): "create_time": {"seconds": 751, "nanos": 543}, "update_time": {}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = service.CreateInstanceRequest.meta.fields["instance"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["instance"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["instance"][field])): + del request_init["instance"][field][i][subfield] + else: + del request_init["instance"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -4889,46 +4960,6 @@ def test_create_instance_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["instance"] = { - "name": "name_value", - "vm_image": { - "project": "project_value", - "image_name": "image_name_value", - "image_family": "image_family_value", - }, - "container_image": {"repository": "repository_value", "tag": "tag_value"}, - "post_startup_script": "post_startup_script_value", - "proxy_uri": "proxy_uri_value", - "instance_owners": ["instance_owners_value1", "instance_owners_value2"], - "service_account": "service_account_value", - "machine_type": "machine_type_value", - "accelerator_config": {"type_": 1, "core_count": 1073}, - "state": 1, - "install_gpu_driver": True, - "custom_gpu_driver_path": "custom_gpu_driver_path_value", - "boot_disk_type": 1, - "boot_disk_size_gb": 1792, - "data_disk_type": 1, - "data_disk_size_gb": 1766, - "no_remove_data_disk": True, - "disk_encryption": 1, - "kms_key": "kms_key_value", - "no_public_ip": True, - "no_proxy_access": True, - "network": "network_value", - "subnet": "subnet_value", - "labels": {}, - "metadata": {}, - "nic_type": 1, - "reservation_affinity": { - "consume_reservation_type": 1, - "key": "key_value", - "values": ["values_value1", "values_value2"], - }, - "can_ip_forward": True, - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -6896,8 +6927,9 @@ def test_is_instance_upgradeable_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.IsInstanceUpgradeableResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.IsInstanceUpgradeableResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -6975,8 +7007,9 @@ def test_is_instance_upgradeable_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.IsInstanceUpgradeableResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.IsInstanceUpgradeableResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7542,8 +7575,9 @@ def test_list_environments_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListEnvironmentsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListEnvironmentsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7626,8 +7660,9 @@ def test_list_environments_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListEnvironmentsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListEnvironmentsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7828,8 +7863,9 @@ def test_get_environment_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = environment.Environment.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = environment.Environment.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -7907,8 +7943,9 @@ def test_get_environment_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = environment.Environment.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = environment.Environment.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -8042,6 +8079,73 @@ def test_create_environment_rest(request_type): "post_startup_script": "post_startup_script_value", "create_time": {"seconds": 751, "nanos": 543}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = service.CreateEnvironmentRequest.meta.fields["environment"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["environment"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["environment"][field])): + del request_init["environment"][field][i][subfield] + else: + del request_init["environment"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -8240,19 +8344,6 @@ def test_create_environment_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["environment"] = { - "name": "name_value", - "display_name": "display_name_value", - "description": "description_value", - "vm_image": { - "project": "project_value", - "image_name": "image_name_value", - "image_family": "image_family_value", - }, - "container_image": {"repository": "repository_value", "tag": "tag_value"}, - "post_startup_script": "post_startup_script_value", - "create_time": {"seconds": 751, "nanos": 543}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. diff --git a/packages/google-cloud-notebooks/tests/unit/gapic/notebooks_v2/test_notebook_service.py b/packages/google-cloud-notebooks/tests/unit/gapic/notebooks_v2/test_notebook_service.py index c1d4b50faeab..5788f979f4dc 100644 --- a/packages/google-cloud-notebooks/tests/unit/gapic/notebooks_v2/test_notebook_service.py +++ b/packages/google-cloud-notebooks/tests/unit/gapic/notebooks_v2/test_notebook_service.py @@ -3326,8 +3326,9 @@ def test_list_instances_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListInstancesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListInstancesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3410,8 +3411,9 @@ def test_list_instances_rest_required_fields(request_type=service.ListInstancesR response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListInstancesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListInstancesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3544,8 +3546,9 @@ def test_list_instances_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.ListInstancesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.ListInstancesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3671,8 +3674,9 @@ def test_get_instance_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = instance.Instance.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = instance.Instance.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3752,8 +3756,9 @@ def test_get_instance_rest_required_fields(request_type=service.GetInstanceReque response_value = Response() response_value.status_code = 200 - pb_return_value = instance.Instance.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = instance.Instance.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3876,8 +3881,9 @@ def test_get_instance_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = instance.Instance.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = instance.Instance.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -3999,6 +4005,73 @@ def test_create_instance_rest(request_type): "disable_proxy_access": True, "labels": {}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = service.CreateInstanceRequest.meta.fields["instance"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["instance"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["instance"][field])): + del request_init["instance"][field][i][subfield] + else: + del request_init["instance"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -4205,76 +4278,6 @@ def test_create_instance_rest_bad_request( # send a request that will satisfy transcoding request_init = {"parent": "projects/sample1/locations/sample2"} - request_init["instance"] = { - "name": "name_value", - "gce_setup": { - "machine_type": "machine_type_value", - "accelerator_configs": [{"type_": 2, "core_count": 1073}], - "service_accounts": [ - {"email": "email_value", "scopes": ["scopes_value1", "scopes_value2"]} - ], - "vm_image": { - "project": "project_value", - "name": "name_value", - "family": "family_value", - }, - "container_image": {"repository": "repository_value", "tag": "tag_value"}, - "boot_disk": { - "disk_size_gb": 1261, - "disk_type": 1, - "disk_encryption": 1, - "kms_key": "kms_key_value", - }, - "data_disks": [ - { - "disk_size_gb": 1261, - "disk_type": 1, - "disk_encryption": 1, - "kms_key": "kms_key_value", - } - ], - "shielded_instance_config": { - "enable_secure_boot": True, - "enable_vtpm": True, - "enable_integrity_monitoring": True, - }, - "network_interfaces": [ - {"network": "network_value", "subnet": "subnet_value", "nic_type": 1} - ], - "disable_public_ip": True, - "tags": ["tags_value1", "tags_value2"], - "metadata": {}, - "enable_ip_forwarding": True, - "gpu_driver_config": { - "enable_gpu_driver": True, - "custom_gpu_driver_path": "custom_gpu_driver_path_value", - }, - }, - "proxy_uri": "proxy_uri_value", - "instance_owners": ["instance_owners_value1", "instance_owners_value2"], - "creator": "creator_value", - "state": 1, - "upgrade_history": [ - { - "snapshot": "snapshot_value", - "vm_image": "vm_image_value", - "container_image": "container_image_value", - "framework": "framework_value", - "version": "version_value", - "state": 1, - "create_time": {"seconds": 751, "nanos": 543}, - "action": 1, - "target_version": "target_version_value", - } - ], - "id": "id_value", - "health_state": 1, - "health_info": {}, - "create_time": {}, - "update_time": {}, - "disable_proxy_access": True, - "labels": {}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -4440,6 +4443,73 @@ def test_update_instance_rest(request_type): "disable_proxy_access": True, "labels": {}, } + # The version of a generated dependency at test runtime may differ from the version used during generation. + # Delete any fields which are not present in the current runtime dependency + # See https://github.com/googleapis/gapic-generator-python/issues/1748 + + # Determine if the message type is proto-plus or protobuf + test_field = service.UpdateInstanceRequest.meta.fields["instance"] + + def get_message_fields(field): + # Given a field which is a message (composite type), return a list with + # all the fields of the message. + # If the field is not a composite type, return an empty list. + message_fields = [] + + if hasattr(field, "message") and field.message: + is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR") + + if is_field_type_proto_plus_type: + message_fields = field.message.meta.fields.values() + # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types + else: # pragma: NO COVER + message_fields = field.message.DESCRIPTOR.fields + return message_fields + + runtime_nested_fields = [ + (field.name, nested_field.name) + for field in get_message_fields(test_field) + for nested_field in get_message_fields(field) + ] + + subfields_not_in_runtime = [] + + # For each item in the sample request, create a list of sub fields which are not present at runtime + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for field, value in request_init["instance"].items(): # pragma: NO COVER + result = None + is_repeated = False + # For repeated fields + if isinstance(value, list) and len(value): + is_repeated = True + result = value[0] + # For fields where the type is another message + if isinstance(value, dict): + result = value + + if result and hasattr(result, "keys"): + for subfield in result.keys(): + if (field, subfield) not in runtime_nested_fields: + subfields_not_in_runtime.append( + { + "field": field, + "subfield": subfield, + "is_repeated": is_repeated, + } + ) + + # Remove fields from the sample request which are not present in the runtime version of the dependency + # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime + for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER + field = subfield_to_delete.get("field") + field_repeated = subfield_to_delete.get("is_repeated") + subfield = subfield_to_delete.get("subfield") + if subfield: + if field_repeated: + for i in range(0, len(request_init["instance"][field])): + del request_init["instance"][field][i][subfield] + else: + del request_init["instance"][field][subfield] request = request_type(**request_init) # Mock the http request call within the method and fake a response. @@ -4629,76 +4699,6 @@ def test_update_instance_rest_bad_request( request_init = { "instance": {"name": "projects/sample1/locations/sample2/instances/sample3"} } - request_init["instance"] = { - "name": "projects/sample1/locations/sample2/instances/sample3", - "gce_setup": { - "machine_type": "machine_type_value", - "accelerator_configs": [{"type_": 2, "core_count": 1073}], - "service_accounts": [ - {"email": "email_value", "scopes": ["scopes_value1", "scopes_value2"]} - ], - "vm_image": { - "project": "project_value", - "name": "name_value", - "family": "family_value", - }, - "container_image": {"repository": "repository_value", "tag": "tag_value"}, - "boot_disk": { - "disk_size_gb": 1261, - "disk_type": 1, - "disk_encryption": 1, - "kms_key": "kms_key_value", - }, - "data_disks": [ - { - "disk_size_gb": 1261, - "disk_type": 1, - "disk_encryption": 1, - "kms_key": "kms_key_value", - } - ], - "shielded_instance_config": { - "enable_secure_boot": True, - "enable_vtpm": True, - "enable_integrity_monitoring": True, - }, - "network_interfaces": [ - {"network": "network_value", "subnet": "subnet_value", "nic_type": 1} - ], - "disable_public_ip": True, - "tags": ["tags_value1", "tags_value2"], - "metadata": {}, - "enable_ip_forwarding": True, - "gpu_driver_config": { - "enable_gpu_driver": True, - "custom_gpu_driver_path": "custom_gpu_driver_path_value", - }, - }, - "proxy_uri": "proxy_uri_value", - "instance_owners": ["instance_owners_value1", "instance_owners_value2"], - "creator": "creator_value", - "state": 1, - "upgrade_history": [ - { - "snapshot": "snapshot_value", - "vm_image": "vm_image_value", - "container_image": "container_image_value", - "framework": "framework_value", - "version": "version_value", - "state": 1, - "create_time": {"seconds": 751, "nanos": 543}, - "action": 1, - "target_version": "target_version_value", - } - ], - "id": "id_value", - "health_state": 1, - "health_info": {}, - "create_time": {}, - "update_time": {}, - "disable_proxy_access": True, - "labels": {}, - } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -5689,8 +5689,9 @@ def test_check_instance_upgradability_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = service.CheckInstanceUpgradabilityResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.CheckInstanceUpgradabilityResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value @@ -5768,10 +5769,9 @@ def test_check_instance_upgradability_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = service.CheckInstanceUpgradabilityResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + # Convert return value to protobuf type + return_value = service.CheckInstanceUpgradabilityResponse.pb(return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value