From bb05ef8af22def311fa5e2604452982c9a9ec79b Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Tue, 21 Jul 2026 16:13:26 -0700 Subject: [PATCH 01/23] chore(bigtable): move bigtable samples into per-client directories --- ..._generated_bigtable_instance_admin_create_app_profile_async.py | 0 ...2_generated_bigtable_instance_admin_create_app_profile_sync.py | 0 ...n_v2_generated_bigtable_instance_admin_create_cluster_async.py | 0 ...in_v2_generated_bigtable_instance_admin_create_cluster_sync.py | 0 ..._v2_generated_bigtable_instance_admin_create_instance_async.py | 0 ...n_v2_generated_bigtable_instance_admin_create_instance_sync.py | 0 ...generated_bigtable_instance_admin_create_logical_view_async.py | 0 ..._generated_bigtable_instance_admin_create_logical_view_sync.py | 0 ...ated_bigtable_instance_admin_create_materialized_view_async.py | 0 ...rated_bigtable_instance_admin_create_materialized_view_sync.py | 0 ..._generated_bigtable_instance_admin_delete_app_profile_async.py | 0 ...2_generated_bigtable_instance_admin_delete_app_profile_sync.py | 0 ...n_v2_generated_bigtable_instance_admin_delete_cluster_async.py | 0 ...in_v2_generated_bigtable_instance_admin_delete_cluster_sync.py | 0 ..._v2_generated_bigtable_instance_admin_delete_instance_async.py | 0 ...n_v2_generated_bigtable_instance_admin_delete_instance_sync.py | 0 ...generated_bigtable_instance_admin_delete_logical_view_async.py | 0 ..._generated_bigtable_instance_admin_delete_logical_view_sync.py | 0 ...ated_bigtable_instance_admin_delete_materialized_view_async.py | 0 ...rated_bigtable_instance_admin_delete_materialized_view_sync.py | 0 ..._v2_generated_bigtable_instance_admin_get_app_profile_async.py | 0 ...n_v2_generated_bigtable_instance_admin_get_app_profile_sync.py | 0 ...dmin_v2_generated_bigtable_instance_admin_get_cluster_async.py | 0 ...admin_v2_generated_bigtable_instance_admin_get_cluster_sync.py | 0 ...n_v2_generated_bigtable_instance_admin_get_iam_policy_async.py | 0 ...in_v2_generated_bigtable_instance_admin_get_iam_policy_sync.py | 0 ...min_v2_generated_bigtable_instance_admin_get_instance_async.py | 0 ...dmin_v2_generated_bigtable_instance_admin_get_instance_sync.py | 0 ...v2_generated_bigtable_instance_admin_get_logical_view_async.py | 0 ..._v2_generated_bigtable_instance_admin_get_logical_view_sync.py | 0 ...nerated_bigtable_instance_admin_get_materialized_view_async.py | 0 ...enerated_bigtable_instance_admin_get_materialized_view_sync.py | 0 ...2_generated_bigtable_instance_admin_list_app_profiles_async.py | 0 ...v2_generated_bigtable_instance_admin_list_app_profiles_sync.py | 0 ...in_v2_generated_bigtable_instance_admin_list_clusters_async.py | 0 ...min_v2_generated_bigtable_instance_admin_list_clusters_sync.py | 0 ...v2_generated_bigtable_instance_admin_list_hot_tablets_async.py | 0 ..._v2_generated_bigtable_instance_admin_list_hot_tablets_sync.py | 0 ...n_v2_generated_bigtable_instance_admin_list_instances_async.py | 0 ...in_v2_generated_bigtable_instance_admin_list_instances_sync.py | 0 ..._generated_bigtable_instance_admin_list_logical_views_async.py | 0 ...2_generated_bigtable_instance_admin_list_logical_views_sync.py | 0 ...rated_bigtable_instance_admin_list_materialized_views_async.py | 0 ...erated_bigtable_instance_admin_list_materialized_views_sync.py | 0 ...erated_bigtable_instance_admin_partial_update_cluster_async.py | 0 ...nerated_bigtable_instance_admin_partial_update_cluster_sync.py | 0 ...rated_bigtable_instance_admin_partial_update_instance_async.py | 0 ...erated_bigtable_instance_admin_partial_update_instance_sync.py | 0 ...n_v2_generated_bigtable_instance_admin_set_iam_policy_async.py | 0 ...in_v2_generated_bigtable_instance_admin_set_iam_policy_sync.py | 0 ...enerated_bigtable_instance_admin_test_iam_permissions_async.py | 0 ...generated_bigtable_instance_admin_test_iam_permissions_sync.py | 0 ..._generated_bigtable_instance_admin_update_app_profile_async.py | 0 ...2_generated_bigtable_instance_admin_update_app_profile_sync.py | 0 ...n_v2_generated_bigtable_instance_admin_update_cluster_async.py | 0 ...in_v2_generated_bigtable_instance_admin_update_cluster_sync.py | 0 ..._v2_generated_bigtable_instance_admin_update_instance_async.py | 0 ...n_v2_generated_bigtable_instance_admin_update_instance_sync.py | 0 ...generated_bigtable_instance_admin_update_logical_view_async.py | 0 ..._generated_bigtable_instance_admin_update_logical_view_sync.py | 0 ...ated_bigtable_instance_admin_update_materialized_view_async.py | 0 ...rated_bigtable_instance_admin_update_materialized_view_sync.py | 0 ...n_v2_generated_bigtable_table_admin_check_consistency_async.py | 0 ...in_v2_generated_bigtable_table_admin_check_consistency_sync.py | 0 ...leadmin_v2_generated_bigtable_table_admin_copy_backup_async.py | 0 ...bleadmin_v2_generated_bigtable_table_admin_copy_backup_sync.py | 0 ...generated_bigtable_table_admin_create_authorized_view_async.py | 0 ..._generated_bigtable_table_admin_create_authorized_view_sync.py | 0 ...admin_v2_generated_bigtable_table_admin_create_backup_async.py | 0 ...eadmin_v2_generated_bigtable_table_admin_create_backup_sync.py | 0 ...2_generated_bigtable_table_admin_create_schema_bundle_async.py | 0 ...v2_generated_bigtable_table_admin_create_schema_bundle_sync.py | 0 ...eadmin_v2_generated_bigtable_table_admin_create_table_async.py | 0 ...rated_bigtable_table_admin_create_table_from_snapshot_async.py | 0 ...erated_bigtable_table_admin_create_table_from_snapshot_sync.py | 0 ...leadmin_v2_generated_bigtable_table_admin_create_table_sync.py | 0 ...generated_bigtable_table_admin_delete_authorized_view_async.py | 0 ..._generated_bigtable_table_admin_delete_authorized_view_sync.py | 0 ...admin_v2_generated_bigtable_table_admin_delete_backup_async.py | 0 ...eadmin_v2_generated_bigtable_table_admin_delete_backup_sync.py | 0 ...2_generated_bigtable_table_admin_delete_schema_bundle_async.py | 0 ...v2_generated_bigtable_table_admin_delete_schema_bundle_sync.py | 0 ...min_v2_generated_bigtable_table_admin_delete_snapshot_async.py | 0 ...dmin_v2_generated_bigtable_table_admin_delete_snapshot_sync.py | 0 ...eadmin_v2_generated_bigtable_table_admin_delete_table_async.py | 0 ...leadmin_v2_generated_bigtable_table_admin_delete_table_sync.py | 0 ...dmin_v2_generated_bigtable_table_admin_drop_row_range_async.py | 0 ...admin_v2_generated_bigtable_table_admin_drop_row_range_sync.py | 0 ...rated_bigtable_table_admin_generate_consistency_token_async.py | 0 ...erated_bigtable_table_admin_generate_consistency_token_sync.py | 0 ...v2_generated_bigtable_table_admin_get_authorized_view_async.py | 0 ..._v2_generated_bigtable_table_admin_get_authorized_view_sync.py | 0 ...bleadmin_v2_generated_bigtable_table_admin_get_backup_async.py | 0 ...ableadmin_v2_generated_bigtable_table_admin_get_backup_sync.py | 0 ...dmin_v2_generated_bigtable_table_admin_get_iam_policy_async.py | 0 ...admin_v2_generated_bigtable_table_admin_get_iam_policy_sync.py | 0 ...n_v2_generated_bigtable_table_admin_get_schema_bundle_async.py | 0 ...in_v2_generated_bigtable_table_admin_get_schema_bundle_sync.py | 0 ...eadmin_v2_generated_bigtable_table_admin_get_snapshot_async.py | 0 ...leadmin_v2_generated_bigtable_table_admin_get_snapshot_sync.py | 0 ...ableadmin_v2_generated_bigtable_table_admin_get_table_async.py | 0 ...tableadmin_v2_generated_bigtable_table_admin_get_table_sync.py | 0 ..._generated_bigtable_table_admin_list_authorized_views_async.py | 0 ...2_generated_bigtable_table_admin_list_authorized_views_sync.py | 0 ...eadmin_v2_generated_bigtable_table_admin_list_backups_async.py | 0 ...leadmin_v2_generated_bigtable_table_admin_list_backups_sync.py | 0 ...v2_generated_bigtable_table_admin_list_schema_bundles_async.py | 0 ..._v2_generated_bigtable_table_admin_list_schema_bundles_sync.py | 0 ...dmin_v2_generated_bigtable_table_admin_list_snapshots_async.py | 0 ...admin_v2_generated_bigtable_table_admin_list_snapshots_sync.py | 0 ...leadmin_v2_generated_bigtable_table_admin_list_tables_async.py | 0 ...bleadmin_v2_generated_bigtable_table_admin_list_tables_sync.py | 0 ...generated_bigtable_table_admin_modify_column_families_async.py | 0 ..._generated_bigtable_table_admin_modify_column_families_sync.py | 0 ...generated_bigtable_table_admin_restore_table_async_internal.py | 0 ..._generated_bigtable_table_admin_restore_table_sync_internal.py | 0 ...dmin_v2_generated_bigtable_table_admin_set_iam_policy_async.py | 0 ...admin_v2_generated_bigtable_table_admin_set_iam_policy_sync.py | 0 ...dmin_v2_generated_bigtable_table_admin_snapshot_table_async.py | 0 ...admin_v2_generated_bigtable_table_admin_snapshot_table_sync.py | 0 ...2_generated_bigtable_table_admin_test_iam_permissions_async.py | 0 ...v2_generated_bigtable_table_admin_test_iam_permissions_sync.py | 0 ...dmin_v2_generated_bigtable_table_admin_undelete_table_async.py | 0 ...admin_v2_generated_bigtable_table_admin_undelete_table_sync.py | 0 ...generated_bigtable_table_admin_update_authorized_view_async.py | 0 ..._generated_bigtable_table_admin_update_authorized_view_sync.py | 0 ...admin_v2_generated_bigtable_table_admin_update_backup_async.py | 0 ...eadmin_v2_generated_bigtable_table_admin_update_backup_sync.py | 0 ...2_generated_bigtable_table_admin_update_schema_bundle_async.py | 0 ...v2_generated_bigtable_table_admin_update_schema_bundle_sync.py | 0 ...eadmin_v2_generated_bigtable_table_admin_update_table_async.py | 0 ...leadmin_v2_generated_bigtable_table_admin_update_table_sync.py | 0 .../snippet_metadata_google.bigtable.admin.v2.json | 0 .../samples/{ => data_client}/hello/async_main.py | 0 .../samples/{ => data_client}/hello/async_main_test.py | 0 .../samples/{ => data_client}/quickstart/main_async.py | 0 .../samples/{ => data_client}/quickstart/main_async_test.py | 0 .../samples/{beam => data_client/snippets}/__init__.py | 0 .../snippets}/data_client_snippets_async.py | 0 .../snippets}/data_client_snippets_async_test.py | 0 .../deletes => data_client/snippets}/deletes_async_test.py | 0 .../deletes => data_client/snippets}/deletes_snippets_async.py | 0 .../filters => data_client/snippets}/filter_snippets_async.py | 0 .../snippets}/filter_snippets_async_test.py | 0 .../samples/{hello => data_client/snippets}/noxfile.py | 0 .../{quickstart => data_client/snippets}/requirements-test.txt | 0 .../samples/{quickstart => data_client/snippets}/requirements.txt | 0 .../samples/{hello => legacy_client/beam}/__init__.py | 0 .../samples/{ => legacy_client}/beam/hello_world_write.py | 0 .../samples/{ => legacy_client}/beam/hello_world_write_test.py | 0 .../samples/{ => legacy_client}/beam/noxfile.py | 0 .../samples/{ => legacy_client}/beam/noxfile_config.py | 0 .../samples/{ => legacy_client}/beam/requirements-test.txt | 0 .../samples/{ => legacy_client}/beam/requirements.txt | 0 .../samples/{ => legacy_client}/hello/README.md | 0 .../samples/{hello_happybase => legacy_client/hello}/__init__.py | 0 .../samples/{ => legacy_client}/hello/main.py | 0 .../samples/{ => legacy_client}/hello/main_test.py | 0 .../samples/{hello_happybase => legacy_client/hello}/noxfile.py | 0 .../samples/{ => legacy_client}/hello/requirements-test.txt | 0 .../samples/{ => legacy_client}/hello/requirements.txt | 0 .../samples/{ => legacy_client}/hello_happybase/README.md | 0 .../{quickstart => legacy_client/hello_happybase}/__init__.py | 0 .../samples/{ => legacy_client}/hello_happybase/main.py | 0 .../samples/{ => legacy_client}/hello_happybase/main_test.py | 0 .../{instanceadmin => legacy_client/hello_happybase}/noxfile.py | 0 .../{ => legacy_client}/hello_happybase/requirements-test.txt | 0 .../samples/{ => legacy_client}/hello_happybase/requirements.txt | 0 .../samples/{ => legacy_client}/instanceadmin/README.md | 0 .../samples/{ => legacy_client}/instanceadmin/instanceadmin.py | 0 .../{metricscaler => legacy_client/instanceadmin}/noxfile.py | 0 .../{ => legacy_client}/instanceadmin/requirements-test.txt | 0 .../samples/{ => legacy_client}/instanceadmin/requirements.txt | 0 .../{ => legacy_client}/instanceadmin/test_instanceadmin.py | 0 .../samples/{ => legacy_client}/metricscaler/Dockerfile | 0 .../samples/{ => legacy_client}/metricscaler/README.md | 0 .../samples/{ => legacy_client}/metricscaler/metricscaler.py | 0 .../samples/{ => legacy_client}/metricscaler/metricscaler_test.py | 0 .../samples/{quickstart => legacy_client/metricscaler}/noxfile.py | 0 .../samples/{ => legacy_client}/metricscaler/noxfile_config.py | 0 .../{ => legacy_client}/metricscaler/requirements-test.txt | 0 .../samples/{ => legacy_client}/metricscaler/requirements.txt | 0 .../samples/{ => legacy_client}/quickstart/README.md | 0 .../quickstart}/__init__.py | 0 .../samples/{ => legacy_client}/quickstart/main.py | 0 .../samples/{ => legacy_client}/quickstart/main_test.py | 0 .../{quickstart_happybase => legacy_client/quickstart}/noxfile.py | 0 .../quickstart}/requirements-test.txt | 0 .../data_client => legacy_client/quickstart}/requirements.txt | 0 .../samples/{ => legacy_client}/quickstart_happybase/README.md | 0 .../{snippets => legacy_client/quickstart_happybase}/__init__.py | 0 .../samples/{ => legacy_client}/quickstart_happybase/main.py | 0 .../samples/{ => legacy_client}/quickstart_happybase/main_test.py | 0 .../data_client => legacy_client/quickstart_happybase}/noxfile.py | 0 .../quickstart_happybase/requirements-test.txt | 0 .../{ => legacy_client}/quickstart_happybase/requirements.txt | 0 .../samples/{ => legacy_client}/snippets/README.md | 0 .../{snippets/data_client => legacy_client/snippets}/__init__.py | 0 .../samples/{ => legacy_client}/snippets/deletes/__init__.py | 0 .../{ => legacy_client}/snippets/deletes/deletes_snippets.py | 0 .../samples/{ => legacy_client}/snippets/deletes/deletes_test.py | 0 .../samples/{ => legacy_client}/snippets/deletes/noxfile.py | 0 .../{ => legacy_client}/snippets/deletes/requirements-test.txt | 0 .../samples/{ => legacy_client}/snippets/deletes/requirements.txt | 0 .../samples/{ => legacy_client}/snippets/filters/__init__.py | 0 .../{ => legacy_client}/snippets/filters/filter_snippets.py | 0 .../samples/{ => legacy_client}/snippets/filters/filters_test.py | 0 .../samples/{ => legacy_client}/snippets/filters/noxfile.py | 0 .../{ => legacy_client}/snippets/filters/requirements-test.txt | 0 .../samples/{ => legacy_client}/snippets/filters/requirements.txt | 0 .../{ => legacy_client}/snippets/filters/snapshots/__init__.py | 0 .../snippets/filters/snapshots/snap_filters_test.py | 0 .../samples/{ => legacy_client}/snippets/reads/__init__.py | 0 .../samples/{ => legacy_client}/snippets/reads/noxfile.py | 0 .../samples/{ => legacy_client}/snippets/reads/read_snippets.py | 0 .../samples/{ => legacy_client}/snippets/reads/reads_test.py | 0 .../{ => legacy_client}/snippets/reads/requirements-test.txt | 0 .../samples/{ => legacy_client}/snippets/reads/requirements.txt | 0 .../{ => legacy_client}/snippets/reads/snapshots/__init__.py | 0 .../snippets/reads/snapshots/snap_reads_test.py | 0 .../samples/{ => legacy_client}/snippets/writes/__init__.py | 0 .../samples/{ => legacy_client}/snippets/writes/noxfile.py | 0 .../{ => legacy_client}/snippets/writes/requirements-test.txt | 0 .../samples/{ => legacy_client}/snippets/writes/requirements.txt | 0 .../samples/{ => legacy_client}/snippets/writes/write_batch.py | 0 .../{ => legacy_client}/snippets/writes/write_conditionally.py | 0 .../{ => legacy_client}/snippets/writes/write_increment.py | 0 .../samples/{ => legacy_client}/snippets/writes/write_simple.py | 0 .../samples/{ => legacy_client}/snippets/writes/writes_test.py | 0 .../samples/{ => legacy_client}/tableadmin/README.md | 0 .../samples/{ => legacy_client}/tableadmin/__init__.py | 0 .../samples/{ => legacy_client}/tableadmin/noxfile.py | 0 .../samples/{ => legacy_client}/tableadmin/requirements-test.txt | 0 .../samples/{ => legacy_client}/tableadmin/requirements.txt | 0 .../samples/{ => legacy_client}/tableadmin/tableadmin.py | 0 .../samples/{ => legacy_client}/tableadmin/tableadmin_test.py | 0 236 files changed, 0 insertions(+), 0 deletions(-) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_async_internal.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_sync_internal.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_sync.py (100%) rename packages/google-cloud-bigtable/samples/{ => admin_client}/generated_samples/snippet_metadata_google.bigtable.admin.v2.json (100%) rename packages/google-cloud-bigtable/samples/{ => data_client}/hello/async_main.py (100%) rename packages/google-cloud-bigtable/samples/{ => data_client}/hello/async_main_test.py (100%) rename packages/google-cloud-bigtable/samples/{ => data_client}/quickstart/main_async.py (100%) rename packages/google-cloud-bigtable/samples/{ => data_client}/quickstart/main_async_test.py (100%) rename packages/google-cloud-bigtable/samples/{beam => data_client/snippets}/__init__.py (100%) rename packages/google-cloud-bigtable/samples/{snippets/data_client => data_client/snippets}/data_client_snippets_async.py (100%) rename packages/google-cloud-bigtable/samples/{snippets/data_client => data_client/snippets}/data_client_snippets_async_test.py (100%) rename packages/google-cloud-bigtable/samples/{snippets/deletes => data_client/snippets}/deletes_async_test.py (100%) rename packages/google-cloud-bigtable/samples/{snippets/deletes => data_client/snippets}/deletes_snippets_async.py (100%) rename packages/google-cloud-bigtable/samples/{snippets/filters => data_client/snippets}/filter_snippets_async.py (100%) rename packages/google-cloud-bigtable/samples/{snippets/filters => data_client/snippets}/filter_snippets_async_test.py (100%) rename packages/google-cloud-bigtable/samples/{hello => data_client/snippets}/noxfile.py (100%) rename packages/google-cloud-bigtable/samples/{quickstart => data_client/snippets}/requirements-test.txt (100%) rename packages/google-cloud-bigtable/samples/{quickstart => data_client/snippets}/requirements.txt (100%) rename packages/google-cloud-bigtable/samples/{hello => legacy_client/beam}/__init__.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/beam/hello_world_write.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/beam/hello_world_write_test.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/beam/noxfile.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/beam/noxfile_config.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/beam/requirements-test.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/beam/requirements.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/hello/README.md (100%) rename packages/google-cloud-bigtable/samples/{hello_happybase => legacy_client/hello}/__init__.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/hello/main.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/hello/main_test.py (100%) rename packages/google-cloud-bigtable/samples/{hello_happybase => legacy_client/hello}/noxfile.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/hello/requirements-test.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/hello/requirements.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/hello_happybase/README.md (100%) rename packages/google-cloud-bigtable/samples/{quickstart => legacy_client/hello_happybase}/__init__.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/hello_happybase/main.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/hello_happybase/main_test.py (100%) rename packages/google-cloud-bigtable/samples/{instanceadmin => legacy_client/hello_happybase}/noxfile.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/hello_happybase/requirements-test.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/hello_happybase/requirements.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/instanceadmin/README.md (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/instanceadmin/instanceadmin.py (100%) rename packages/google-cloud-bigtable/samples/{metricscaler => legacy_client/instanceadmin}/noxfile.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/instanceadmin/requirements-test.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/instanceadmin/requirements.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/instanceadmin/test_instanceadmin.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/metricscaler/Dockerfile (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/metricscaler/README.md (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/metricscaler/metricscaler.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/metricscaler/metricscaler_test.py (100%) rename packages/google-cloud-bigtable/samples/{quickstart => legacy_client/metricscaler}/noxfile.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/metricscaler/noxfile_config.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/metricscaler/requirements-test.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/metricscaler/requirements.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/quickstart/README.md (100%) rename packages/google-cloud-bigtable/samples/{quickstart_happybase => legacy_client/quickstart}/__init__.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/quickstart/main.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/quickstart/main_test.py (100%) rename packages/google-cloud-bigtable/samples/{quickstart_happybase => legacy_client/quickstart}/noxfile.py (100%) rename packages/google-cloud-bigtable/samples/{snippets/data_client => legacy_client/quickstart}/requirements-test.txt (100%) rename packages/google-cloud-bigtable/samples/{snippets/data_client => legacy_client/quickstart}/requirements.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/quickstart_happybase/README.md (100%) rename packages/google-cloud-bigtable/samples/{snippets => legacy_client/quickstart_happybase}/__init__.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/quickstart_happybase/main.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/quickstart_happybase/main_test.py (100%) rename packages/google-cloud-bigtable/samples/{snippets/data_client => legacy_client/quickstart_happybase}/noxfile.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/quickstart_happybase/requirements-test.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/quickstart_happybase/requirements.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/README.md (100%) rename packages/google-cloud-bigtable/samples/{snippets/data_client => legacy_client/snippets}/__init__.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/deletes/__init__.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/deletes/deletes_snippets.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/deletes/deletes_test.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/deletes/noxfile.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/deletes/requirements-test.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/deletes/requirements.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/filters/__init__.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/filters/filter_snippets.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/filters/filters_test.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/filters/noxfile.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/filters/requirements-test.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/filters/requirements.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/filters/snapshots/__init__.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/filters/snapshots/snap_filters_test.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/reads/__init__.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/reads/noxfile.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/reads/read_snippets.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/reads/reads_test.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/reads/requirements-test.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/reads/requirements.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/reads/snapshots/__init__.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/reads/snapshots/snap_reads_test.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/writes/__init__.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/writes/noxfile.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/writes/requirements-test.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/writes/requirements.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/writes/write_batch.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/writes/write_conditionally.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/writes/write_increment.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/writes/write_simple.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/snippets/writes/writes_test.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/tableadmin/README.md (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/tableadmin/__init__.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/tableadmin/noxfile.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/tableadmin/requirements-test.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/tableadmin/requirements.txt (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/tableadmin/tableadmin.py (100%) rename packages/google-cloud-bigtable/samples/{ => legacy_client}/tableadmin/tableadmin_test.py (100%) diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_async_internal.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_async_internal.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_async_internal.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_async_internal.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_sync_internal.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_sync_internal.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_sync_internal.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_sync_internal.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_async.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_async.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_async.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_sync.py b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_sync.py rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_sync.py diff --git a/packages/google-cloud-bigtable/samples/generated_samples/snippet_metadata_google.bigtable.admin.v2.json b/packages/google-cloud-bigtable/samples/admin_client/generated_samples/snippet_metadata_google.bigtable.admin.v2.json similarity index 100% rename from packages/google-cloud-bigtable/samples/generated_samples/snippet_metadata_google.bigtable.admin.v2.json rename to packages/google-cloud-bigtable/samples/admin_client/generated_samples/snippet_metadata_google.bigtable.admin.v2.json diff --git a/packages/google-cloud-bigtable/samples/hello/async_main.py b/packages/google-cloud-bigtable/samples/data_client/hello/async_main.py similarity index 100% rename from packages/google-cloud-bigtable/samples/hello/async_main.py rename to packages/google-cloud-bigtable/samples/data_client/hello/async_main.py diff --git a/packages/google-cloud-bigtable/samples/hello/async_main_test.py b/packages/google-cloud-bigtable/samples/data_client/hello/async_main_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/hello/async_main_test.py rename to packages/google-cloud-bigtable/samples/data_client/hello/async_main_test.py diff --git a/packages/google-cloud-bigtable/samples/quickstart/main_async.py b/packages/google-cloud-bigtable/samples/data_client/quickstart/main_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/quickstart/main_async.py rename to packages/google-cloud-bigtable/samples/data_client/quickstart/main_async.py diff --git a/packages/google-cloud-bigtable/samples/quickstart/main_async_test.py b/packages/google-cloud-bigtable/samples/data_client/quickstart/main_async_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/quickstart/main_async_test.py rename to packages/google-cloud-bigtable/samples/data_client/quickstart/main_async_test.py diff --git a/packages/google-cloud-bigtable/samples/beam/__init__.py b/packages/google-cloud-bigtable/samples/data_client/snippets/__init__.py similarity index 100% rename from packages/google-cloud-bigtable/samples/beam/__init__.py rename to packages/google-cloud-bigtable/samples/data_client/snippets/__init__.py diff --git a/packages/google-cloud-bigtable/samples/snippets/data_client/data_client_snippets_async.py b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/data_client/data_client_snippets_async.py rename to packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_async.py diff --git a/packages/google-cloud-bigtable/samples/snippets/data_client/data_client_snippets_async_test.py b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_async_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/data_client/data_client_snippets_async_test.py rename to packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_async_test.py diff --git a/packages/google-cloud-bigtable/samples/snippets/deletes/deletes_async_test.py b/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_async_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/deletes/deletes_async_test.py rename to packages/google-cloud-bigtable/samples/data_client/snippets/deletes_async_test.py diff --git a/packages/google-cloud-bigtable/samples/snippets/deletes/deletes_snippets_async.py b/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/deletes/deletes_snippets_async.py rename to packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets_async.py diff --git a/packages/google-cloud-bigtable/samples/snippets/filters/filter_snippets_async.py b/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/filters/filter_snippets_async.py rename to packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets_async.py diff --git a/packages/google-cloud-bigtable/samples/snippets/filters/filter_snippets_async_test.py b/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets_async_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/filters/filter_snippets_async_test.py rename to packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets_async_test.py diff --git a/packages/google-cloud-bigtable/samples/hello/noxfile.py b/packages/google-cloud-bigtable/samples/data_client/snippets/noxfile.py similarity index 100% rename from packages/google-cloud-bigtable/samples/hello/noxfile.py rename to packages/google-cloud-bigtable/samples/data_client/snippets/noxfile.py diff --git a/packages/google-cloud-bigtable/samples/quickstart/requirements-test.txt b/packages/google-cloud-bigtable/samples/data_client/snippets/requirements-test.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/quickstart/requirements-test.txt rename to packages/google-cloud-bigtable/samples/data_client/snippets/requirements-test.txt diff --git a/packages/google-cloud-bigtable/samples/quickstart/requirements.txt b/packages/google-cloud-bigtable/samples/data_client/snippets/requirements.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/quickstart/requirements.txt rename to packages/google-cloud-bigtable/samples/data_client/snippets/requirements.txt diff --git a/packages/google-cloud-bigtable/samples/hello/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/beam/__init__.py similarity index 100% rename from packages/google-cloud-bigtable/samples/hello/__init__.py rename to packages/google-cloud-bigtable/samples/legacy_client/beam/__init__.py diff --git a/packages/google-cloud-bigtable/samples/beam/hello_world_write.py b/packages/google-cloud-bigtable/samples/legacy_client/beam/hello_world_write.py similarity index 100% rename from packages/google-cloud-bigtable/samples/beam/hello_world_write.py rename to packages/google-cloud-bigtable/samples/legacy_client/beam/hello_world_write.py diff --git a/packages/google-cloud-bigtable/samples/beam/hello_world_write_test.py b/packages/google-cloud-bigtable/samples/legacy_client/beam/hello_world_write_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/beam/hello_world_write_test.py rename to packages/google-cloud-bigtable/samples/legacy_client/beam/hello_world_write_test.py diff --git a/packages/google-cloud-bigtable/samples/beam/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/beam/noxfile.py similarity index 100% rename from packages/google-cloud-bigtable/samples/beam/noxfile.py rename to packages/google-cloud-bigtable/samples/legacy_client/beam/noxfile.py diff --git a/packages/google-cloud-bigtable/samples/beam/noxfile_config.py b/packages/google-cloud-bigtable/samples/legacy_client/beam/noxfile_config.py similarity index 100% rename from packages/google-cloud-bigtable/samples/beam/noxfile_config.py rename to packages/google-cloud-bigtable/samples/legacy_client/beam/noxfile_config.py diff --git a/packages/google-cloud-bigtable/samples/beam/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/beam/requirements-test.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/beam/requirements-test.txt rename to packages/google-cloud-bigtable/samples/legacy_client/beam/requirements-test.txt diff --git a/packages/google-cloud-bigtable/samples/beam/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/beam/requirements.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/beam/requirements.txt rename to packages/google-cloud-bigtable/samples/legacy_client/beam/requirements.txt diff --git a/packages/google-cloud-bigtable/samples/hello/README.md b/packages/google-cloud-bigtable/samples/legacy_client/hello/README.md similarity index 100% rename from packages/google-cloud-bigtable/samples/hello/README.md rename to packages/google-cloud-bigtable/samples/legacy_client/hello/README.md diff --git a/packages/google-cloud-bigtable/samples/hello_happybase/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/hello/__init__.py similarity index 100% rename from packages/google-cloud-bigtable/samples/hello_happybase/__init__.py rename to packages/google-cloud-bigtable/samples/legacy_client/hello/__init__.py diff --git a/packages/google-cloud-bigtable/samples/hello/main.py b/packages/google-cloud-bigtable/samples/legacy_client/hello/main.py similarity index 100% rename from packages/google-cloud-bigtable/samples/hello/main.py rename to packages/google-cloud-bigtable/samples/legacy_client/hello/main.py diff --git a/packages/google-cloud-bigtable/samples/hello/main_test.py b/packages/google-cloud-bigtable/samples/legacy_client/hello/main_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/hello/main_test.py rename to packages/google-cloud-bigtable/samples/legacy_client/hello/main_test.py diff --git a/packages/google-cloud-bigtable/samples/hello_happybase/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/hello/noxfile.py similarity index 100% rename from packages/google-cloud-bigtable/samples/hello_happybase/noxfile.py rename to packages/google-cloud-bigtable/samples/legacy_client/hello/noxfile.py diff --git a/packages/google-cloud-bigtable/samples/hello/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/hello/requirements-test.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/hello/requirements-test.txt rename to packages/google-cloud-bigtable/samples/legacy_client/hello/requirements-test.txt diff --git a/packages/google-cloud-bigtable/samples/hello/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/hello/requirements.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/hello/requirements.txt rename to packages/google-cloud-bigtable/samples/legacy_client/hello/requirements.txt diff --git a/packages/google-cloud-bigtable/samples/hello_happybase/README.md b/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/README.md similarity index 100% rename from packages/google-cloud-bigtable/samples/hello_happybase/README.md rename to packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/README.md diff --git a/packages/google-cloud-bigtable/samples/quickstart/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/__init__.py similarity index 100% rename from packages/google-cloud-bigtable/samples/quickstart/__init__.py rename to packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/__init__.py diff --git a/packages/google-cloud-bigtable/samples/hello_happybase/main.py b/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/main.py similarity index 100% rename from packages/google-cloud-bigtable/samples/hello_happybase/main.py rename to packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/main.py diff --git a/packages/google-cloud-bigtable/samples/hello_happybase/main_test.py b/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/main_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/hello_happybase/main_test.py rename to packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/main_test.py diff --git a/packages/google-cloud-bigtable/samples/instanceadmin/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/noxfile.py similarity index 100% rename from packages/google-cloud-bigtable/samples/instanceadmin/noxfile.py rename to packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/noxfile.py diff --git a/packages/google-cloud-bigtable/samples/hello_happybase/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/requirements-test.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/hello_happybase/requirements-test.txt rename to packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/requirements-test.txt diff --git a/packages/google-cloud-bigtable/samples/hello_happybase/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/requirements.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/hello_happybase/requirements.txt rename to packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/requirements.txt diff --git a/packages/google-cloud-bigtable/samples/instanceadmin/README.md b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/README.md similarity index 100% rename from packages/google-cloud-bigtable/samples/instanceadmin/README.md rename to packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/README.md diff --git a/packages/google-cloud-bigtable/samples/instanceadmin/instanceadmin.py b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/instanceadmin.py similarity index 100% rename from packages/google-cloud-bigtable/samples/instanceadmin/instanceadmin.py rename to packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/instanceadmin.py diff --git a/packages/google-cloud-bigtable/samples/metricscaler/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/noxfile.py similarity index 100% rename from packages/google-cloud-bigtable/samples/metricscaler/noxfile.py rename to packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/noxfile.py diff --git a/packages/google-cloud-bigtable/samples/instanceadmin/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/requirements-test.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/instanceadmin/requirements-test.txt rename to packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/requirements-test.txt diff --git a/packages/google-cloud-bigtable/samples/instanceadmin/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/requirements.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/instanceadmin/requirements.txt rename to packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/requirements.txt diff --git a/packages/google-cloud-bigtable/samples/instanceadmin/test_instanceadmin.py b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/test_instanceadmin.py similarity index 100% rename from packages/google-cloud-bigtable/samples/instanceadmin/test_instanceadmin.py rename to packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/test_instanceadmin.py diff --git a/packages/google-cloud-bigtable/samples/metricscaler/Dockerfile b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/Dockerfile similarity index 100% rename from packages/google-cloud-bigtable/samples/metricscaler/Dockerfile rename to packages/google-cloud-bigtable/samples/legacy_client/metricscaler/Dockerfile diff --git a/packages/google-cloud-bigtable/samples/metricscaler/README.md b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/README.md similarity index 100% rename from packages/google-cloud-bigtable/samples/metricscaler/README.md rename to packages/google-cloud-bigtable/samples/legacy_client/metricscaler/README.md diff --git a/packages/google-cloud-bigtable/samples/metricscaler/metricscaler.py b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/metricscaler.py similarity index 100% rename from packages/google-cloud-bigtable/samples/metricscaler/metricscaler.py rename to packages/google-cloud-bigtable/samples/legacy_client/metricscaler/metricscaler.py diff --git a/packages/google-cloud-bigtable/samples/metricscaler/metricscaler_test.py b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/metricscaler_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/metricscaler/metricscaler_test.py rename to packages/google-cloud-bigtable/samples/legacy_client/metricscaler/metricscaler_test.py diff --git a/packages/google-cloud-bigtable/samples/quickstart/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/noxfile.py similarity index 100% rename from packages/google-cloud-bigtable/samples/quickstart/noxfile.py rename to packages/google-cloud-bigtable/samples/legacy_client/metricscaler/noxfile.py diff --git a/packages/google-cloud-bigtable/samples/metricscaler/noxfile_config.py b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/noxfile_config.py similarity index 100% rename from packages/google-cloud-bigtable/samples/metricscaler/noxfile_config.py rename to packages/google-cloud-bigtable/samples/legacy_client/metricscaler/noxfile_config.py diff --git a/packages/google-cloud-bigtable/samples/metricscaler/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/requirements-test.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/metricscaler/requirements-test.txt rename to packages/google-cloud-bigtable/samples/legacy_client/metricscaler/requirements-test.txt diff --git a/packages/google-cloud-bigtable/samples/metricscaler/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/requirements.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/metricscaler/requirements.txt rename to packages/google-cloud-bigtable/samples/legacy_client/metricscaler/requirements.txt diff --git a/packages/google-cloud-bigtable/samples/quickstart/README.md b/packages/google-cloud-bigtable/samples/legacy_client/quickstart/README.md similarity index 100% rename from packages/google-cloud-bigtable/samples/quickstart/README.md rename to packages/google-cloud-bigtable/samples/legacy_client/quickstart/README.md diff --git a/packages/google-cloud-bigtable/samples/quickstart_happybase/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/quickstart/__init__.py similarity index 100% rename from packages/google-cloud-bigtable/samples/quickstart_happybase/__init__.py rename to packages/google-cloud-bigtable/samples/legacy_client/quickstart/__init__.py diff --git a/packages/google-cloud-bigtable/samples/quickstart/main.py b/packages/google-cloud-bigtable/samples/legacy_client/quickstart/main.py similarity index 100% rename from packages/google-cloud-bigtable/samples/quickstart/main.py rename to packages/google-cloud-bigtable/samples/legacy_client/quickstart/main.py diff --git a/packages/google-cloud-bigtable/samples/quickstart/main_test.py b/packages/google-cloud-bigtable/samples/legacy_client/quickstart/main_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/quickstart/main_test.py rename to packages/google-cloud-bigtable/samples/legacy_client/quickstart/main_test.py diff --git a/packages/google-cloud-bigtable/samples/quickstart_happybase/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/quickstart/noxfile.py similarity index 100% rename from packages/google-cloud-bigtable/samples/quickstart_happybase/noxfile.py rename to packages/google-cloud-bigtable/samples/legacy_client/quickstart/noxfile.py diff --git a/packages/google-cloud-bigtable/samples/snippets/data_client/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/quickstart/requirements-test.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/data_client/requirements-test.txt rename to packages/google-cloud-bigtable/samples/legacy_client/quickstart/requirements-test.txt diff --git a/packages/google-cloud-bigtable/samples/snippets/data_client/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/quickstart/requirements.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/data_client/requirements.txt rename to packages/google-cloud-bigtable/samples/legacy_client/quickstart/requirements.txt diff --git a/packages/google-cloud-bigtable/samples/quickstart_happybase/README.md b/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/README.md similarity index 100% rename from packages/google-cloud-bigtable/samples/quickstart_happybase/README.md rename to packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/README.md diff --git a/packages/google-cloud-bigtable/samples/snippets/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/__init__.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/__init__.py rename to packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/__init__.py diff --git a/packages/google-cloud-bigtable/samples/quickstart_happybase/main.py b/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/main.py similarity index 100% rename from packages/google-cloud-bigtable/samples/quickstart_happybase/main.py rename to packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/main.py diff --git a/packages/google-cloud-bigtable/samples/quickstart_happybase/main_test.py b/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/main_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/quickstart_happybase/main_test.py rename to packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/main_test.py diff --git a/packages/google-cloud-bigtable/samples/snippets/data_client/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/noxfile.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/data_client/noxfile.py rename to packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/noxfile.py diff --git a/packages/google-cloud-bigtable/samples/quickstart_happybase/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/requirements-test.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/quickstart_happybase/requirements-test.txt rename to packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/requirements-test.txt diff --git a/packages/google-cloud-bigtable/samples/quickstart_happybase/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/requirements.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/quickstart_happybase/requirements.txt rename to packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/requirements.txt diff --git a/packages/google-cloud-bigtable/samples/snippets/README.md b/packages/google-cloud-bigtable/samples/legacy_client/snippets/README.md similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/README.md rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/README.md diff --git a/packages/google-cloud-bigtable/samples/snippets/data_client/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/__init__.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/data_client/__init__.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/__init__.py diff --git a/packages/google-cloud-bigtable/samples/snippets/deletes/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/__init__.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/deletes/__init__.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/__init__.py diff --git a/packages/google-cloud-bigtable/samples/snippets/deletes/deletes_snippets.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/deletes_snippets.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/deletes/deletes_snippets.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/deletes_snippets.py diff --git a/packages/google-cloud-bigtable/samples/snippets/deletes/deletes_test.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/deletes_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/deletes/deletes_test.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/deletes_test.py diff --git a/packages/google-cloud-bigtable/samples/snippets/deletes/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/noxfile.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/deletes/noxfile.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/noxfile.py diff --git a/packages/google-cloud-bigtable/samples/snippets/deletes/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/requirements-test.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/deletes/requirements-test.txt rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/requirements-test.txt diff --git a/packages/google-cloud-bigtable/samples/snippets/deletes/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/requirements.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/deletes/requirements.txt rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/requirements.txt diff --git a/packages/google-cloud-bigtable/samples/snippets/filters/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/__init__.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/filters/__init__.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/__init__.py diff --git a/packages/google-cloud-bigtable/samples/snippets/filters/filter_snippets.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/filter_snippets.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/filters/filter_snippets.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/filter_snippets.py diff --git a/packages/google-cloud-bigtable/samples/snippets/filters/filters_test.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/filters_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/filters/filters_test.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/filters_test.py diff --git a/packages/google-cloud-bigtable/samples/snippets/filters/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/noxfile.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/filters/noxfile.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/noxfile.py diff --git a/packages/google-cloud-bigtable/samples/snippets/filters/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/requirements-test.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/filters/requirements-test.txt rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/requirements-test.txt diff --git a/packages/google-cloud-bigtable/samples/snippets/filters/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/requirements.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/filters/requirements.txt rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/requirements.txt diff --git a/packages/google-cloud-bigtable/samples/snippets/filters/snapshots/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/snapshots/__init__.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/filters/snapshots/__init__.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/snapshots/__init__.py diff --git a/packages/google-cloud-bigtable/samples/snippets/filters/snapshots/snap_filters_test.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/snapshots/snap_filters_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/filters/snapshots/snap_filters_test.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/snapshots/snap_filters_test.py diff --git a/packages/google-cloud-bigtable/samples/snippets/reads/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/__init__.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/reads/__init__.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/__init__.py diff --git a/packages/google-cloud-bigtable/samples/snippets/reads/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/noxfile.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/reads/noxfile.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/noxfile.py diff --git a/packages/google-cloud-bigtable/samples/snippets/reads/read_snippets.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/read_snippets.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/reads/read_snippets.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/read_snippets.py diff --git a/packages/google-cloud-bigtable/samples/snippets/reads/reads_test.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/reads_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/reads/reads_test.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/reads_test.py diff --git a/packages/google-cloud-bigtable/samples/snippets/reads/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/requirements-test.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/reads/requirements-test.txt rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/requirements-test.txt diff --git a/packages/google-cloud-bigtable/samples/snippets/reads/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/requirements.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/reads/requirements.txt rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/requirements.txt diff --git a/packages/google-cloud-bigtable/samples/snippets/reads/snapshots/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/snapshots/__init__.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/reads/snapshots/__init__.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/snapshots/__init__.py diff --git a/packages/google-cloud-bigtable/samples/snippets/reads/snapshots/snap_reads_test.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/snapshots/snap_reads_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/reads/snapshots/snap_reads_test.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/snapshots/snap_reads_test.py diff --git a/packages/google-cloud-bigtable/samples/snippets/writes/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/__init__.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/writes/__init__.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/__init__.py diff --git a/packages/google-cloud-bigtable/samples/snippets/writes/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/noxfile.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/writes/noxfile.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/noxfile.py diff --git a/packages/google-cloud-bigtable/samples/snippets/writes/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/requirements-test.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/writes/requirements-test.txt rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/requirements-test.txt diff --git a/packages/google-cloud-bigtable/samples/snippets/writes/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/requirements.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/writes/requirements.txt rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/requirements.txt diff --git a/packages/google-cloud-bigtable/samples/snippets/writes/write_batch.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_batch.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/writes/write_batch.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_batch.py diff --git a/packages/google-cloud-bigtable/samples/snippets/writes/write_conditionally.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_conditionally.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/writes/write_conditionally.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_conditionally.py diff --git a/packages/google-cloud-bigtable/samples/snippets/writes/write_increment.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_increment.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/writes/write_increment.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_increment.py diff --git a/packages/google-cloud-bigtable/samples/snippets/writes/write_simple.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_simple.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/writes/write_simple.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_simple.py diff --git a/packages/google-cloud-bigtable/samples/snippets/writes/writes_test.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/writes_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/snippets/writes/writes_test.py rename to packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/writes_test.py diff --git a/packages/google-cloud-bigtable/samples/tableadmin/README.md b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/README.md similarity index 100% rename from packages/google-cloud-bigtable/samples/tableadmin/README.md rename to packages/google-cloud-bigtable/samples/legacy_client/tableadmin/README.md diff --git a/packages/google-cloud-bigtable/samples/tableadmin/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/__init__.py similarity index 100% rename from packages/google-cloud-bigtable/samples/tableadmin/__init__.py rename to packages/google-cloud-bigtable/samples/legacy_client/tableadmin/__init__.py diff --git a/packages/google-cloud-bigtable/samples/tableadmin/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/noxfile.py similarity index 100% rename from packages/google-cloud-bigtable/samples/tableadmin/noxfile.py rename to packages/google-cloud-bigtable/samples/legacy_client/tableadmin/noxfile.py diff --git a/packages/google-cloud-bigtable/samples/tableadmin/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/requirements-test.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/tableadmin/requirements-test.txt rename to packages/google-cloud-bigtable/samples/legacy_client/tableadmin/requirements-test.txt diff --git a/packages/google-cloud-bigtable/samples/tableadmin/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/requirements.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/tableadmin/requirements.txt rename to packages/google-cloud-bigtable/samples/legacy_client/tableadmin/requirements.txt diff --git a/packages/google-cloud-bigtable/samples/tableadmin/tableadmin.py b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/tableadmin.py similarity index 100% rename from packages/google-cloud-bigtable/samples/tableadmin/tableadmin.py rename to packages/google-cloud-bigtable/samples/legacy_client/tableadmin/tableadmin.py diff --git a/packages/google-cloud-bigtable/samples/tableadmin/tableadmin_test.py b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/tableadmin_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/tableadmin/tableadmin_test.py rename to packages/google-cloud-bigtable/samples/legacy_client/tableadmin/tableadmin_test.py From a4eef1902fa8dd3574ca72fb8a083bd38d9cc098 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Tue, 21 Jul 2026 16:14:42 -0700 Subject: [PATCH 02/23] renamed data_client to data_client_async --- .../{data_client => data_client_async}/hello/async_main.py | 0 .../{data_client => data_client_async}/hello/async_main_test.py | 0 .../{data_client => data_client_async}/quickstart/main_async.py | 0 .../quickstart/main_async_test.py | 0 .../{data_client => data_client_async}/snippets/__init__.py | 0 .../snippets/data_client_snippets_async.py | 0 .../snippets/data_client_snippets_async_test.py | 0 .../snippets/deletes_async_test.py | 0 .../snippets/deletes_snippets_async.py | 0 .../snippets/filter_snippets_async.py | 0 .../snippets/filter_snippets_async_test.py | 0 .../{data_client => data_client_async}/snippets/noxfile.py | 0 .../snippets/requirements-test.txt | 0 .../{data_client => data_client_async}/snippets/requirements.txt | 0 14 files changed, 0 insertions(+), 0 deletions(-) rename packages/google-cloud-bigtable/samples/{data_client => data_client_async}/hello/async_main.py (100%) rename packages/google-cloud-bigtable/samples/{data_client => data_client_async}/hello/async_main_test.py (100%) rename packages/google-cloud-bigtable/samples/{data_client => data_client_async}/quickstart/main_async.py (100%) rename packages/google-cloud-bigtable/samples/{data_client => data_client_async}/quickstart/main_async_test.py (100%) rename packages/google-cloud-bigtable/samples/{data_client => data_client_async}/snippets/__init__.py (100%) rename packages/google-cloud-bigtable/samples/{data_client => data_client_async}/snippets/data_client_snippets_async.py (100%) rename packages/google-cloud-bigtable/samples/{data_client => data_client_async}/snippets/data_client_snippets_async_test.py (100%) rename packages/google-cloud-bigtable/samples/{data_client => data_client_async}/snippets/deletes_async_test.py (100%) rename packages/google-cloud-bigtable/samples/{data_client => data_client_async}/snippets/deletes_snippets_async.py (100%) rename packages/google-cloud-bigtable/samples/{data_client => data_client_async}/snippets/filter_snippets_async.py (100%) rename packages/google-cloud-bigtable/samples/{data_client => data_client_async}/snippets/filter_snippets_async_test.py (100%) rename packages/google-cloud-bigtable/samples/{data_client => data_client_async}/snippets/noxfile.py (100%) rename packages/google-cloud-bigtable/samples/{data_client => data_client_async}/snippets/requirements-test.txt (100%) rename packages/google-cloud-bigtable/samples/{data_client => data_client_async}/snippets/requirements.txt (100%) diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/async_main.py b/packages/google-cloud-bigtable/samples/data_client_async/hello/async_main.py similarity index 100% rename from packages/google-cloud-bigtable/samples/data_client/hello/async_main.py rename to packages/google-cloud-bigtable/samples/data_client_async/hello/async_main.py diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/async_main_test.py b/packages/google-cloud-bigtable/samples/data_client_async/hello/async_main_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/data_client/hello/async_main_test.py rename to packages/google-cloud-bigtable/samples/data_client_async/hello/async_main_test.py diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/main_async.py b/packages/google-cloud-bigtable/samples/data_client_async/quickstart/main_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/data_client/quickstart/main_async.py rename to packages/google-cloud-bigtable/samples/data_client_async/quickstart/main_async.py diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/main_async_test.py b/packages/google-cloud-bigtable/samples/data_client_async/quickstart/main_async_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/data_client/quickstart/main_async_test.py rename to packages/google-cloud-bigtable/samples/data_client_async/quickstart/main_async_test.py diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/__init__.py b/packages/google-cloud-bigtable/samples/data_client_async/snippets/__init__.py similarity index 100% rename from packages/google-cloud-bigtable/samples/data_client/snippets/__init__.py rename to packages/google-cloud-bigtable/samples/data_client_async/snippets/__init__.py diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_async.py b/packages/google-cloud-bigtable/samples/data_client_async/snippets/data_client_snippets_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_async.py rename to packages/google-cloud-bigtable/samples/data_client_async/snippets/data_client_snippets_async.py diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_async_test.py b/packages/google-cloud-bigtable/samples/data_client_async/snippets/data_client_snippets_async_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_async_test.py rename to packages/google-cloud-bigtable/samples/data_client_async/snippets/data_client_snippets_async_test.py diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_async_test.py b/packages/google-cloud-bigtable/samples/data_client_async/snippets/deletes_async_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/data_client/snippets/deletes_async_test.py rename to packages/google-cloud-bigtable/samples/data_client_async/snippets/deletes_async_test.py diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets_async.py b/packages/google-cloud-bigtable/samples/data_client_async/snippets/deletes_snippets_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets_async.py rename to packages/google-cloud-bigtable/samples/data_client_async/snippets/deletes_snippets_async.py diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets_async.py b/packages/google-cloud-bigtable/samples/data_client_async/snippets/filter_snippets_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets_async.py rename to packages/google-cloud-bigtable/samples/data_client_async/snippets/filter_snippets_async.py diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets_async_test.py b/packages/google-cloud-bigtable/samples/data_client_async/snippets/filter_snippets_async_test.py similarity index 100% rename from packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets_async_test.py rename to packages/google-cloud-bigtable/samples/data_client_async/snippets/filter_snippets_async_test.py diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/noxfile.py b/packages/google-cloud-bigtable/samples/data_client_async/snippets/noxfile.py similarity index 100% rename from packages/google-cloud-bigtable/samples/data_client/snippets/noxfile.py rename to packages/google-cloud-bigtable/samples/data_client_async/snippets/noxfile.py diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/requirements-test.txt b/packages/google-cloud-bigtable/samples/data_client_async/snippets/requirements-test.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/data_client/snippets/requirements-test.txt rename to packages/google-cloud-bigtable/samples/data_client_async/snippets/requirements-test.txt diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/requirements.txt b/packages/google-cloud-bigtable/samples/data_client_async/snippets/requirements.txt similarity index 100% rename from packages/google-cloud-bigtable/samples/data_client/snippets/requirements.txt rename to packages/google-cloud-bigtable/samples/data_client_async/snippets/requirements.txt From 1b91ad442e2a42b67d9318681a33f2d24d0a772a Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Tue, 21 Jul 2026 16:18:46 -0700 Subject: [PATCH 03/23] updated repo references --- .../bigtable-integration.yaml | 244 +++++++++--------- .../google-cloud-bigtable/CONTRIBUTING.rst | 6 +- packages/google-cloud-bigtable/docs/conf.py | 2 +- 3 files changed, 126 insertions(+), 126 deletions(-) diff --git a/.librarian/generator-input/client-post-processing/bigtable-integration.yaml b/.librarian/generator-input/client-post-processing/bigtable-integration.yaml index 6ff2dfb6ad8b..2c370e7b0aea 100644 --- a/.librarian/generator-input/client-post-processing/bigtable-integration.yaml +++ b/.librarian/generator-input/client-post-processing/bigtable-integration.yaml @@ -15,128 +15,128 @@ description: Integrate Google Cloud Bigtable Handwritten code url: https://github.com/googleapis/gapic-generator-python/issues/123 replacements: - paths: [ - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_async_internal.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_sync_internal.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_sync.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_async.py, - packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_async_internal.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_sync_internal.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_sync.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_async.py, + packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_sync.py, packages/google-cloud-bigtable/google/cloud/bigtable_admin_v2/services/bigtable_instance_admin/client.py, packages/google-cloud-bigtable/google/cloud/bigtable_admin_v2/services/bigtable_instance_admin/async_client.py, packages/google-cloud-bigtable/google/cloud/bigtable_admin_v2/services/bigtable_table_admin/client.py, diff --git a/packages/google-cloud-bigtable/CONTRIBUTING.rst b/packages/google-cloud-bigtable/CONTRIBUTING.rst index 9de20daeac72..73e933e3865d 100644 --- a/packages/google-cloud-bigtable/CONTRIBUTING.rst +++ b/packages/google-cloud-bigtable/CONTRIBUTING.rst @@ -185,7 +185,7 @@ Code samples and snippets live in the `samples/` catalogue. Feel free to provide more examples, but make sure to write tests for those examples. Each folder containing example code requires its own `noxfile.py` script which automates testing. If you decide to create a new folder, you can -base it on the `samples/snippets` folder (providing `noxfile.py` and +base it on the `samples/data_client_async/snippets` folder (providing `noxfile.py` and the requirements files). The tests will run against a real Google Cloud Project, so you should @@ -194,11 +194,11 @@ configure them just like the System Tests. - To run sample tests, you can execute:: # Run all tests in a folder - $ cd samples/snippets + $ cd samples/data_client_async/snippets $ nox -s py-3.14 # Run a single sample test - $ cd samples/snippets + $ cd samples/data_client_async/snippets $ nox -s py-3.14 -- -k ******************************************** diff --git a/packages/google-cloud-bigtable/docs/conf.py b/packages/google-cloud-bigtable/docs/conf.py index 47f0191ddd3f..2adeae7c91b7 100644 --- a/packages/google-cloud-bigtable/docs/conf.py +++ b/packages/google-cloud-bigtable/docs/conf.py @@ -117,7 +117,7 @@ "**/.nox/**/*", "samples/AUTHORING_GUIDE.md", "samples/CONTRIBUTING.md", - "samples/snippets/README.rst", + "samples/**/snippets/README*", ] # The reST default role (used for this markup: `text`) to use for all From 9cad950bc856fa11357d9e44c838c3ad408d17d7 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Tue, 21 Jul 2026 16:31:48 -0700 Subject: [PATCH 04/23] added _legacy suffix to legacy client region tags --- .../samples/legacy_client/hello/main.py | 40 +++++++++---------- .../instanceadmin/instanceadmin.py | 32 +++++++-------- .../metricscaler/metricscaler.py | 12 +++--- .../samples/legacy_client/quickstart/main.py | 4 +- .../legacy_client/tableadmin/tableadmin.py | 40 +++++++++---------- 5 files changed, 64 insertions(+), 64 deletions(-) diff --git a/packages/google-cloud-bigtable/samples/legacy_client/hello/main.py b/packages/google-cloud-bigtable/samples/legacy_client/hello/main.py index 13899a87425b..b689a9c35d86 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/hello/main.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/hello/main.py @@ -26,7 +26,7 @@ import argparse -# [START bigtable_hw_imports] +# [START bigtable_hw_imports_legacy] from datetime import datetime, timezone from google.cloud import bigtable @@ -34,7 +34,7 @@ from ..utils import wait_for_table -# [END bigtable_hw_imports] +# [END bigtable_hw_imports_legacy] # use to avoid warnings row_filters @@ -42,14 +42,14 @@ def main(project_id, instance_id, table_id): - # [START bigtable_hw_connect] + # [START bigtable_hw_connect_legacy] # The client must be created with admin=True because it will create a # table. client = bigtable.Client(project=project_id, admin=True) instance = client.instance(instance_id) - # [END bigtable_hw_connect] + # [END bigtable_hw_connect_legacy] - # [START bigtable_hw_create_table] + # [START bigtable_hw_create_table_legacy] print("Creating the {} table.".format(table_id)) table = instance.table(table_id) @@ -63,13 +63,13 @@ def main(project_id, instance_id, table_id): table.create(column_families=column_families) else: print("Table {} already exists.".format(table_id)) - # [END bigtable_hw_create_table] + # [END bigtable_hw_create_table_legacy] try: # let table creation complete wait_for_table(table) - # [START bigtable_hw_write_rows] + # [START bigtable_hw_write_rows_legacy] print("Writing some greetings to the table.") greetings = [b"Hello World!", b"Hello Cloud Bigtable!", b"Hello Python!"] rows = [] @@ -98,27 +98,27 @@ def main(project_id, instance_id, table_id): ) rows.append(row) table.mutate_rows(rows) - # [END bigtable_hw_write_rows] + # [END bigtable_hw_write_rows_legacy] - # [START bigtable_hw_create_filter] + # [START bigtable_hw_create_filter_legacy] # Create a filter to only retrieve the most recent version of the cell # for each column across entire row. row_filter = bigtable.row_filters.CellsColumnLimitFilter(1) - # [END bigtable_hw_create_filter] + # [END bigtable_hw_create_filter_legacy] - # [START bigtable_hw_get_with_filter] - # [START bigtable_hw_get_by_key] + # [START bigtable_hw_get_with_filter_legacy] + # [START bigtable_hw_get_by_key_legacy] print("Getting a single greeting by row key.") key = b"greeting0" row = table.read_row(key, row_filter) cell = row.cells[column_family_id.decode("utf-8")][column][0] print(cell.value.decode("utf-8")) - # [END bigtable_hw_get_by_key] - # [END bigtable_hw_get_with_filter] + # [END bigtable_hw_get_by_key_legacy] + # [END bigtable_hw_get_with_filter_legacy] - # [START bigtable_hw_scan_with_filter] - # [START bigtable_hw_scan_all] + # [START bigtable_hw_scan_with_filter_legacy] + # [START bigtable_hw_scan_all_legacy] print("Scanning for all greetings:") partial_rows = table.read_rows(filter_=row_filter) @@ -126,14 +126,14 @@ def main(project_id, instance_id, table_id): column_family_id_str = column_family_id.decode("utf-8") cell = row.cells[column_family_id_str][column][0] print(cell.value.decode("utf-8")) - # [END bigtable_hw_scan_all] - # [END bigtable_hw_scan_with_filter] + # [END bigtable_hw_scan_all_legacy] + # [END bigtable_hw_scan_with_filter_legacy] finally: - # [START bigtable_hw_delete_table] + # [START bigtable_hw_delete_table_legacy] print("Deleting the {} table.".format(table_id)) table.delete() - # [END bigtable_hw_delete_table] + # [END bigtable_hw_delete_table_legacy] if __name__ == "__main__": diff --git a/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/instanceadmin.py b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/instanceadmin.py index 7341bfc46f19..53f1bfbb1906 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/instanceadmin.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/instanceadmin.py @@ -55,14 +55,14 @@ def run_instance_operations(project_id, instance_id, cluster_id): labels = {"prod-label": "prod-label"} instance = client.instance(instance_id, labels=labels) - # [START bigtable_check_instance_exists] + # [START bigtable_check_instance_exists_legacy] if not instance.exists(): print("Instance {} does not exist.".format(instance_id)) else: print("Instance {} already exists.".format(instance_id)) - # [END bigtable_check_instance_exists] + # [END bigtable_check_instance_exists_legacy] - # [START bigtable_create_prod_instance] + # [START bigtable_create_prod_instance_legacy] cluster = instance.cluster( cluster_id, location_id=location_id, @@ -76,27 +76,27 @@ def run_instance_operations(project_id, instance_id, cluster_id): # Ensure the operation completes. operation.result(timeout=480) print("\nCreated instance: {}".format(instance_id)) - # [END bigtable_create_prod_instance] + # [END bigtable_create_prod_instance_legacy] - # [START bigtable_list_instances] + # [START bigtable_list_instances_legacy] print("\nListing instances:") for instance_local in client.list_instances()[0]: print(instance_local.instance_id) - # [END bigtable_list_instances] + # [END bigtable_list_instances_legacy] - # [START bigtable_get_instance] + # [START bigtable_get_instance_legacy] print( "\nName of instance: {}\nLabels: {}".format( instance.display_name, instance.labels ) ) - # [END bigtable_get_instance] + # [END bigtable_get_instance_legacy] - # [START bigtable_get_clusters] + # [START bigtable_get_clusters_legacy] print("\nListing clusters...") for cluster in instance.list_clusters()[0]: print(cluster.cluster_id) - # [END bigtable_get_clusters] + # [END bigtable_get_clusters_legacy] def delete_instance(project_id, instance_id): @@ -111,14 +111,14 @@ def delete_instance(project_id, instance_id): client = bigtable.Client(project=project_id, admin=True) instance = client.instance(instance_id) - # [START bigtable_delete_instance] + # [START bigtable_delete_instance_legacy] print("\nDeleting instance") if not instance.exists(): print("Instance {} does not exist.".format(instance_id)) else: instance.delete() print("Deleted instance: {}".format(instance_id)) - # [END bigtable_delete_instance] + # [END bigtable_delete_instance_legacy] def add_cluster(project_id, instance_id, cluster_id): @@ -144,7 +144,7 @@ def add_cluster(project_id, instance_id, cluster_id): print("Instance {} does not exist.".format(instance_id)) else: print("\nAdding cluster to instance {}".format(instance_id)) - # [START bigtable_create_cluster] + # [START bigtable_create_cluster_legacy] print("\nListing clusters...") for cluster in instance.list_clusters()[0]: print(cluster.cluster_id) @@ -161,7 +161,7 @@ def add_cluster(project_id, instance_id, cluster_id): # Ensure the operation completes. operation.result(timeout=480) print("\nCluster created: {}".format(cluster_id)) - # [END bigtable_create_cluster] + # [END bigtable_create_cluster_legacy] def delete_cluster(project_id, instance_id, cluster_id): @@ -181,7 +181,7 @@ def delete_cluster(project_id, instance_id, cluster_id): instance = client.instance(instance_id) cluster = instance.cluster(cluster_id) - # [START bigtable_delete_cluster] + # [START bigtable_delete_cluster_legacy] print("\nDeleting cluster") if cluster.exists(): cluster.delete() @@ -189,7 +189,7 @@ def delete_cluster(project_id, instance_id, cluster_id): else: print("\nCluster {} does not exist.".format(cluster_id)) - # [END bigtable_delete_cluster] + # [END bigtable_delete_cluster_legacy] if __name__ == "__main__": diff --git a/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/metricscaler.py b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/metricscaler.py index 1f89e6aacc15..3703d895794c 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/metricscaler.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/metricscaler.py @@ -38,7 +38,7 @@ def get_cpu_load(bigtable_instance, bigtable_cluster): Returns: float: The most recent Cloud Bigtable CPU usage metric """ - # [START bigtable_cpu] + # [START bigtable_cpu_legacy] client = monitoring_v3.MetricServiceClient() cpu_query = query.Query( client, @@ -51,7 +51,7 @@ def get_cpu_load(bigtable_instance, bigtable_cluster): ) cpu = next(cpu_query.iter()) return cpu.points[0].value.double_value - # [END bigtable_cpu] + # [END bigtable_cpu_legacy] def get_storage_utilization(bigtable_instance, bigtable_cluster): @@ -60,7 +60,7 @@ def get_storage_utilization(bigtable_instance, bigtable_cluster): Returns: float: The most recent Cloud Bigtable storage utilization metric """ - # [START bigtable_metric_scaler_storage_utilization] + # [START bigtable_metric_scaler_storage_utilization_legacy] client = monitoring_v3.MetricServiceClient() utilization_query = query.Query( client, @@ -73,7 +73,7 @@ def get_storage_utilization(bigtable_instance, bigtable_cluster): ) utilization = next(utilization_query.iter()) return utilization.points[0].value.double_value - # [END bigtable_metric_scaler_storage_utilization] + # [END bigtable_metric_scaler_storage_utilization_legacy] def scale_bigtable(bigtable_instance, bigtable_cluster, scale_up): @@ -105,7 +105,7 @@ def scale_bigtable(bigtable_instance, bigtable_cluster, scale_up): # The number of nodes to change the cluster by. size_change_step = 3 - # [START bigtable_scale] + # [START bigtable_scale_legacy] bigtable_client = bigtable.Client(admin=True) instance = bigtable_client.instance(bigtable_instance) instance.reload() @@ -140,7 +140,7 @@ def scale_bigtable(bigtable_instance, bigtable_cluster, scale_up): current_node_count, new_node_count, response.name ) ) - # [END bigtable_scale] + # [END bigtable_scale_legacy] def main( diff --git a/packages/google-cloud-bigtable/samples/legacy_client/quickstart/main.py b/packages/google-cloud-bigtable/samples/legacy_client/quickstart/main.py index 50bfe639426c..a8bfd79a7b36 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/quickstart/main.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/quickstart/main.py @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -# [START bigtable_quickstart] +# [START bigtable_quickstart_legacy] import argparse from google.cloud import bigtable @@ -54,4 +54,4 @@ def main(project_id="project-id", instance_id="instance-id", table_id="my-table" args = parser.parse_args() main(args.project_id, args.instance_id, args.table) -# [END bigtable_quickstart] +# [END bigtable_quickstart_legacy] diff --git a/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/tableadmin.py b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/tableadmin.py index d62cfa3328b0..bc502e6f5037 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/tableadmin.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/tableadmin.py @@ -55,7 +55,7 @@ def run_table_operations(project_id, instance_id, table_id): client = bigtable.Client(project=project_id, admin=True) instance = client.instance(instance_id) with create_table_cm(project_id, instance_id, table_id, verbose=False) as table: - # [START bigtable_list_tables] + # [START bigtable_list_tables_legacy] tables = instance.list_tables() print("Listing tables in current project...") if tables != []: @@ -63,9 +63,9 @@ def run_table_operations(project_id, instance_id, table_id): print(tbl.table_id) else: print("No table exists in current project...") - # [END bigtable_list_tables] + # [END bigtable_list_tables_legacy] - # [START bigtable_create_family_gc_max_age] + # [START bigtable_create_family_gc_max_age_legacy] print("Creating column family cf1 with with MaxAge GC Rule...") # Create a column family with GC policy : maximum age # where age = current time minus cell timestamp @@ -76,9 +76,9 @@ def run_table_operations(project_id, instance_id, table_id): column_family1 = table.column_family("cf1", max_age_rule) column_family1.create() print("Created column family cf1 with MaxAge GC Rule.") - # [END bigtable_create_family_gc_max_age] + # [END bigtable_create_family_gc_max_age_legacy] - # [START bigtable_create_family_gc_max_versions] + # [START bigtable_create_family_gc_max_versions_legacy] print("Creating column family cf2 with max versions GC rule...") # Create a column family with GC policy : most recent N versions # where 1 = most recent version @@ -89,9 +89,9 @@ def run_table_operations(project_id, instance_id, table_id): column_family2 = table.column_family("cf2", max_versions_rule) column_family2.create() print("Created column family cf2 with Max Versions GC Rule.") - # [END bigtable_create_family_gc_max_versions] + # [END bigtable_create_family_gc_max_versions_legacy] - # [START bigtable_create_family_gc_union] + # [START bigtable_create_family_gc_union_legacy] print("Creating column family cf3 with union GC rule...") # Create a column family with GC policy to drop data that matches # at least one condition. @@ -107,9 +107,9 @@ def run_table_operations(project_id, instance_id, table_id): column_family3 = table.column_family("cf3", union_rule) column_family3.create() print("Created column family cf3 with Union GC rule") - # [END bigtable_create_family_gc_union] + # [END bigtable_create_family_gc_union_legacy] - # [START bigtable_create_family_gc_intersection] + # [START bigtable_create_family_gc_intersection_legacy] print("Creating column family cf4 with Intersection GC rule...") # Create a column family with GC policy to drop data that matches # all conditions @@ -125,9 +125,9 @@ def run_table_operations(project_id, instance_id, table_id): column_family4 = table.column_family("cf4", intersection_rule) column_family4.create() print("Created column family cf4 with Intersection GC rule.") - # [END bigtable_create_family_gc_intersection] + # [END bigtable_create_family_gc_intersection_legacy] - # [START bigtable_create_family_gc_nested] + # [START bigtable_create_family_gc_nested_legacy] print("Creating column family cf5 with a Nested GC rule...") # Create a column family with nested GC policies. # Create a nested GC rule: @@ -148,9 +148,9 @@ def run_table_operations(project_id, instance_id, table_id): column_family5 = table.column_family("cf5", nested_rule) column_family5.create() print("Created column family cf5 with a Nested GC rule.") - # [END bigtable_create_family_gc_nested] + # [END bigtable_create_family_gc_nested_legacy] - # [START bigtable_list_column_families] + # [START bigtable_list_column_families_legacy] print("Printing Column Family and GC Rule for all column families...") column_families = table.list_column_families() for column_family_name, gc_rule in sorted(column_families.items()): @@ -172,30 +172,30 @@ def run_table_operations(project_id, instance_id, table_id): # } # } # } - # [END bigtable_list_column_families] + # [END bigtable_list_column_families_legacy] print("Print column family cf1 GC rule before update...") print("Column Family: cf1") print(column_family1.to_pb()) - # [START bigtable_update_gc_rule] + # [START bigtable_update_gc_rule_legacy] print("Updating column family cf1 GC rule...") # Update the column family cf1 to update the GC rule column_family1 = table.column_family("cf1", column_family.MaxVersionsGCRule(1)) column_family1.update() print("Updated column family cf1 GC rule\n") - # [END bigtable_update_gc_rule] + # [END bigtable_update_gc_rule_legacy] print("Print column family cf1 GC rule after update...") print("Column Family: cf1") print(column_family1.to_pb()) - # [START bigtable_delete_family] + # [START bigtable_delete_family_legacy] print("Delete a column family cf2...") # Delete a column family column_family2.delete() print("Column family cf2 deleted successfully.") - # [END bigtable_delete_family] + # [END bigtable_delete_family_legacy] print( 'execute command "python tableadmin.py delete [project_id] \ @@ -220,7 +220,7 @@ def delete_table(project_id, instance_id, table_id): instance = client.instance(instance_id) table = instance.table(table_id) - # [START bigtable_delete_table] + # [START bigtable_delete_table_legacy] # Delete the entire table print("Checking if table {} exists...".format(table_id)) @@ -231,7 +231,7 @@ def delete_table(project_id, instance_id, table_id): print("Deleted {} table.".format(table_id)) else: print("Table {} does not exists.".format(table_id)) - # [END bigtable_delete_table] + # [END bigtable_delete_table_legacy] if __name__ == "__main__": From 9e865b0df0dccb5471a1cd6a4698e1d5eb246d0a Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Tue, 21 Jul 2026 16:33:20 -0700 Subject: [PATCH 05/23] added sync data client samples --- .../samples/data_client/hello/README.md | 52 ++ .../samples/data_client/hello/main.py | 133 +++++ .../samples/data_client/hello/main_test.py | 35 ++ .../samples/data_client/hello/noxfile.py | 292 ++++++++++ .../data_client/hello/requirements-test.txt | 1 + .../data_client/hello/requirements.txt | 2 + .../samples/data_client/quickstart/README.md | 52 ++ .../samples/data_client/quickstart/main.py | 57 ++ .../data_client/quickstart/main_test.py | 48 ++ .../samples/data_client/quickstart/noxfile.py | 292 ++++++++++ .../quickstart/requirements-test.txt | 2 + .../data_client/quickstart/requirements.txt | 1 + .../samples/data_client/snippets/README.md | 33 ++ .../snippets/data_client_snippets.py | 302 +++++++++++ .../snippets/data_client_snippets_test.py | 105 ++++ .../data_client/snippets/deletes_snippets.py | 124 +++++ .../snippets/deletes_snippets_test.py | 259 +++++++++ .../data_client/snippets/filter_snippets.py | 389 ++++++++++++++ .../snippets/filter_snippets_test.py | 373 +++++++++++++ .../samples/data_client/snippets/noxfile.py | 292 ++++++++++ .../snippets/requirements-test.txt | 2 + .../data_client/snippets/requirements.txt | 1 + .../snippets/snapshots/__init__.py | 0 .../snippets/snapshots/snap_filters_test.py | 503 ++++++++++++++++++ 24 files changed, 3350 insertions(+) create mode 100644 packages/google-cloud-bigtable/samples/data_client/hello/README.md create mode 100644 packages/google-cloud-bigtable/samples/data_client/hello/main.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/hello/main_test.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/hello/noxfile.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/hello/requirements-test.txt create mode 100644 packages/google-cloud-bigtable/samples/data_client/hello/requirements.txt create mode 100644 packages/google-cloud-bigtable/samples/data_client/quickstart/README.md create mode 100644 packages/google-cloud-bigtable/samples/data_client/quickstart/main.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/quickstart/main_test.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/quickstart/noxfile.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/quickstart/requirements-test.txt create mode 100644 packages/google-cloud-bigtable/samples/data_client/quickstart/requirements.txt create mode 100644 packages/google-cloud-bigtable/samples/data_client/snippets/README.md create mode 100644 packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_test.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets_test.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets_test.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/snippets/noxfile.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/snippets/requirements-test.txt create mode 100644 packages/google-cloud-bigtable/samples/data_client/snippets/requirements.txt create mode 100644 packages/google-cloud-bigtable/samples/data_client/snippets/snapshots/__init__.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/snippets/snapshots/snap_filters_test.py diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/README.md b/packages/google-cloud-bigtable/samples/data_client/hello/README.md new file mode 100644 index 000000000000..b3779fb43b27 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/hello/README.md @@ -0,0 +1,52 @@ +[//]: # "This README.md file is auto-generated, all changes to this file will be lost." +[//]: # "To regenerate it, use `python -m synthtool`." + +## Python Samples for Cloud Bigtable + +This directory contains samples for Cloud Bigtable, which may be used as a refererence for how to use this product. +Samples, quickstarts, and other documentation are available at cloud.google.com. + + +### Hello World in Cloud Bigtable + +Demonstrates how to connect to Cloud Bigtable and run some basic operations. More information available at: https://cloud.google.com/bigtable/docs/samples-python-hello + + +Open in Cloud Shell + + +To run this sample: + +1. If this is your first time working with GCP products, you will need to set up [the Cloud SDK][cloud_sdk] or utilize [Google Cloud Shell][gcloud_shell]. This sample may [require authentication][authentication] and you will need to [enable billing][enable_billing]. + +1. Make a fork of this repo and clone the branch locally, then navigate to the sample directory you want to use. + +1. Install the dependencies needed to run the samples. + + pip install -r requirements.txt + +1. Run the sample using + + python main.py + + + +
usage: main.py [-h] [--table TABLE] project_id instance_id
Demonstrates how to connect to Cloud Bigtable and run some basic operations.
Prerequisites: - Create a Cloud Bigtable cluster.
https://cloud.google.com/bigtable/docs/creating-cluster - Set your Google
Application Default Credentials.
https://developers.google.com/identity/protocols/application-default-
credentials


positional arguments:
  project_id     Your Cloud Platform project ID.
  instance_id    ID of the Cloud Bigtable instance to connect to.


optional arguments:
  -h, --help     show this help message and exit
  --table TABLE  Table to create and destroy. (default: Hello-Bigtable)
+ +## Additional Information + +You can read the documentation for more details on API usage and use GitHub +to browse the source and [report issues][issues]. + +### Contributing +View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. + +[authentication]: https://cloud.google.com/docs/authentication/getting-started +[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing +[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ +[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues +[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst +[py_style]: http://google.github.io/styleguide/pyguide.html +[cloud_sdk]: https://cloud.google.com/sdk/docs +[gcloud_shell]: https://cloud.google.com/shell/docs +[gcloud_shell]: https://cloud.google.com/shell/docs diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/main.py b/packages/google-cloud-bigtable/samples/data_client/hello/main.py new file mode 100644 index 000000000000..6012383fd1f8 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/hello/main.py @@ -0,0 +1,133 @@ +#!/usr/bin/env python + +# Copyright 2024 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. + +"""Demonstrates how to connect to Cloud Bigtable and run some basic operations with the sync data APIs + +Prerequisites: + +- Create a Cloud Bigtable instance. + https://cloud.google.com/bigtable/docs/creating-instance +- Set your Google Application Default Credentials. + https://developers.google.com/identity/protocols/application-default-credentials +""" + +import argparse + +# [START bigtable_hw_imports_data_client] +from google.cloud import bigtable +from google.cloud.bigtable.data import row_filters + +from ..utils import wait_for_table + +# [END bigtable_hw_imports_data_client] + +# use to ignore warnings +row_filters + + +def main(project_id, instance_id, table_id): + # [START bigtable_hw_connect_data_client] + client = bigtable.data.BigtableDataClient(project=project_id) + table = client.get_table(instance_id, table_id) + # [END bigtable_hw_connect_data_client] + + # [START bigtable_hw_create_table_data_client] + from google.cloud.bigtable import column_family + + # the data client only supports the data API. Table creation is an admin operation + # use admin client to create the table + print("Creating the {} table.".format(table_id)) + admin_client = bigtable.Client(project=project_id, admin=True) + admin_instance = admin_client.instance(instance_id) + admin_table = admin_instance.table(table_id) + + print("Creating column family cf1 with Max Version GC rule...") + # Create a column family with GC policy : most recent N versions + # Define the GC policy to retain only the most recent 2 versions + max_versions_rule = column_family.MaxVersionsGCRule(2) + column_family_id = b"cf1" + column_families = {column_family_id: max_versions_rule} + if not admin_table.exists(): + admin_table.create(column_families=column_families) + else: + print("Table {} already exists.".format(table_id)) + # [END bigtable_hw_create_table_data_client] + + try: + # let table creation complete + wait_for_table(admin_table) + # [START bigtable_hw_write_rows_data_client] + print("Writing some greetings to the table.") + greetings = [b"Hello World!", b"Hello Cloud Bigtable!", b"Hello Python!"] + mutations = [] + column = b"greeting" + for i, value in enumerate(greetings): + row_key = f"greeting{i}".encode() + row_mutation = bigtable.data.RowMutationEntry( + row_key, bigtable.data.SetCell(column_family_id, column, value) + ) + mutations.append(row_mutation) + table.bulk_mutate_rows(mutations) + # [END bigtable_hw_write_rows_data_client] + + # [START bigtable_hw_create_filter_data_client] + # Create a filter to only retrieve the most recent version of the cell + # for each column across entire row. + row_filter = bigtable.data.row_filters.CellsColumnLimitFilter(1) + # [END bigtable_hw_create_filter_data_client] + + # [START bigtable_hw_get_with_filter_data_client] + # [START bigtable_hw_get_by_key_data_client] + print("Getting a single greeting by row key.") + key = "greeting0".encode() + + row = table.read_row(key, row_filter=row_filter) + cell = row.cells[0] + print(cell.value.decode("utf-8")) + # [END bigtable_hw_get_by_key_data_client] + # [END bigtable_hw_get_with_filter_data_client] + + # [START bigtable_hw_scan_with_filter_data_client] + # [START bigtable_hw_scan_all_data_client] + print("Scanning for all greetings:") + query = bigtable.data.ReadRowsQuery(row_filter=row_filter) + for row in table.read_rows(query): + cell = row.cells[0] + print(cell.value.decode("utf-8")) + # [END bigtable_hw_scan_all_data_client] + # [END bigtable_hw_scan_with_filter_data_client] + finally: + # [START bigtable_hw_delete_table_data_client] + print("Deleting the {} table.".format(table_id)) + admin_table.delete() + client.close() + # [END bigtable_hw_delete_table_data_client] + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description=__doc__, formatter_class=argparse.ArgumentDefaultsHelpFormatter + ) + parser.add_argument("project_id", help="Your Cloud Platform project ID.") + parser.add_argument( + "instance_id", help="ID of the Cloud Bigtable instance to connect to." + ) + parser.add_argument( + "--table", help="Table to create and destroy.", default="Hello-Bigtable" + ) + + args = parser.parse_args() + main(args.project_id, args.instance_id, args.table) diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/main_test.py b/packages/google-cloud-bigtable/samples/data_client/hello/main_test.py new file mode 100644 index 000000000000..e8b850797963 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/hello/main_test.py @@ -0,0 +1,35 @@ +# Copyright 2024 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import uuid + +from .main import main + +PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] +BIGTABLE_INSTANCE = os.environ["BIGTABLE_INSTANCE"] +TABLE_ID = f"hello-world-test-{str(uuid.uuid4())[:16]}" + + +def test_main(capsys): + main(PROJECT, BIGTABLE_INSTANCE, TABLE_ID) + + out, _ = capsys.readouterr() + assert "Creating the {} table.".format(TABLE_ID) in out + assert "Writing some greetings to the table." in out + assert "Getting a single greeting by row key." in out + assert "Hello World!" in out + assert "Scanning for all greetings" in out + assert "Hello Cloud Bigtable!" in out + assert "Deleting the {} table.".format(TABLE_ID) in out diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/noxfile.py b/packages/google-cloud-bigtable/samples/data_client/hello/noxfile.py new file mode 100644 index 000000000000..c0e60097b353 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/hello/noxfile.py @@ -0,0 +1,292 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import glob +import os +import sys +from pathlib import Path +from typing import Callable, Dict, Optional + +import nox + +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING +# DO NOT EDIT THIS FILE EVER! +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING + +BLACK_VERSION = "black==22.3.0" +ISORT_VERSION = "isort==5.10.1" + +# Copy `noxfile_config.py` to your directory and modify it instead. + +# `TEST_CONFIG` dict is a configuration hook that allows users to +# modify the test configurations. The values here should be in sync +# with `noxfile_config.py`. Users will copy `noxfile_config.py` into +# their directory and modify it. + +TEST_CONFIG = { + # You can opt out from the test for specific Python versions. + "ignored_versions": [], + # Old samples are opted out of enforcing Python type hints + # All new samples should feature them + "enforce_type_hints": False, + # An envvar key for determining the project id to use. Change it + # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a + # build specific Cloud project. You can also use your own string + # to use your own Cloud project. + "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", + # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', + # If you need to use a specific version of pip, + # change pip_version_override to the string representation + # of the version number, for example, "20.2.4" + "pip_version_override": None, + # A dictionary you want to inject into your test. Don't put any + # secrets here. These values will override predefined values. + "envs": {}, +} + + +try: + # Ensure we can import noxfile_config in the project's directory. + sys.path.append(".") + from noxfile_config import TEST_CONFIG_OVERRIDE +except ImportError as e: + print("No user noxfile_config found: detail: {}".format(e)) + TEST_CONFIG_OVERRIDE = {} + +# Update the TEST_CONFIG with the user supplied values. +TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) + + +def get_pytest_env_vars() -> Dict[str, str]: + """Returns a dict for pytest invocation.""" + ret = {} + + # Override the GCLOUD_PROJECT and the alias. + env_key = TEST_CONFIG["gcloud_project_env"] + # This should error out if not set. + ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] + + # Apply user supplied envs. + ret.update(TEST_CONFIG["envs"]) + return ret + + +# DO NOT EDIT - automatically generated. +# All versions used to test samples. +ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] + +# Any default versions that should be ignored. +IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] + +TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) + +INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( + "True", + "true", +) + +# Error if a python version is missing +nox.options.error_on_missing_interpreters = True + +# +# Style Checks +# + + +# Linting with flake8. +# +# We ignore the following rules: +# E203: whitespace before ‘:’ +# E266: too many leading ‘#’ for block comment +# E501: line too long +# I202: Additional newline in a section of imports +# +# We also need to specify the rules which are ignored by default: +# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] +FLAKE8_COMMON_ARGS = [ + "--show-source", + "--builtin=gettext", + "--max-complexity=20", + "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", + "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", + "--max-line-length=88", +] + + +@nox.session +def lint(session: nox.sessions.Session) -> None: + if not TEST_CONFIG["enforce_type_hints"]: + session.install("flake8") + else: + session.install("flake8", "flake8-annotations") + + args = FLAKE8_COMMON_ARGS + [ + ".", + ] + session.run("flake8", *args) + + +# +# Black +# + + +@nox.session +def blacken(session: nox.sessions.Session) -> None: + """Run black. Format code to uniform standard.""" + session.install(BLACK_VERSION) + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + session.run("black", *python_files) + + +# +# format = isort + black +# + + +@nox.session +def format(session: nox.sessions.Session) -> None: + """ + Run isort to sort imports. Then run black + to format code to uniform standard. + """ + session.install(BLACK_VERSION, ISORT_VERSION) + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + # Use the --fss option to sort imports using strict alphabetical order. + # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections + session.run("isort", "--fss", *python_files) + session.run("black", *python_files) + + +# +# Sample Tests +# + + +PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] + + +def _session_tests( + session: nox.sessions.Session, post_install: Callable = None +) -> None: + # check for presence of tests + test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( + "**/test_*.py", recursive=True + ) + test_list.extend(glob.glob("**/tests", recursive=True)) + + if len(test_list) == 0: + print("No tests found, skipping directory.") + return + + if TEST_CONFIG["pip_version_override"]: + pip_version = TEST_CONFIG["pip_version_override"] + session.install(f"pip=={pip_version}") + """Runs py.test for a particular project.""" + concurrent_args = [] + if os.path.exists("requirements.txt"): + if os.path.exists("constraints.txt"): + session.install("-r", "requirements.txt", "-c", "constraints.txt") + else: + session.install("-r", "requirements.txt") + with open("requirements.txt") as rfile: + packages = rfile.read() + + if os.path.exists("requirements-test.txt"): + if os.path.exists("constraints-test.txt"): + session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") + else: + session.install("-r", "requirements-test.txt") + with open("requirements-test.txt") as rtfile: + packages += rtfile.read() + + if INSTALL_LIBRARY_FROM_SOURCE: + session.install("-e", _get_repo_root()) + + if post_install: + post_install(session) + + if "pytest-parallel" in packages: + concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) + elif "pytest-xdist" in packages: + concurrent_args.extend(["-n", "auto"]) + + session.run( + "pytest", + *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), + # Pytest will return 5 when no tests are collected. This can happen + # on travis where slow and flaky tests are excluded. + # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html + success_codes=[0, 5], + env=get_pytest_env_vars(), + ) + + +@nox.session(python=ALL_VERSIONS) +def py(session: nox.sessions.Session) -> None: + """Runs py.test for a sample using the specified version of Python.""" + if session.python in TESTED_VERSIONS: + _session_tests(session) + else: + session.skip( + "SKIPPED: {} tests are disabled for this sample.".format(session.python) + ) + + +# +# Readmegen +# + + +def _get_repo_root() -> Optional[str]: + """Returns the root folder of the project.""" + # Get root of this repository. Assume we don't have directories nested deeper than 10 items. + p = Path(os.getcwd()) + for i in range(10): + if p is None: + break + if Path(p / ".git").exists(): + return str(p) + # .git is not available in repos cloned via Cloud Build + # setup.py is always in the library's root, so use that instead + # https://github.com/googleapis/synthtool/issues/792 + if Path(p / "setup.py").exists(): + return str(p) + p = p.parent + raise Exception("Unable to detect repository root.") + + +GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) + + +@nox.session +@nox.parametrize("path", GENERATED_READMES) +def readmegen(session: nox.sessions.Session, path: str) -> None: + """(Re-)generates the readme for a sample.""" + session.install("jinja2", "pyyaml") + dir_ = os.path.dirname(path) + + if os.path.exists(os.path.join(dir_, "requirements.txt")): + session.install("-r", os.path.join(dir_, "requirements.txt")) + + in_file = os.path.join(dir_, "README.rst.in") + session.run( + "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file + ) diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/requirements-test.txt b/packages/google-cloud-bigtable/samples/data_client/hello/requirements-test.txt new file mode 100644 index 000000000000..e079f8a6038d --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/hello/requirements-test.txt @@ -0,0 +1 @@ +pytest diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/requirements.txt b/packages/google-cloud-bigtable/samples/data_client/hello/requirements.txt new file mode 100644 index 000000000000..5113ca7f17bb --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/hello/requirements.txt @@ -0,0 +1,2 @@ +google-cloud-bigtable==2.35.0 +google-cloud-core==2.5.0 diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/README.md b/packages/google-cloud-bigtable/samples/data_client/quickstart/README.md new file mode 100644 index 000000000000..f61000e135d0 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/quickstart/README.md @@ -0,0 +1,52 @@ +[//]: # "This README.md file is auto-generated, all changes to this file will be lost." +[//]: # "To regenerate it, use `python -m synthtool`." + +## Python Samples for Cloud Bigtable + +This directory contains samples for Cloud Bigtable, which may be used as a refererence for how to use this product. +Samples, quickstarts, and other documentation are available at cloud.google.com. + + +### Quickstart + +Demonstrates of Cloud Bigtable. This sample creates a Bigtable client, connects to an instance and then to a table, then closes the connection. + + +Open in Cloud Shell + + +To run this sample: + +1. If this is your first time working with GCP products, you will need to set up [the Cloud SDK][cloud_sdk] or utilize [Google Cloud Shell][gcloud_shell]. This sample may [require authetication][authentication] and you will need to [enable billing][enable_billing]. + +1. Make a fork of this repo and clone the branch locally, then navigate to the sample directory you want to use. + +1. Install the dependencies needed to run the samples. + + pip install -r requirements.txt + +1. Run the sample using + + python main.py + + + +
usage: main.py [-h] [--table TABLE] project_id instance_id 


positional arguments:
  project_id     Your Cloud Platform project ID.
  instance_id    ID of the Cloud Bigtable instance to connect to.


optional arguments:
  -h, --help     show this help message and exit
  --table TABLE  Existing table used in the quickstart. (default: my-table)
+ +## Additional Information + +You can read the documentation for more details on API usage and use GitHub +to browse the source and [report issues][issues]. + +### Contributing +View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. + +[authentication]: https://cloud.google.com/docs/authentication/getting-started +[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing +[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ +[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues +[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst +[py_style]: http://google.github.io/styleguide/pyguide.html +[cloud_sdk]: https://cloud.google.com/sdk/docs +[gcloud_shell]: https://cloud.google.com/shell/docs +[gcloud_shell]: https://cloud.google.com/shell/docs diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/main.py b/packages/google-cloud-bigtable/samples/data_client/quickstart/main.py new file mode 100644 index 000000000000..4f1818265900 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/quickstart/main.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +# Copyright 2024 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. + +# [START bigtable_quickstart_data_client] +import argparse + +from google.cloud.bigtable.data import BigtableDataClient + + +def main(project_id="project-id", instance_id="instance-id", table_id="my-table"): + # Create a Cloud Bigtable client. + client = BigtableDataClient(project=project_id) + + # Open an existing table. + table = client.get_table(instance_id, table_id) + + row_key = "r1" + row = table.read_row(row_key) + + column_family_id = "cf1" + column_id = b"c1" + value = row.get_cells(column_family_id, column_id)[0].value.decode("utf-8") + + client.close() + + print("Row key: {}\nData: {}".format(row_key, value)) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description=__doc__, formatter_class=argparse.ArgumentDefaultsHelpFormatter + ) + parser.add_argument("project_id", help="Your Cloud Platform project ID.") + parser.add_argument( + "instance_id", help="ID of the Cloud Bigtable instance to connect to." + ) + parser.add_argument( + "--table", help="Existing table used in the quickstart.", default="my-table" + ) + + args = parser.parse_args() + main(args.project_id, args.instance_id, args.table) + +# [END bigtable_quickstart_data_client] diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/main_test.py b/packages/google-cloud-bigtable/samples/data_client/quickstart/main_test.py new file mode 100644 index 000000000000..6b31da66d21e --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/quickstart/main_test.py @@ -0,0 +1,48 @@ +# Copyright 2024 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import uuid +from typing import Generator + +import pytest + +from google.cloud.bigtable.data import BigtableDataClient, SetCell + +from ..utils import create_table_cm +from .main import main + +PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] +BIGTABLE_INSTANCE = os.environ["BIGTABLE_INSTANCE"] +TABLE_ID = f"quickstart-test-{str(uuid.uuid4())[:16]}" + + +@pytest.fixture +def table_id() -> Generator[str, None, None]: + with create_table_cm(PROJECT, BIGTABLE_INSTANCE, TABLE_ID, {"cf1": None}): + _populate_table(TABLE_ID) + yield TABLE_ID + + +def _populate_table(table_id: str): + with BigtableDataClient(project=PROJECT) as client: + with client.get_table(BIGTABLE_INSTANCE, table_id) as table: + table.mutate_row("r1", SetCell("cf1", "c1", "test-value")) + + +def test_main(capsys, table_id): + main(PROJECT, BIGTABLE_INSTANCE, table_id) + + out, _ = capsys.readouterr() + assert "Row key: r1\nData: test-value\n" in out diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/noxfile.py b/packages/google-cloud-bigtable/samples/data_client/quickstart/noxfile.py new file mode 100644 index 000000000000..c0e60097b353 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/quickstart/noxfile.py @@ -0,0 +1,292 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import glob +import os +import sys +from pathlib import Path +from typing import Callable, Dict, Optional + +import nox + +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING +# DO NOT EDIT THIS FILE EVER! +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING + +BLACK_VERSION = "black==22.3.0" +ISORT_VERSION = "isort==5.10.1" + +# Copy `noxfile_config.py` to your directory and modify it instead. + +# `TEST_CONFIG` dict is a configuration hook that allows users to +# modify the test configurations. The values here should be in sync +# with `noxfile_config.py`. Users will copy `noxfile_config.py` into +# their directory and modify it. + +TEST_CONFIG = { + # You can opt out from the test for specific Python versions. + "ignored_versions": [], + # Old samples are opted out of enforcing Python type hints + # All new samples should feature them + "enforce_type_hints": False, + # An envvar key for determining the project id to use. Change it + # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a + # build specific Cloud project. You can also use your own string + # to use your own Cloud project. + "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", + # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', + # If you need to use a specific version of pip, + # change pip_version_override to the string representation + # of the version number, for example, "20.2.4" + "pip_version_override": None, + # A dictionary you want to inject into your test. Don't put any + # secrets here. These values will override predefined values. + "envs": {}, +} + + +try: + # Ensure we can import noxfile_config in the project's directory. + sys.path.append(".") + from noxfile_config import TEST_CONFIG_OVERRIDE +except ImportError as e: + print("No user noxfile_config found: detail: {}".format(e)) + TEST_CONFIG_OVERRIDE = {} + +# Update the TEST_CONFIG with the user supplied values. +TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) + + +def get_pytest_env_vars() -> Dict[str, str]: + """Returns a dict for pytest invocation.""" + ret = {} + + # Override the GCLOUD_PROJECT and the alias. + env_key = TEST_CONFIG["gcloud_project_env"] + # This should error out if not set. + ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] + + # Apply user supplied envs. + ret.update(TEST_CONFIG["envs"]) + return ret + + +# DO NOT EDIT - automatically generated. +# All versions used to test samples. +ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] + +# Any default versions that should be ignored. +IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] + +TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) + +INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( + "True", + "true", +) + +# Error if a python version is missing +nox.options.error_on_missing_interpreters = True + +# +# Style Checks +# + + +# Linting with flake8. +# +# We ignore the following rules: +# E203: whitespace before ‘:’ +# E266: too many leading ‘#’ for block comment +# E501: line too long +# I202: Additional newline in a section of imports +# +# We also need to specify the rules which are ignored by default: +# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] +FLAKE8_COMMON_ARGS = [ + "--show-source", + "--builtin=gettext", + "--max-complexity=20", + "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", + "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", + "--max-line-length=88", +] + + +@nox.session +def lint(session: nox.sessions.Session) -> None: + if not TEST_CONFIG["enforce_type_hints"]: + session.install("flake8") + else: + session.install("flake8", "flake8-annotations") + + args = FLAKE8_COMMON_ARGS + [ + ".", + ] + session.run("flake8", *args) + + +# +# Black +# + + +@nox.session +def blacken(session: nox.sessions.Session) -> None: + """Run black. Format code to uniform standard.""" + session.install(BLACK_VERSION) + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + session.run("black", *python_files) + + +# +# format = isort + black +# + + +@nox.session +def format(session: nox.sessions.Session) -> None: + """ + Run isort to sort imports. Then run black + to format code to uniform standard. + """ + session.install(BLACK_VERSION, ISORT_VERSION) + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + # Use the --fss option to sort imports using strict alphabetical order. + # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections + session.run("isort", "--fss", *python_files) + session.run("black", *python_files) + + +# +# Sample Tests +# + + +PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] + + +def _session_tests( + session: nox.sessions.Session, post_install: Callable = None +) -> None: + # check for presence of tests + test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( + "**/test_*.py", recursive=True + ) + test_list.extend(glob.glob("**/tests", recursive=True)) + + if len(test_list) == 0: + print("No tests found, skipping directory.") + return + + if TEST_CONFIG["pip_version_override"]: + pip_version = TEST_CONFIG["pip_version_override"] + session.install(f"pip=={pip_version}") + """Runs py.test for a particular project.""" + concurrent_args = [] + if os.path.exists("requirements.txt"): + if os.path.exists("constraints.txt"): + session.install("-r", "requirements.txt", "-c", "constraints.txt") + else: + session.install("-r", "requirements.txt") + with open("requirements.txt") as rfile: + packages = rfile.read() + + if os.path.exists("requirements-test.txt"): + if os.path.exists("constraints-test.txt"): + session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") + else: + session.install("-r", "requirements-test.txt") + with open("requirements-test.txt") as rtfile: + packages += rtfile.read() + + if INSTALL_LIBRARY_FROM_SOURCE: + session.install("-e", _get_repo_root()) + + if post_install: + post_install(session) + + if "pytest-parallel" in packages: + concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) + elif "pytest-xdist" in packages: + concurrent_args.extend(["-n", "auto"]) + + session.run( + "pytest", + *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), + # Pytest will return 5 when no tests are collected. This can happen + # on travis where slow and flaky tests are excluded. + # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html + success_codes=[0, 5], + env=get_pytest_env_vars(), + ) + + +@nox.session(python=ALL_VERSIONS) +def py(session: nox.sessions.Session) -> None: + """Runs py.test for a sample using the specified version of Python.""" + if session.python in TESTED_VERSIONS: + _session_tests(session) + else: + session.skip( + "SKIPPED: {} tests are disabled for this sample.".format(session.python) + ) + + +# +# Readmegen +# + + +def _get_repo_root() -> Optional[str]: + """Returns the root folder of the project.""" + # Get root of this repository. Assume we don't have directories nested deeper than 10 items. + p = Path(os.getcwd()) + for i in range(10): + if p is None: + break + if Path(p / ".git").exists(): + return str(p) + # .git is not available in repos cloned via Cloud Build + # setup.py is always in the library's root, so use that instead + # https://github.com/googleapis/synthtool/issues/792 + if Path(p / "setup.py").exists(): + return str(p) + p = p.parent + raise Exception("Unable to detect repository root.") + + +GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) + + +@nox.session +@nox.parametrize("path", GENERATED_READMES) +def readmegen(session: nox.sessions.Session, path: str) -> None: + """(Re-)generates the readme for a sample.""" + session.install("jinja2", "pyyaml") + dir_ = os.path.dirname(path) + + if os.path.exists(os.path.join(dir_, "requirements.txt")): + session.install("-r", os.path.join(dir_, "requirements.txt")) + + in_file = os.path.join(dir_, "README.rst.in") + session.run( + "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file + ) diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/requirements-test.txt b/packages/google-cloud-bigtable/samples/data_client/quickstart/requirements-test.txt new file mode 100644 index 000000000000..ee4ba018603b --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/quickstart/requirements-test.txt @@ -0,0 +1,2 @@ +pytest +pytest-asyncio diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/requirements.txt b/packages/google-cloud-bigtable/samples/data_client/quickstart/requirements.txt new file mode 100644 index 000000000000..730d25dec63f --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/quickstart/requirements.txt @@ -0,0 +1 @@ +google-cloud-bigtable==2.35.0 diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/README.md b/packages/google-cloud-bigtable/samples/data_client/snippets/README.md new file mode 100644 index 000000000000..7c0dd4463214 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/README.md @@ -0,0 +1,33 @@ +[//]: # "This README.md file is auto-generated, all changes to this file will be lost." +[//]: # "To regenerate it, use `python -m synthtool`." + +## Python Samples for Cloud Bigtable + +This directory contains samples for Cloud Bigtable, which may be used as a reference for how to use this product. +Samples, quickstarts, and other documentation are available at [cloud.google.com](https://cloud.google.com/bigtable). + + +### Snippets + +This folder contains snippets for Python Cloud Bigtable. + + + + +## Additional Information + +You can read the documentation for more details on API usage and use GitHub +to [browse the source](https://github.com/googleapis/python-bigtable) and [report issues][issues]. + +### Contributing +View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. + +[authentication]: https://cloud.google.com/docs/authentication/getting-started +[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing +[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ +[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues +[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst +[py_style]: http://google.github.io/styleguide/pyguide.html +[cloud_sdk]: https://cloud.google.com/sdk/docs +[gcloud_shell]: https://cloud.google.com/shell/docs +[gcloud_shell]: https://cloud.google.com/shell/docs diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py new file mode 100644 index 000000000000..30cbf98887d7 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py @@ -0,0 +1,302 @@ +#!/usr/bin/env python + +# Copyright 2024, 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. + + +def write_simple(table): + # [START bigtable_write_simple] + from google.cloud.bigtable.data import BigtableDataClient, SetCell + + def write_simple(project_id, instance_id, table_id): + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + family_id = "stats_summary" + row_key = b"phone#4c410523#20190501" + + cell_mutation = SetCell(family_id, "connected_cell", 1) + wifi_mutation = SetCell(family_id, "connected_wifi", 1) + os_mutation = SetCell(family_id, "os_build", "PQ2A.190405.003") + + table.mutate_row(row_key, cell_mutation) + table.mutate_row(row_key, wifi_mutation) + table.mutate_row(row_key, os_mutation) + + # [END bigtable_write_simple] + write_simple(table.client.project, table.instance_id, table.table_id) + + +def write_batch(table): + # [START bigtable_writes_batch] + from google.cloud.bigtable.data import BigtableDataClient + from google.cloud.bigtable.data.exceptions import MutationsExceptionGroup + from google.cloud.bigtable.data.mutations import RowMutationEntry, SetCell + + def write_batch(project_id, instance_id, table_id): + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + family_id = "stats_summary" + try: + with table.mutations_batcher() as batcher: + mutation_list = [ + SetCell(family_id, "connected_cell", 1), + SetCell(family_id, "connected_wifi", 1), + SetCell(family_id, "os_build", "12155.0.0-rc1"), + ] + batcher.append( + RowMutationEntry("tablet#a0b81f74#20190501", mutation_list) + ) + batcher.append( + RowMutationEntry("tablet#a0b81f74#20190502", mutation_list) + ) + except MutationsExceptionGroup as e: + for sub_exception in e.exceptions: + failed_entry: RowMutationEntry = sub_exception.entry + cause: Exception = sub_exception.__cause__ + print( + f"Failed mutation: {failed_entry.row_key} with error: {cause!r}" + ) + + # [END bigtable_writes_batch] + write_batch(table.client.project, table.instance_id, table.table_id) + + +def write_increment(table): + # [START bigtable_write_increment] + from google.cloud.bigtable.data import BigtableDataClient + from google.cloud.bigtable.data.read_modify_write_rules import IncrementRule + + def write_increment(project_id, instance_id, table_id): + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + family_id = "stats_summary" + row_key = "phone#4c410523#20190501" + + increment_rule = IncrementRule( + family_id, "connected_wifi", increment_amount=-1 + ) + result_row = table.read_modify_write_row(row_key, increment_rule) + + cell = result_row[0] + print(f"{cell.row_key} value: {int(cell)}") + + # [END bigtable_write_increment] + write_increment(table.client.project, table.instance_id, table.table_id) + + +def write_conditional(table): + # [START bigtable_writes_conditional] + from google.cloud.bigtable.data import BigtableDataClient, SetCell, row_filters + + def write_conditional(project_id, instance_id, table_id): + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + family_id = "stats_summary" + row_key = "phone#4c410523#20190501" + + row_filter = row_filters.RowFilterChain( + filters=[ + row_filters.FamilyNameRegexFilter(family_id), + row_filters.ColumnQualifierRegexFilter("os_build"), + row_filters.ValueRegexFilter("PQ2A\\..*"), + ] + ) + + if_true = SetCell(family_id, "os_name", "android") + result = table.check_and_mutate_row( + row_key, + row_filter, + true_case_mutations=if_true, + false_case_mutations=None, + ) + if result is True: + print("The row os_name was set to android") + + # [END bigtable_writes_conditional] + write_conditional(table.client.project, table.instance_id, table.table_id) + + +def write_aggregate(table): + # [START bigtable_write_aggregate] + import time + + from google.cloud.bigtable.data import BigtableDataClient + from google.cloud.bigtable.data.exceptions import MutationsExceptionGroup + from google.cloud.bigtable.data.mutations import AddToCell, RowMutationEntry + + def write_aggregate(project_id, instance_id, table_id): + with BigtableDataClient(project=project_id) as client: + table = client.get_table(instance_id, table_id) + row_key = "unique_device_ids_1" + try: + with table.mutations_batcher() as batcher: + reading = AddToCell( + family="counters", + qualifier="odometer", + value=32304, + timestamp_micros=time.time_ns() // 1000, + ) + batcher.append( + RowMutationEntry(row_key.encode("utf-8"), [reading]) + ) + except MutationsExceptionGroup as e: + for sub_exception in e.exceptions: + failed_entry: RowMutationEntry = sub_exception.entry + cause: Exception = sub_exception.__cause__ + print( + f"Failed mutation for row {failed_entry.row_key!r} with error: {cause!r}" + ) + + # [END bigtable_write_aggregate] + write_aggregate(table.client.project, table.instance_id, table.table_id) + + +def read_row(table): + # [START bigtable_reads_row] + from google.cloud.bigtable.data import BigtableDataClient + + def read_row(project_id, instance_id, table_id): + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + row_key = "phone#4c410523#20190501" + row = table.read_row(row_key) + print(row) + + # [END bigtable_reads_row] + read_row(table.client.project, table.instance_id, table.table_id) + + +def read_row_partial(table): + # [START bigtable_reads_row_partial] + from google.cloud.bigtable.data import BigtableDataClient, row_filters + + def read_row_partial(project_id, instance_id, table_id): + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + row_key = "phone#4c410523#20190501" + col_filter = row_filters.ColumnQualifierRegexFilter(b"os_build") + + row = table.read_row(row_key, row_filter=col_filter) + print(row) + + # [END bigtable_reads_row_partial] + read_row_partial(table.client.project, table.instance_id, table.table_id) + + +def read_rows_multiple(table): + # [START bigtable_reads_rows] + from google.cloud.bigtable.data import BigtableDataClient, ReadRowsQuery + + def read_rows(project_id, instance_id, table_id): + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + query = ReadRowsQuery( + row_keys=[b"phone#4c410523#20190501", b"phone#4c410523#20190502"] + ) + for row in table.read_rows(query): + print(row) + + # [END bigtable_reads_rows] + read_rows(table.client.project, table.instance_id, table.table_id) + + +def read_row_range(table): + # [START bigtable_reads_row_range] + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + RowRange, + ) + + def read_row_range(project_id, instance_id, table_id): + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + row_range = RowRange( + start_key=b"phone#4c410523#20190501", + end_key=b"phone#4c410523#201906201", + ) + query = ReadRowsQuery(row_ranges=[row_range]) + + for row in table.read_rows(query): + print(row) + + # [END bigtable_reads_row_range] + read_row_range(table.client.project, table.instance_id, table.table_id) + + +def read_with_prefix(table): + # [START bigtable_reads_prefix] + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + RowRange, + ) + + def read_prefix(project_id, instance_id, table_id): + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + prefix = "phone#" + end_key = prefix[:-1] + chr(ord(prefix[-1]) + 1) + prefix_range = RowRange(start_key=prefix, end_key=end_key) + query = ReadRowsQuery(row_ranges=[prefix_range]) + + for row in table.read_rows(query): + print(row) + + # [END bigtable_reads_prefix] + read_prefix(table.client.project, table.instance_id, table.table_id) + + +def read_with_filter(table): + # [START bigtable_reads_filter] + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + def read_with_filter(project_id, instance_id, table_id): + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + row_filter = row_filters.ValueRegexFilter(b"PQ2A.*$") + query = ReadRowsQuery(row_filter=row_filter) + + for row in table.read_rows(query): + print(row) + + # [END bigtable_reads_filter] + read_with_filter(table.client.project, table.instance_id, table.table_id) + + +def execute_query(table): + # [START bigtable_execute_query] + from google.cloud.bigtable.data import BigtableDataClient + + def execute_query(project_id, instance_id, table_id): + with BigtableDataClient(project=project_id) as client: + query = ( + "SELECT _key, stats_summary['os_build'], " + "stats_summary['connected_cell'], " + "stats_summary['connected_wifi'] " + f"from `{table_id}` WHERE _key=@row_key" + ) + result = client.execute_query( + query, + instance_id, + parameters={"row_key": b"phone#4c410523#20190501"}, + ) + results = list(result) + print(results) + + # [END bigtable_execute_query] + execute_query(table.client.project, table.instance_id, table.table_id) diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_test.py b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_test.py new file mode 100644 index 000000000000..15169a59c1ca --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_test.py @@ -0,0 +1,105 @@ +# Copyright 2024, Google LLC +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import uuid + +import pytest + +from ...utils import create_table_cm +from . import data_client_snippets as data_snippets + +PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] +BIGTABLE_INSTANCE = os.environ["BIGTABLE_INSTANCE"] +TABLE_ID = f"data-client-sync-{str(uuid.uuid4())[:16]}" + + +@pytest.fixture(scope="session") +def column_family_config(): + from google.cloud.bigtable_admin_v2 import types + + int_aggregate_type = types.Type.Aggregate( + input_type=types.Type(int64_type={"encoding": {"big_endian_bytes": {}}}), + sum={}, + ) + + return { + "family": types.ColumnFamily(), + "stats_summary": types.ColumnFamily(), + "counters": types.ColumnFamily( + value_type=types.Type(aggregate_type=int_aggregate_type) + ), + } + + +@pytest.fixture(scope="session") +def table_id(column_family_config): + with create_table_cm(PROJECT, BIGTABLE_INSTANCE, TABLE_ID, column_family_config): + yield TABLE_ID + + +@pytest.fixture +def table(table_id): + from google.cloud.bigtable.data import BigtableDataClient + + with BigtableDataClient(project=PROJECT) as client: + with client.get_table(BIGTABLE_INSTANCE, table_id) as table: + yield table + + +def test_write_simple(table): + data_snippets.write_simple(table) + + +def test_write_batch(table): + data_snippets.write_batch(table) + + +def test_write_increment(table): + data_snippets.write_increment(table) + + +def test_write_conditional(table): + data_snippets.write_conditional(table) + + +def test_write_aggregate(table): + data_snippets.write_aggregate(table) + + +def test_read_row(table): + data_snippets.read_row(table) + + +def test_read_row_partial(table): + data_snippets.read_row_partial(table) + + +def test_read_rows_multiple(table): + data_snippets.read_rows_multiple(table) + + +def test_read_row_range(table): + data_snippets.read_row_range(table) + + +def test_read_with_prefix(table): + data_snippets.read_with_prefix(table) + + +def test_read_with_filter(table): + data_snippets.read_with_filter(table) + + +def test_execute_query(table): + data_snippets.execute_query(table) diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets.py b/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets.py new file mode 100644 index 000000000000..f92119d3b618 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets.py @@ -0,0 +1,124 @@ +#!/usr/bin/env python + +# Copyright 2024, 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. + + +# [START bigtable_delete_from_column_data_client] +def delete_from_column(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + DeleteRangeFromColumn, + ) + + client = BigtableDataClient(project=project_id) + table = client.get_table(instance_id, table_id) + + table.mutate_row( + "phone#4c410523#20190501", + DeleteRangeFromColumn(family="cell_plan", qualifier=b"data_plan_01gb"), + ) + + table.close() + client.close() + + +# [END bigtable_delete_from_column_data_client] + + +# [START bigtable_delete_from_column_family_data_client] +def delete_from_column_family(project_id, instance_id, table_id): + from google.cloud.bigtable.data import BigtableDataClient, DeleteAllFromFamily + + client = BigtableDataClient(project=project_id) + table = client.get_table(instance_id, table_id) + + table.mutate_row("phone#4c410523#20190501", DeleteAllFromFamily("cell_plan")) + + table.close() + client.close() + + +# [END bigtable_delete_from_column_family_data_client] + + +# [START bigtable_delete_from_row_data_client] +def delete_from_row(project_id, instance_id, table_id): + from google.cloud.bigtable.data import BigtableDataClient, DeleteAllFromRow + + client = BigtableDataClient(project=project_id) + table = client.get_table(instance_id, table_id) + + table.mutate_row("phone#4c410523#20190501", DeleteAllFromRow()) + + table.close() + client.close() + + +# [END bigtable_delete_from_row_data_client] + + +# [START bigtable_streaming_and_batching_data_client] +def streaming_and_batching(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + DeleteRangeFromColumn, + ReadRowsQuery, + RowMutationEntry, + ) + + client = BigtableDataClient(project=project_id) + table = client.get_table(instance_id, table_id) + + with table.mutations_batcher() as batcher: + for row in table.read_rows(ReadRowsQuery(limit=10)): + batcher.append( + RowMutationEntry( + row.row_key, + DeleteRangeFromColumn( + family="cell_plan", qualifier=b"data_plan_01gb" + ), + ) + ) + + table.close() + client.close() + + +# [END bigtable_streaming_and_batching_data_client] + + +# [START bigtable_check_and_mutate_data_client] +def check_and_mutate(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + DeleteRangeFromColumn, + ) + from google.cloud.bigtable.data.row_filters import LiteralValueFilter + + client = BigtableDataClient(project=project_id) + table = client.get_table(instance_id, table_id) + + table.check_and_mutate_row( + "phone#4c410523#20190501", + predicate=LiteralValueFilter("PQ2A.190405.003"), + true_case_mutations=DeleteRangeFromColumn( + family="cell_plan", qualifier=b"data_plan_01gb" + ), + ) + + table.close() + client.close() + + +# [END bigtable_check_and_mutate_data_client] diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets_test.py b/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets_test.py new file mode 100644 index 000000000000..4481a5599a8e --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets_test.py @@ -0,0 +1,259 @@ +# Copyright 2024, Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import datetime +import os +import uuid +from typing import Generator + +import pytest +from google.cloud._helpers import _microseconds_from_datetime + +from ...utils import create_table_cm +from . import deletes_snippets + +PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] +BIGTABLE_INSTANCE = os.environ["BIGTABLE_INSTANCE"] +TABLE_ID = f"mobile-time-series-deletes-{str(uuid.uuid4())[:16]}" + + +@pytest.fixture(scope="module", autouse=True) +def table_id() -> Generator[str, None, None]: + with create_table_cm( + PROJECT, + BIGTABLE_INSTANCE, + TABLE_ID, + {"stats_summary": None, "cell_plan": None}, + verbose=False, + ): + _populate_table(TABLE_ID) + yield TABLE_ID + + +def _populate_table(table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + RowMutationEntry, + SetCell, + ) + + timestamp = datetime.datetime(2019, 5, 1) + timestamp_minus_hr = timestamp - datetime.timedelta(hours=1) + + with BigtableDataClient(project=PROJECT) as client: + with client.get_table(BIGTABLE_INSTANCE, table_id) as table: + with table.mutations_batcher() as batcher: + batcher.append( + RowMutationEntry( + "phone#4c410523#20190501", + [ + SetCell( + "stats_summary", + "connected_cell", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "connected_cell", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "connected_wifi", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "os_build", + "PQ2A.190405.003", + _microseconds_from_datetime(timestamp), + ), + SetCell( + "cell_plan", + "data_plan_01gb", + "true", + _microseconds_from_datetime(timestamp_minus_hr), + ), + SetCell( + "cell_plan", + "data_plan_01gb", + "false", + _microseconds_from_datetime(timestamp), + ), + SetCell( + "cell_plan", + "data_plan_05gb", + "true", + _microseconds_from_datetime(timestamp), + ), + ], + ) + ) + batcher.append( + RowMutationEntry( + "phone#4c410523#20190502", + [ + SetCell( + "stats_summary", + "connected_cell", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "connected_wifi", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "os_build", + "PQ2A.190405.004", + _microseconds_from_datetime(timestamp), + ), + SetCell( + "cell_plan", + "data_plan_05gb", + "true", + _microseconds_from_datetime(timestamp), + ), + ], + ) + ) + batcher.append( + RowMutationEntry( + "phone#4c410523#20190505", + [ + SetCell( + "stats_summary", + "connected_cell", + 0, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "connected_wifi", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "os_build", + "PQ2A.190406.000", + _microseconds_from_datetime(timestamp), + ), + SetCell( + "cell_plan", + "data_plan_05gb", + "true", + _microseconds_from_datetime(timestamp), + ), + ], + ) + ) + batcher.append( + RowMutationEntry( + "phone#5c10102#20190501", + [ + SetCell( + "stats_summary", + "connected_cell", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "connected_wifi", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "os_build", + "PQ2A.190401.002", + _microseconds_from_datetime(timestamp), + ), + SetCell( + "cell_plan", + "data_plan_10gb", + "true", + _microseconds_from_datetime(timestamp), + ), + ], + ) + ) + batcher.append( + RowMutationEntry( + "phone#5c10102#20190502", + [ + SetCell( + "stats_summary", + "connected_cell", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "connected_wifi", + 0, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "os_build", + "PQ2A.190406.000", + _microseconds_from_datetime(timestamp), + ), + SetCell( + "cell_plan", + "data_plan_10gb", + "true", + _microseconds_from_datetime(timestamp), + ), + ], + ) + ) + + +def assert_output_match(capsys, expected): + out, _ = capsys.readouterr() + assert out == expected + + +def test_delete_from_column(capsys, table_id): + deletes_snippets.delete_from_column(PROJECT, BIGTABLE_INSTANCE, table_id) + assert_output_match(capsys, "") + + +def test_delete_from_column_family(capsys, table_id): + deletes_snippets.delete_from_column_family(PROJECT, BIGTABLE_INSTANCE, table_id) + assert_output_match(capsys, "") + + +def test_delete_from_row(capsys, table_id): + deletes_snippets.delete_from_row(PROJECT, BIGTABLE_INSTANCE, table_id) + assert_output_match(capsys, "") + + +def test_streaming_and_batching(capsys, table_id): + deletes_snippets.streaming_and_batching(PROJECT, BIGTABLE_INSTANCE, table_id) + assert_output_match(capsys, "") + + +def test_check_and_mutate(capsys, table_id): + deletes_snippets.check_and_mutate(PROJECT, BIGTABLE_INSTANCE, table_id) + assert_output_match(capsys, "") diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets.py b/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets.py new file mode 100644 index 000000000000..434364621a6d --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets.py @@ -0,0 +1,389 @@ +# Copyright 2024, 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. + + +# [START bigtable_filters_limit_row_sample_data_client] +def filter_limit_row_sample(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + query = ReadRowsQuery(row_filter=row_filters.RowSampleFilter(0.75)) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_limit_row_sample_data_client] +# [START bigtable_filters_limit_row_regex_data_client] +def filter_limit_row_regex(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + query = ReadRowsQuery( + row_filter=row_filters.RowKeyRegexFilter(".*#20190501$".encode("utf-8")) + ) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_limit_row_regex_data_client] +# [START bigtable_filters_limit_cells_per_col_data_client] +def filter_limit_cells_per_col(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + query = ReadRowsQuery(row_filter=row_filters.CellsColumnLimitFilter(2)) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_limit_cells_per_col_data_client] +# [START bigtable_filters_limit_cells_per_row_data_client] +def filter_limit_cells_per_row(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + query = ReadRowsQuery(row_filter=row_filters.CellsRowLimitFilter(2)) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_limit_cells_per_row_data_client] +# [START bigtable_filters_limit_cells_per_row_offset_data_client] +def filter_limit_cells_per_row_offset(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + query = ReadRowsQuery(row_filter=row_filters.CellsRowOffsetFilter(2)) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_limit_cells_per_row_offset_data_client] +# [START bigtable_filters_limit_col_family_regex_data_client] +def filter_limit_col_family_regex(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + query = ReadRowsQuery( + row_filter=row_filters.FamilyNameRegexFilter("stats_.*$".encode("utf-8")) + ) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_limit_col_family_regex_data_client] +# [START bigtable_filters_limit_col_qualifier_regex_data_client] +def filter_limit_col_qualifier_regex(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + query = ReadRowsQuery( + row_filter=row_filters.ColumnQualifierRegexFilter( + "connected_.*$".encode("utf-8") + ) + ) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_limit_col_qualifier_regex_data_client] +# [START bigtable_filters_limit_col_range_data_client] +def filter_limit_col_range(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + query = ReadRowsQuery( + row_filter=row_filters.ColumnRangeFilter( + "cell_plan", b"data_plan_01gb", b"data_plan_10gb", inclusive_end=False + ) + ) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_limit_col_range_data_client] +# [START bigtable_filters_limit_value_range_data_client] +def filter_limit_value_range(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + query = ReadRowsQuery( + row_filter=row_filters.ValueRangeFilter(b"PQ2A.190405", b"PQ2A.190406") + ) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_limit_value_range_data_client] +# [START bigtable_filters_limit_value_regex_data_client] + + +def filter_limit_value_regex(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + query = ReadRowsQuery( + row_filter=row_filters.ValueRegexFilter("PQ2A.*$".encode("utf-8")) + ) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_limit_value_regex_data_client] +# [START bigtable_filters_limit_timestamp_range_data_client] +def filter_limit_timestamp_range(project_id, instance_id, table_id): + import datetime + + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + end = datetime.datetime(2019, 5, 1) + + query = ReadRowsQuery(row_filter=row_filters.TimestampRangeFilter(end=end)) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_limit_timestamp_range_data_client] +# [START bigtable_filters_limit_block_all_data_client] +def filter_limit_block_all(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + query = ReadRowsQuery(row_filter=row_filters.BlockAllFilter(True)) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_limit_block_all_data_client] +# [START bigtable_filters_limit_pass_all_data_client] +def filter_limit_pass_all(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + query = ReadRowsQuery(row_filter=row_filters.PassAllFilter(True)) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_limit_pass_all_data_client] +# [START bigtable_filters_modify_strip_value_data_client] +def filter_modify_strip_value(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + query = ReadRowsQuery(row_filter=row_filters.StripValueTransformerFilter(True)) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_modify_strip_value_data_client] +# [START bigtable_filters_modify_apply_label_data_client] +def filter_modify_apply_label(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + query = ReadRowsQuery(row_filter=row_filters.ApplyLabelFilter(label="labelled")) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_modify_apply_label_data_client] +# [START bigtable_filters_composing_chain_data_client] +def filter_composing_chain(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + query = ReadRowsQuery( + row_filter=row_filters.RowFilterChain( + filters=[ + row_filters.CellsColumnLimitFilter(1), + row_filters.FamilyNameRegexFilter("cell_plan"), + ] + ) + ) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_composing_chain_data_client] +# [START bigtable_filters_composing_interleave_data_client] +def filter_composing_interleave(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + query = ReadRowsQuery( + row_filter=row_filters.RowFilterUnion( + filters=[ + row_filters.ValueRegexFilter("true"), + row_filters.ColumnQualifierRegexFilter("os_build"), + ] + ) + ) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_composing_interleave_data_client] +# [START bigtable_filters_composing_condition_data_client] +def filter_composing_condition(project_id, instance_id, table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + row_filters, + ) + + query = ReadRowsQuery( + row_filter=row_filters.ConditionalRowFilter( + predicate_filter=row_filters.RowFilterChain( + filters=[ + row_filters.ColumnQualifierRegexFilter("data_plan_10gb"), + row_filters.ValueRegexFilter("true"), + ] + ), + true_filter=row_filters.ApplyLabelFilter(label="passed-filter"), + false_filter=row_filters.ApplyLabelFilter(label="filtered-out"), + ) + ) + + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + for row in table.read_rows(query): + print_row(row) + + +# [END bigtable_filters_composing_condition_data_client] + + +def print_row(row): + from google.cloud._helpers import _datetime_from_microseconds + + print("Reading data for {}:".format(row.row_key.decode("utf-8"))) + last_family = None + for cell in row.cells: + if last_family != cell.family: + print("Column Family {}".format(cell.family)) + last_family = cell.family + + labels = " [{}]".format(",".join(cell.labels)) if len(cell.labels) else "" + print( + "\t{}: {} @{}{}".format( + cell.qualifier.decode("utf-8"), + cell.value.decode("utf-8"), + _datetime_from_microseconds(cell.timestamp_micros), + labels, + ) + ) + print("") diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets_test.py b/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets_test.py new file mode 100644 index 000000000000..29b55941ce57 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets_test.py @@ -0,0 +1,373 @@ +# Copyright 2020, Google LLC +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import datetime +import inspect +import os +import uuid +from typing import Generator + +import pytest +from google.cloud._helpers import _microseconds_from_datetime + +from ...utils import create_table_cm +from . import filter_snippets +from .snapshots.snap_filters_test import snapshots + +PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] +BIGTABLE_INSTANCE = os.environ["BIGTABLE_INSTANCE"] +TABLE_ID = f"mobile-time-series-filters-{str(uuid.uuid4())[:16]}" + + +@pytest.fixture(scope="module", autouse=True) +def table_id() -> Generator[str, None, None]: + with create_table_cm( + PROJECT, BIGTABLE_INSTANCE, TABLE_ID, {"stats_summary": None, "cell_plan": None} + ): + _populate_table(TABLE_ID) + yield TABLE_ID + + +def _populate_table(table_id): + from google.cloud.bigtable.data import ( + BigtableDataClient, + RowMutationEntry, + SetCell, + ) + + timestamp = datetime.datetime(2019, 5, 1) + timestamp_minus_hr = timestamp - datetime.timedelta(hours=1) + + with BigtableDataClient(project=PROJECT) as client: + with client.get_table(BIGTABLE_INSTANCE, table_id) as table: + with table.mutations_batcher() as batcher: + batcher.append( + RowMutationEntry( + "phone#4c410523#20190501", + [ + SetCell( + "stats_summary", + "connected_cell", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "connected_cell", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "connected_wifi", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "os_build", + "PQ2A.190405.003", + _microseconds_from_datetime(timestamp), + ), + SetCell( + "cell_plan", + "data_plan_01gb", + "true", + _microseconds_from_datetime(timestamp_minus_hr), + ), + SetCell( + "cell_plan", + "data_plan_01gb", + "false", + _microseconds_from_datetime(timestamp), + ), + SetCell( + "cell_plan", + "data_plan_05gb", + "true", + _microseconds_from_datetime(timestamp), + ), + ], + ) + ) + batcher.append( + RowMutationEntry( + "phone#4c410523#20190502", + [ + SetCell( + "stats_summary", + "connected_cell", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "connected_wifi", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "os_build", + "PQ2A.190405.004", + _microseconds_from_datetime(timestamp), + ), + SetCell( + "cell_plan", + "data_plan_05gb", + "true", + _microseconds_from_datetime(timestamp), + ), + ], + ) + ) + batcher.append( + RowMutationEntry( + "phone#4c410523#20190505", + [ + SetCell( + "stats_summary", + "connected_cell", + 0, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "connected_wifi", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "os_build", + "PQ2A.190406.000", + _microseconds_from_datetime(timestamp), + ), + SetCell( + "cell_plan", + "data_plan_05gb", + "true", + _microseconds_from_datetime(timestamp), + ), + ], + ) + ) + batcher.append( + RowMutationEntry( + "phone#5c10102#20190501", + [ + SetCell( + "stats_summary", + "connected_cell", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "connected_wifi", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "os_build", + "PQ2A.190401.002", + _microseconds_from_datetime(timestamp), + ), + SetCell( + "cell_plan", + "data_plan_10gb", + "true", + _microseconds_from_datetime(timestamp), + ), + ], + ) + ) + batcher.append( + RowMutationEntry( + "phone#5c10102#20190502", + [ + SetCell( + "stats_summary", + "connected_cell", + 1, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "connected_wifi", + 0, + _microseconds_from_datetime(timestamp), + ), + SetCell( + "stats_summary", + "os_build", + "PQ2A.190406.000", + _microseconds_from_datetime(timestamp), + ), + SetCell( + "cell_plan", + "data_plan_10gb", + "true", + _microseconds_from_datetime(timestamp), + ), + ], + ) + ) + + +def test_filter_limit_row_sample(capsys, table_id): + filter_snippets.filter_limit_row_sample(PROJECT, BIGTABLE_INSTANCE, table_id) + + out, _ = capsys.readouterr() + assert "Reading data for" in out + + +def test_filter_limit_row_regex(capsys, table_id): + filter_snippets.filter_limit_row_regex(PROJECT, BIGTABLE_INSTANCE, table_id) + + out, _ = capsys.readouterr() + expected = snapshots[inspect.currentframe().f_code.co_name] + assert out == expected + + +def test_filter_limit_cells_per_col(capsys, table_id): + filter_snippets.filter_limit_cells_per_col(PROJECT, BIGTABLE_INSTANCE, table_id) + + out, _ = capsys.readouterr() + expected = snapshots[inspect.currentframe().f_code.co_name] + assert out == expected + + +def test_filter_limit_cells_per_row(capsys, table_id): + filter_snippets.filter_limit_cells_per_row(PROJECT, BIGTABLE_INSTANCE, table_id) + + out, _ = capsys.readouterr() + expected = snapshots[inspect.currentframe().f_code.co_name] + assert out == expected + + +def test_filter_limit_cells_per_row_offset(capsys, table_id): + filter_snippets.filter_limit_cells_per_row_offset( + PROJECT, BIGTABLE_INSTANCE, table_id + ) + + out, _ = capsys.readouterr() + expected = snapshots[inspect.currentframe().f_code.co_name] + assert out == expected + + +def test_filter_limit_col_family_regex(capsys, table_id): + filter_snippets.filter_limit_col_family_regex(PROJECT, BIGTABLE_INSTANCE, table_id) + + out, _ = capsys.readouterr() + expected = snapshots[inspect.currentframe().f_code.co_name] + assert out == expected + + +def test_filter_limit_col_qualifier_regex(capsys, table_id): + filter_snippets.filter_limit_col_qualifier_regex( + PROJECT, BIGTABLE_INSTANCE, table_id + ) + + out, _ = capsys.readouterr() + expected = snapshots[inspect.currentframe().f_code.co_name] + assert out == expected + + +def test_filter_limit_col_range(capsys, table_id): + filter_snippets.filter_limit_col_range(PROJECT, BIGTABLE_INSTANCE, table_id) + + out, _ = capsys.readouterr() + expected = snapshots[inspect.currentframe().f_code.co_name] + assert out == expected + + +def test_filter_limit_value_range(capsys, table_id): + filter_snippets.filter_limit_value_range(PROJECT, BIGTABLE_INSTANCE, table_id) + + out, _ = capsys.readouterr() + expected = snapshots[inspect.currentframe().f_code.co_name] + assert out == expected + + +def test_filter_limit_value_regex(capsys, table_id): + filter_snippets.filter_limit_value_regex(PROJECT, BIGTABLE_INSTANCE, table_id) + + out, _ = capsys.readouterr() + expected = snapshots[inspect.currentframe().f_code.co_name] + assert out == expected + + +def test_filter_limit_timestamp_range(capsys, table_id): + filter_snippets.filter_limit_timestamp_range(PROJECT, BIGTABLE_INSTANCE, table_id) + + out, _ = capsys.readouterr() + expected = snapshots[inspect.currentframe().f_code.co_name] + assert out == expected + + +def test_filter_limit_block_all(capsys, table_id): + filter_snippets.filter_limit_block_all(PROJECT, BIGTABLE_INSTANCE, table_id) + + out, _ = capsys.readouterr() + expected = snapshots[inspect.currentframe().f_code.co_name] + assert out == expected + + +def test_filter_limit_pass_all(capsys, table_id): + filter_snippets.filter_limit_pass_all(PROJECT, BIGTABLE_INSTANCE, table_id) + + out, _ = capsys.readouterr() + expected = snapshots[inspect.currentframe().f_code.co_name] + assert out == expected + + +def test_filter_modify_strip_value(capsys, table_id): + filter_snippets.filter_modify_strip_value(PROJECT, BIGTABLE_INSTANCE, table_id) + + out, _ = capsys.readouterr() + expected = snapshots[inspect.currentframe().f_code.co_name] + assert out == expected + + +def test_filter_modify_apply_label(capsys, table_id): + filter_snippets.filter_modify_apply_label(PROJECT, BIGTABLE_INSTANCE, table_id) + + out, _ = capsys.readouterr() + expected = snapshots[inspect.currentframe().f_code.co_name] + assert out == expected + + +def test_filter_composing_chain(capsys, table_id): + filter_snippets.filter_composing_chain(PROJECT, BIGTABLE_INSTANCE, table_id) + + out, _ = capsys.readouterr() + expected = snapshots[inspect.currentframe().f_code.co_name] + assert out == expected + + +def test_filter_composing_interleave(capsys, table_id): + filter_snippets.filter_composing_interleave(PROJECT, BIGTABLE_INSTANCE, table_id) + + out, _ = capsys.readouterr() + expected = snapshots[inspect.currentframe().f_code.co_name] + assert out == expected + + +def test_filter_composing_condition(capsys, table_id): + filter_snippets.filter_composing_condition(PROJECT, BIGTABLE_INSTANCE, table_id) + + out, _ = capsys.readouterr() + expected = snapshots[inspect.currentframe().f_code.co_name] + assert out == expected diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/noxfile.py b/packages/google-cloud-bigtable/samples/data_client/snippets/noxfile.py new file mode 100644 index 000000000000..c0e60097b353 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/noxfile.py @@ -0,0 +1,292 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import glob +import os +import sys +from pathlib import Path +from typing import Callable, Dict, Optional + +import nox + +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING +# DO NOT EDIT THIS FILE EVER! +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING + +BLACK_VERSION = "black==22.3.0" +ISORT_VERSION = "isort==5.10.1" + +# Copy `noxfile_config.py` to your directory and modify it instead. + +# `TEST_CONFIG` dict is a configuration hook that allows users to +# modify the test configurations. The values here should be in sync +# with `noxfile_config.py`. Users will copy `noxfile_config.py` into +# their directory and modify it. + +TEST_CONFIG = { + # You can opt out from the test for specific Python versions. + "ignored_versions": [], + # Old samples are opted out of enforcing Python type hints + # All new samples should feature them + "enforce_type_hints": False, + # An envvar key for determining the project id to use. Change it + # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a + # build specific Cloud project. You can also use your own string + # to use your own Cloud project. + "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", + # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', + # If you need to use a specific version of pip, + # change pip_version_override to the string representation + # of the version number, for example, "20.2.4" + "pip_version_override": None, + # A dictionary you want to inject into your test. Don't put any + # secrets here. These values will override predefined values. + "envs": {}, +} + + +try: + # Ensure we can import noxfile_config in the project's directory. + sys.path.append(".") + from noxfile_config import TEST_CONFIG_OVERRIDE +except ImportError as e: + print("No user noxfile_config found: detail: {}".format(e)) + TEST_CONFIG_OVERRIDE = {} + +# Update the TEST_CONFIG with the user supplied values. +TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) + + +def get_pytest_env_vars() -> Dict[str, str]: + """Returns a dict for pytest invocation.""" + ret = {} + + # Override the GCLOUD_PROJECT and the alias. + env_key = TEST_CONFIG["gcloud_project_env"] + # This should error out if not set. + ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] + + # Apply user supplied envs. + ret.update(TEST_CONFIG["envs"]) + return ret + + +# DO NOT EDIT - automatically generated. +# All versions used to test samples. +ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] + +# Any default versions that should be ignored. +IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] + +TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) + +INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( + "True", + "true", +) + +# Error if a python version is missing +nox.options.error_on_missing_interpreters = True + +# +# Style Checks +# + + +# Linting with flake8. +# +# We ignore the following rules: +# E203: whitespace before ‘:’ +# E266: too many leading ‘#’ for block comment +# E501: line too long +# I202: Additional newline in a section of imports +# +# We also need to specify the rules which are ignored by default: +# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] +FLAKE8_COMMON_ARGS = [ + "--show-source", + "--builtin=gettext", + "--max-complexity=20", + "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", + "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", + "--max-line-length=88", +] + + +@nox.session +def lint(session: nox.sessions.Session) -> None: + if not TEST_CONFIG["enforce_type_hints"]: + session.install("flake8") + else: + session.install("flake8", "flake8-annotations") + + args = FLAKE8_COMMON_ARGS + [ + ".", + ] + session.run("flake8", *args) + + +# +# Black +# + + +@nox.session +def blacken(session: nox.sessions.Session) -> None: + """Run black. Format code to uniform standard.""" + session.install(BLACK_VERSION) + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + session.run("black", *python_files) + + +# +# format = isort + black +# + + +@nox.session +def format(session: nox.sessions.Session) -> None: + """ + Run isort to sort imports. Then run black + to format code to uniform standard. + """ + session.install(BLACK_VERSION, ISORT_VERSION) + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + # Use the --fss option to sort imports using strict alphabetical order. + # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections + session.run("isort", "--fss", *python_files) + session.run("black", *python_files) + + +# +# Sample Tests +# + + +PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] + + +def _session_tests( + session: nox.sessions.Session, post_install: Callable = None +) -> None: + # check for presence of tests + test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( + "**/test_*.py", recursive=True + ) + test_list.extend(glob.glob("**/tests", recursive=True)) + + if len(test_list) == 0: + print("No tests found, skipping directory.") + return + + if TEST_CONFIG["pip_version_override"]: + pip_version = TEST_CONFIG["pip_version_override"] + session.install(f"pip=={pip_version}") + """Runs py.test for a particular project.""" + concurrent_args = [] + if os.path.exists("requirements.txt"): + if os.path.exists("constraints.txt"): + session.install("-r", "requirements.txt", "-c", "constraints.txt") + else: + session.install("-r", "requirements.txt") + with open("requirements.txt") as rfile: + packages = rfile.read() + + if os.path.exists("requirements-test.txt"): + if os.path.exists("constraints-test.txt"): + session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") + else: + session.install("-r", "requirements-test.txt") + with open("requirements-test.txt") as rtfile: + packages += rtfile.read() + + if INSTALL_LIBRARY_FROM_SOURCE: + session.install("-e", _get_repo_root()) + + if post_install: + post_install(session) + + if "pytest-parallel" in packages: + concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) + elif "pytest-xdist" in packages: + concurrent_args.extend(["-n", "auto"]) + + session.run( + "pytest", + *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), + # Pytest will return 5 when no tests are collected. This can happen + # on travis where slow and flaky tests are excluded. + # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html + success_codes=[0, 5], + env=get_pytest_env_vars(), + ) + + +@nox.session(python=ALL_VERSIONS) +def py(session: nox.sessions.Session) -> None: + """Runs py.test for a sample using the specified version of Python.""" + if session.python in TESTED_VERSIONS: + _session_tests(session) + else: + session.skip( + "SKIPPED: {} tests are disabled for this sample.".format(session.python) + ) + + +# +# Readmegen +# + + +def _get_repo_root() -> Optional[str]: + """Returns the root folder of the project.""" + # Get root of this repository. Assume we don't have directories nested deeper than 10 items. + p = Path(os.getcwd()) + for i in range(10): + if p is None: + break + if Path(p / ".git").exists(): + return str(p) + # .git is not available in repos cloned via Cloud Build + # setup.py is always in the library's root, so use that instead + # https://github.com/googleapis/synthtool/issues/792 + if Path(p / "setup.py").exists(): + return str(p) + p = p.parent + raise Exception("Unable to detect repository root.") + + +GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) + + +@nox.session +@nox.parametrize("path", GENERATED_READMES) +def readmegen(session: nox.sessions.Session, path: str) -> None: + """(Re-)generates the readme for a sample.""" + session.install("jinja2", "pyyaml") + dir_ = os.path.dirname(path) + + if os.path.exists(os.path.join(dir_, "requirements.txt")): + session.install("-r", os.path.join(dir_, "requirements.txt")) + + in_file = os.path.join(dir_, "README.rst.in") + session.run( + "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file + ) diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/requirements-test.txt b/packages/google-cloud-bigtable/samples/data_client/snippets/requirements-test.txt new file mode 100644 index 000000000000..ee4ba018603b --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/requirements-test.txt @@ -0,0 +1,2 @@ +pytest +pytest-asyncio diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/requirements.txt b/packages/google-cloud-bigtable/samples/data_client/snippets/requirements.txt new file mode 100644 index 000000000000..730d25dec63f --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/requirements.txt @@ -0,0 +1 @@ +google-cloud-bigtable==2.35.0 diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/snapshots/__init__.py b/packages/google-cloud-bigtable/samples/data_client/snippets/snapshots/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/snapshots/snap_filters_test.py b/packages/google-cloud-bigtable/samples/data_client/snippets/snapshots/snap_filters_test.py new file mode 100644 index 000000000000..0547ddddd858 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/snapshots/snap_filters_test.py @@ -0,0 +1,503 @@ +# -*- coding: utf-8 -*- +# this was previously implemented using the `snapshottest` package (https://goo.gl/zC4yUc), +# which is not compatible with Python 3.12. So we moved to a standard dictionary storing +# expected outputs for each test +from __future__ import unicode_literals + +snapshots = {} + +snapshots["test_filter_limit_row_regex"] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: false @2019-05-01 00:00:00+00:00 +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_limit_cells_per_col" +] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: false @2019-05-01 00:00:00+00:00 +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_limit_cells_per_row" +] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: false @2019-05-01 00:00:00+00:00 +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_limit_cells_per_row_offset" +] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family stats_summary +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family stats_summary +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family stats_summary +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family stats_summary +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_limit_col_family_regex" +] = """Reading data for phone#4c410523#20190501: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_limit_col_qualifier_regex" +] = """Reading data for phone#4c410523#20190501: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 + +""" + +snapshots["test_filter_limit_col_range"] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: false @2019-05-01 00:00:00+00:00 +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_limit_value_range" +] = """Reading data for phone#4c410523#20190501: +Column Family stats_summary +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family stats_summary +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_limit_value_regex" +] = """Reading data for phone#4c410523#20190501: +Column Family stats_summary +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family stats_summary +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family stats_summary +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family stats_summary +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family stats_summary +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_limit_timestamp_range" +] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 + +""" + +snapshots["test_filter_limit_block_all"] = "" + +snapshots["test_filter_limit_pass_all"] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: false @2019-05-01 00:00:00+00:00 +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_modify_strip_value" +] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: @2019-05-01 00:00:00+00:00 +\tdata_plan_01gb: @2019-04-30 23:00:00+00:00 +\tdata_plan_05gb: @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: @2019-05-01 00:00:00+00:00 +\tconnected_wifi: @2019-05-01 00:00:00+00:00 +\tos_build: @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: @2019-05-01 00:00:00+00:00 +\tconnected_wifi: @2019-05-01 00:00:00+00:00 +\tos_build: @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: @2019-05-01 00:00:00+00:00 +\tconnected_wifi: @2019-05-01 00:00:00+00:00 +\tos_build: @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: @2019-05-01 00:00:00+00:00 +\tconnected_wifi: @2019-05-01 00:00:00+00:00 +\tos_build: @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family cell_plan +\tdata_plan_10gb: @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: @2019-05-01 00:00:00+00:00 +\tconnected_wifi: @2019-05-01 00:00:00+00:00 +\tos_build: @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_modify_apply_label" +] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: false @2019-05-01 00:00:00+00:00 [labelled] +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 [labelled] +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 [labelled] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [labelled] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [labelled] +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 [labelled] + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 [labelled] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [labelled] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [labelled] +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 [labelled] + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 [labelled] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 [labelled] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [labelled] +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 [labelled] + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 [labelled] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [labelled] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [labelled] +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 [labelled] + +Reading data for phone#5c10102#20190502: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 [labelled] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [labelled] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 [labelled] +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 [labelled] + +""" + +snapshots["test_filter_composing_chain"] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: false @2019-05-01 00:00:00+00:00 +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_composing_interleave" +] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_composing_condition" +] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: false @2019-05-01 00:00:00+00:00 [filtered-out] +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 [filtered-out] +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 [filtered-out] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [filtered-out] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [filtered-out] +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 [filtered-out] + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 [filtered-out] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [filtered-out] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [filtered-out] +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 [filtered-out] + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 [filtered-out] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 [filtered-out] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [filtered-out] +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 [filtered-out] + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 [passed-filter] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [passed-filter] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [passed-filter] +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 [passed-filter] + +Reading data for phone#5c10102#20190502: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 [passed-filter] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [passed-filter] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 [passed-filter] +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 [passed-filter] + +""" From 2f816f1b61bfe633c392d06b491c5b604ae46d7c Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Tue, 21 Jul 2026 16:34:03 -0700 Subject: [PATCH 06/23] updated CONTRIBUTING --- packages/google-cloud-bigtable/CONTRIBUTING.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/google-cloud-bigtable/CONTRIBUTING.rst b/packages/google-cloud-bigtable/CONTRIBUTING.rst index 73e933e3865d..7797cec7dd5d 100644 --- a/packages/google-cloud-bigtable/CONTRIBUTING.rst +++ b/packages/google-cloud-bigtable/CONTRIBUTING.rst @@ -185,7 +185,7 @@ Code samples and snippets live in the `samples/` catalogue. Feel free to provide more examples, but make sure to write tests for those examples. Each folder containing example code requires its own `noxfile.py` script which automates testing. If you decide to create a new folder, you can -base it on the `samples/data_client_async/snippets` folder (providing `noxfile.py` and +base it on the `samples/data_client/snippets` folder (providing `noxfile.py` and the requirements files). The tests will run against a real Google Cloud Project, so you should @@ -194,11 +194,11 @@ configure them just like the System Tests. - To run sample tests, you can execute:: # Run all tests in a folder - $ cd samples/data_client_async/snippets + $ cd samples/data_client/snippets $ nox -s py-3.14 # Run a single sample test - $ cd samples/data_client_async/snippets + $ cd samples/data_client/snippets $ nox -s py-3.14 -- -k ******************************************** From f07c66b9925c598b06a5c804f61771c289b0f91b Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Tue, 21 Jul 2026 16:37:32 -0700 Subject: [PATCH 07/23] added samples targeting generated admin client --- .../admin_client/instanceadmin/README.md | 52 ++++ .../instanceadmin/instanceadmin.py | 166 ++++++++++ .../admin_client/instanceadmin/noxfile.py | 292 ++++++++++++++++++ .../instanceadmin/requirements-test.txt | 1 + .../instanceadmin/requirements.txt | 2 + .../instanceadmin/test_instanceadmin.py | 47 +++ .../samples/admin_client/tableadmin/README.md | 52 ++++ .../admin_client/tableadmin/noxfile.py | 292 ++++++++++++++++++ .../tableadmin/requirements-test.txt | 2 + .../admin_client/tableadmin/requirements.txt | 1 + .../admin_client/tableadmin/tableadmin.py | 196 ++++++++++++ .../tableadmin/tableadmin_test.py | 41 +++ 12 files changed, 1144 insertions(+) create mode 100644 packages/google-cloud-bigtable/samples/admin_client/instanceadmin/README.md create mode 100644 packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py create mode 100644 packages/google-cloud-bigtable/samples/admin_client/instanceadmin/noxfile.py create mode 100644 packages/google-cloud-bigtable/samples/admin_client/instanceadmin/requirements-test.txt create mode 100644 packages/google-cloud-bigtable/samples/admin_client/instanceadmin/requirements.txt create mode 100644 packages/google-cloud-bigtable/samples/admin_client/instanceadmin/test_instanceadmin.py create mode 100644 packages/google-cloud-bigtable/samples/admin_client/tableadmin/README.md create mode 100644 packages/google-cloud-bigtable/samples/admin_client/tableadmin/noxfile.py create mode 100644 packages/google-cloud-bigtable/samples/admin_client/tableadmin/requirements-test.txt create mode 100644 packages/google-cloud-bigtable/samples/admin_client/tableadmin/requirements.txt create mode 100644 packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py create mode 100644 packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin_test.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/README.md b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/README.md new file mode 100644 index 000000000000..675add700e93 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/README.md @@ -0,0 +1,52 @@ +[//]: # "This README.md file is auto-generated, all changes to this file will be lost." +[//]: # "To regenerate it, use `python -m synthtool`." + +## Python Samples for Cloud Bigtable + +This directory contains samples for Cloud Bigtable, which may be used as a refererence for how to use this product. +Samples, quickstarts, and other documentation are available at cloud.google.com. + + +### cbt Command Demonstration + +This page explains how to use the cbt command to connect to a Cloud Bigtable instance, perform basic administrative tasks, and read and write data in a table. More information about this quickstart is available at https://cloud.google.com/bigtable/docs/quickstart-cbt + + +Open in Cloud Shell + + +To run this sample: + +1. If this is your first time working with GCP products, you will need to set up [the Cloud SDK][cloud_sdk] or utilize [Google Cloud Shell][gcloud_shell]. This sample may [require authetication][authentication] and you will need to [enable billing][enable_billing]. + +1. Make a fork of this repo and clone the branch locally, then navigate to the sample directory you want to use. + +1. Install the dependencies needed to run the samples. + + pip install -r requirements.txt + +1. Run the sample using + + python instanceadmin.py + + + +
usage: instanceadmin.py [-h] [run] [dev-instance] [del-instance] [add-cluster] [del-cluster] project_id instance_id cluster_id
Demonstrates how to connect to Cloud Bigtable and run some basic operations.
Prerequisites: - Create a Cloud Bigtable cluster.
https://cloud.google.com/bigtable/docs/creating-cluster - Set your Google
Application Default Credentials.
https://developers.google.com/identity/protocols/application-default-
credentials


positional arguments:
  project_id     Your Cloud Platform project ID.
  instance_id    ID of the Cloud Bigtable instance to connect to.


optional arguments:
  -h, --help     show this help message and exit
  --table TABLE  Table to create and destroy. (default: Hello-Bigtable)
+ +## Additional Information + +You can read the documentation for more details on API usage and use GitHub +to browse the source and [report issues][issues]. + +### Contributing +View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. + +[authentication]: https://cloud.google.com/docs/authentication/getting-started +[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing +[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ +[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues +[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst +[py_style]: http://google.github.io/styleguide/pyguide.html +[cloud_sdk]: https://cloud.google.com/sdk/docs +[gcloud_shell]: https://cloud.google.com/shell/docs +[gcloud_shell]: https://cloud.google.com/shell/docs diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py new file mode 100644 index 000000000000..f25b3c69d2c2 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py @@ -0,0 +1,166 @@ +#!/usr/bin/env python + +# Copyright 2024, 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. + +"""Demonstrates how to run instance admin operations using BigtableInstanceAdminClient. + +Prerequisites: +- Create a Cloud Bigtable project. +- Set your Google Application Default Credentials. +""" + +import argparse + +from google.api_core.exceptions import NotFound +from google.cloud import bigtable_admin_v2 + + +def run_instance_operations(project_id, instance_id, cluster_id): + client = bigtable_admin_v2.BigtableInstanceAdminClient() + project_path = client.common_project_path(project_id) + instance_path = client.instance_path(project_id, instance_id) + + # [START bigtable_check_instance_exists] + try: + instance = client.get_instance(name=instance_path) + print(f"Instance {instance_id} already exists.") + except NotFound: + print(f"Instance {instance_id} does not exist.") + # [END bigtable_check_instance_exists] + + # [START bigtable_create_prod_instance] + cluster_path = client.cluster_path(project_id, instance_id, cluster_id) + cluster = bigtable_admin_v2.Cluster( + location=client.common_location_path(project_id, "us-central1-f"), + serve_nodes=1, + default_storage_type=bigtable_admin_v2.StorageType.SSD, + ) + instance_obj = bigtable_admin_v2.Instance( + display_name=instance_id, + labels={"prod-label": "prod-label"}, + type_=bigtable_admin_v2.Instance.Type.PRODUCTION, + ) + + try: + client.get_instance(name=instance_path) + except NotFound: + print("\nCreating an instance") + operation = client.create_instance( + parent=project_path, + instance_id=instance_id, + instance=instance_obj, + clusters={cluster_id: cluster}, + ) + operation.result(timeout=480) + print(f"\nCreated instance: {instance_id}") + # [END bigtable_create_prod_instance] + + # [START bigtable_list_instances] + print("\nListing instances:") + instances_response = client.list_instances(parent=project_path) + for instance in instances_response.instances: + print(instance.name.split("/")[-1]) + # [END bigtable_list_instances] + + # [START bigtable_get_instance] + inst = client.get_instance(name=instance_path) + print(f"\nName of instance: {inst.display_name}\nLabels: {dict(inst.labels)}") + # [END bigtable_get_instance] + + # [START bigtable_get_clusters] + print("\nListing clusters...") + clusters_response = client.list_clusters(parent=instance_path) + for cluster in clusters_response.clusters: + print(cluster.name.split("/")[-1]) + # [END bigtable_get_clusters] + + +def delete_instance(project_id, instance_id): + client = bigtable_admin_v2.BigtableInstanceAdminClient() + instance_path = client.instance_path(project_id, instance_id) + + # [START bigtable_delete_instance] + print("\nDeleting instance") + try: + client.delete_instance(name=instance_path) + print(f"Deleted instance: {instance_id}") + except NotFound: + print(f"Instance {instance_id} does not exist.") + # [END bigtable_delete_instance] + + +def add_cluster(project_id, instance_id, cluster_id): + client = bigtable_admin_v2.BigtableInstanceAdminClient() + instance_path = client.instance_path(project_id, instance_id) + cluster_path = client.cluster_path(project_id, instance_id, cluster_id) + + # [START bigtable_create_cluster] + print("\nListing clusters...") + clusters_response = client.list_clusters(parent=instance_path) + for cluster in clusters_response.clusters: + print(cluster.name.split("/")[-1]) + + new_cluster = bigtable_admin_v2.Cluster( + location=client.common_location_path(project_id, "us-central1-a"), + serve_nodes=1, + default_storage_type=bigtable_admin_v2.StorageType.SSD, + ) + try: + client.get_cluster(name=cluster_path) + print(f"\nCluster not created, as {cluster_id} already exists.") + except NotFound: + operation = client.create_cluster( + parent=instance_path, cluster_id=cluster_id, cluster=new_cluster + ) + operation.result(timeout=480) + print(f"\nCluster created: {cluster_id}") + # [END bigtable_create_cluster] + + +def delete_cluster(project_id, instance_id, cluster_id): + client = bigtable_admin_v2.BigtableInstanceAdminClient() + cluster_path = client.cluster_path(project_id, instance_id, cluster_id) + + # [START bigtable_delete_cluster] + print("\nDeleting cluster") + try: + client.delete_cluster(name=cluster_path) + print(f"Cluster deleted: {cluster_id}") + except NotFound: + print(f"\nCluster {cluster_id} does not exist.") + # [END bigtable_delete_cluster] + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description=__doc__, formatter_class=argparse.ArgumentDefaultsHelpFormatter + ) + parser.add_argument( + "command", + help="run, del-instance, add-cluster or del-cluster.", + ) + parser.add_argument("project_id", help="Your Cloud Platform project ID.") + parser.add_argument("instance_id", help="ID of the Cloud Bigtable instance.") + parser.add_argument("cluster_id", help="ID of the Cloud Bigtable cluster.") + + args = parser.parse_args() + + if args.command.lower() == "run": + run_instance_operations(args.project_id, args.instance_id, args.cluster_id) + elif args.command.lower() == "del-instance": + delete_instance(args.project_id, args.instance_id) + elif args.command.lower() == "add-cluster": + add_cluster(args.project_id, args.instance_id, args.cluster_id) + elif args.command.lower() == "del-cluster": + delete_cluster(args.project_id, args.instance_id, args.cluster_id) diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/noxfile.py b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/noxfile.py new file mode 100644 index 000000000000..c0e60097b353 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/noxfile.py @@ -0,0 +1,292 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import glob +import os +import sys +from pathlib import Path +from typing import Callable, Dict, Optional + +import nox + +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING +# DO NOT EDIT THIS FILE EVER! +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING + +BLACK_VERSION = "black==22.3.0" +ISORT_VERSION = "isort==5.10.1" + +# Copy `noxfile_config.py` to your directory and modify it instead. + +# `TEST_CONFIG` dict is a configuration hook that allows users to +# modify the test configurations. The values here should be in sync +# with `noxfile_config.py`. Users will copy `noxfile_config.py` into +# their directory and modify it. + +TEST_CONFIG = { + # You can opt out from the test for specific Python versions. + "ignored_versions": [], + # Old samples are opted out of enforcing Python type hints + # All new samples should feature them + "enforce_type_hints": False, + # An envvar key for determining the project id to use. Change it + # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a + # build specific Cloud project. You can also use your own string + # to use your own Cloud project. + "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", + # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', + # If you need to use a specific version of pip, + # change pip_version_override to the string representation + # of the version number, for example, "20.2.4" + "pip_version_override": None, + # A dictionary you want to inject into your test. Don't put any + # secrets here. These values will override predefined values. + "envs": {}, +} + + +try: + # Ensure we can import noxfile_config in the project's directory. + sys.path.append(".") + from noxfile_config import TEST_CONFIG_OVERRIDE +except ImportError as e: + print("No user noxfile_config found: detail: {}".format(e)) + TEST_CONFIG_OVERRIDE = {} + +# Update the TEST_CONFIG with the user supplied values. +TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) + + +def get_pytest_env_vars() -> Dict[str, str]: + """Returns a dict for pytest invocation.""" + ret = {} + + # Override the GCLOUD_PROJECT and the alias. + env_key = TEST_CONFIG["gcloud_project_env"] + # This should error out if not set. + ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] + + # Apply user supplied envs. + ret.update(TEST_CONFIG["envs"]) + return ret + + +# DO NOT EDIT - automatically generated. +# All versions used to test samples. +ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] + +# Any default versions that should be ignored. +IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] + +TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) + +INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( + "True", + "true", +) + +# Error if a python version is missing +nox.options.error_on_missing_interpreters = True + +# +# Style Checks +# + + +# Linting with flake8. +# +# We ignore the following rules: +# E203: whitespace before ‘:’ +# E266: too many leading ‘#’ for block comment +# E501: line too long +# I202: Additional newline in a section of imports +# +# We also need to specify the rules which are ignored by default: +# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] +FLAKE8_COMMON_ARGS = [ + "--show-source", + "--builtin=gettext", + "--max-complexity=20", + "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", + "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", + "--max-line-length=88", +] + + +@nox.session +def lint(session: nox.sessions.Session) -> None: + if not TEST_CONFIG["enforce_type_hints"]: + session.install("flake8") + else: + session.install("flake8", "flake8-annotations") + + args = FLAKE8_COMMON_ARGS + [ + ".", + ] + session.run("flake8", *args) + + +# +# Black +# + + +@nox.session +def blacken(session: nox.sessions.Session) -> None: + """Run black. Format code to uniform standard.""" + session.install(BLACK_VERSION) + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + session.run("black", *python_files) + + +# +# format = isort + black +# + + +@nox.session +def format(session: nox.sessions.Session) -> None: + """ + Run isort to sort imports. Then run black + to format code to uniform standard. + """ + session.install(BLACK_VERSION, ISORT_VERSION) + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + # Use the --fss option to sort imports using strict alphabetical order. + # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections + session.run("isort", "--fss", *python_files) + session.run("black", *python_files) + + +# +# Sample Tests +# + + +PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] + + +def _session_tests( + session: nox.sessions.Session, post_install: Callable = None +) -> None: + # check for presence of tests + test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( + "**/test_*.py", recursive=True + ) + test_list.extend(glob.glob("**/tests", recursive=True)) + + if len(test_list) == 0: + print("No tests found, skipping directory.") + return + + if TEST_CONFIG["pip_version_override"]: + pip_version = TEST_CONFIG["pip_version_override"] + session.install(f"pip=={pip_version}") + """Runs py.test for a particular project.""" + concurrent_args = [] + if os.path.exists("requirements.txt"): + if os.path.exists("constraints.txt"): + session.install("-r", "requirements.txt", "-c", "constraints.txt") + else: + session.install("-r", "requirements.txt") + with open("requirements.txt") as rfile: + packages = rfile.read() + + if os.path.exists("requirements-test.txt"): + if os.path.exists("constraints-test.txt"): + session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") + else: + session.install("-r", "requirements-test.txt") + with open("requirements-test.txt") as rtfile: + packages += rtfile.read() + + if INSTALL_LIBRARY_FROM_SOURCE: + session.install("-e", _get_repo_root()) + + if post_install: + post_install(session) + + if "pytest-parallel" in packages: + concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) + elif "pytest-xdist" in packages: + concurrent_args.extend(["-n", "auto"]) + + session.run( + "pytest", + *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), + # Pytest will return 5 when no tests are collected. This can happen + # on travis where slow and flaky tests are excluded. + # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html + success_codes=[0, 5], + env=get_pytest_env_vars(), + ) + + +@nox.session(python=ALL_VERSIONS) +def py(session: nox.sessions.Session) -> None: + """Runs py.test for a sample using the specified version of Python.""" + if session.python in TESTED_VERSIONS: + _session_tests(session) + else: + session.skip( + "SKIPPED: {} tests are disabled for this sample.".format(session.python) + ) + + +# +# Readmegen +# + + +def _get_repo_root() -> Optional[str]: + """Returns the root folder of the project.""" + # Get root of this repository. Assume we don't have directories nested deeper than 10 items. + p = Path(os.getcwd()) + for i in range(10): + if p is None: + break + if Path(p / ".git").exists(): + return str(p) + # .git is not available in repos cloned via Cloud Build + # setup.py is always in the library's root, so use that instead + # https://github.com/googleapis/synthtool/issues/792 + if Path(p / "setup.py").exists(): + return str(p) + p = p.parent + raise Exception("Unable to detect repository root.") + + +GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) + + +@nox.session +@nox.parametrize("path", GENERATED_READMES) +def readmegen(session: nox.sessions.Session, path: str) -> None: + """(Re-)generates the readme for a sample.""" + session.install("jinja2", "pyyaml") + dir_ = os.path.dirname(path) + + if os.path.exists(os.path.join(dir_, "requirements.txt")): + session.install("-r", os.path.join(dir_, "requirements.txt")) + + in_file = os.path.join(dir_, "README.rst.in") + session.run( + "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file + ) diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/requirements-test.txt b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/requirements-test.txt new file mode 100644 index 000000000000..e079f8a6038d --- /dev/null +++ b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/requirements-test.txt @@ -0,0 +1 @@ +pytest diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/requirements.txt b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/requirements.txt new file mode 100644 index 000000000000..67a1ea5b8d23 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/requirements.txt @@ -0,0 +1,2 @@ +google-cloud-bigtable==2.35.0 +backoff==2.2.1 diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/test_instanceadmin.py b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/test_instanceadmin.py new file mode 100644 index 000000000000..0908b6a8c8b3 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/test_instanceadmin.py @@ -0,0 +1,47 @@ +# Copyright 2024, Google LLC +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import uuid + +from .instanceadmin import ( + add_cluster, + delete_cluster, + delete_instance, + run_instance_operations, +) + +PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] +INSTANCE_ID = f"instance-admin-{str(uuid.uuid4())[:16]}" +CLUSTER_ID = f"cluster-admin-{str(uuid.uuid4())[:16]}" +NEW_CLUSTER_ID = f"cluster-add-{str(uuid.uuid4())[:16]}" + + +def test_instance_operations(capsys): + run_instance_operations(PROJECT, INSTANCE_ID, CLUSTER_ID) + out, _ = capsys.readouterr() + assert f"Created instance: {INSTANCE_ID}" in out + assert "Listing instances:" in out + assert "Listing clusters..." in out + + add_cluster(PROJECT, INSTANCE_ID, NEW_CLUSTER_ID) + out, _ = capsys.readouterr() + assert f"Cluster created: {NEW_CLUSTER_ID}" in out + + delete_cluster(PROJECT, INSTANCE_ID, NEW_CLUSTER_ID) + out, _ = capsys.readouterr() + assert f"Cluster deleted: {NEW_CLUSTER_ID}" in out + + delete_instance(PROJECT, INSTANCE_ID) + out, _ = capsys.readouterr() + assert f"Deleted instance: {INSTANCE_ID}" in out diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/README.md b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/README.md new file mode 100644 index 000000000000..b2f6a13af55a --- /dev/null +++ b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/README.md @@ -0,0 +1,52 @@ +[//]: # "This README.md file is auto-generated, all changes to this file will be lost." +[//]: # "To regenerate it, use `python -m synthtool`." + +## Python Samples for Cloud Bigtable + +This directory contains samples for Cloud Bigtable, which may be used as a refererence for how to use this product. +Samples, quickstarts, and other documentation are available at cloud.google.com. + + +### Table Admin + +Demonstrates how to connect to Cloud Bigtable and run some basic operations. + + +Open in Cloud Shell + + +To run this sample: + +1. If this is your first time working with GCP products, you will need to set up [the Cloud SDK][cloud_sdk] or utilize [Google Cloud Shell][gcloud_shell]. This sample may [require authetication][authentication] and you will need to [enable billing][enable_billing]. + +1. Make a fork of this repo and clone the branch locally, then navigate to the sample directory you want to use. + +1. Install the dependencies needed to run the samples. + + pip install -r requirements.txt + +1. Run the sample using + + python tableadmin.py + + + +
usage: tableadmin.py [-h] [run] [delete] [--table TABLE] project_id instance_id 


Demonstrates how to connect to Cloud Bigtable and run some basic operations.
Prerequisites: - Create a Cloud Bigtable cluster.
https://cloud.google.com/bigtable/docs/creating-cluster - Set your Google
Application Default Credentials.
https://developers.google.com/identity/protocols/application-default-
credentials


positional arguments:
  project_id     Your Cloud Platform project ID.
  instance_id    ID of the Cloud Bigtable instance to connect to.


optional arguments:
  -h, --help     show this help message and exit
  --table TABLE  Table to create and destroy. (default: Hello-Bigtable)
+ +## Additional Information + +You can read the documentation for more details on API usage and use GitHub +to browse the source and [report issues][issues]. + +### Contributing +View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. + +[authentication]: https://cloud.google.com/docs/authentication/getting-started +[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing +[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ +[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues +[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst +[py_style]: http://google.github.io/styleguide/pyguide.html +[cloud_sdk]: https://cloud.google.com/sdk/docs +[gcloud_shell]: https://cloud.google.com/shell/docs +[gcloud_shell]: https://cloud.google.com/shell/docs diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/noxfile.py b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/noxfile.py new file mode 100644 index 000000000000..c0e60097b353 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/noxfile.py @@ -0,0 +1,292 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import glob +import os +import sys +from pathlib import Path +from typing import Callable, Dict, Optional + +import nox + +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING +# DO NOT EDIT THIS FILE EVER! +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING + +BLACK_VERSION = "black==22.3.0" +ISORT_VERSION = "isort==5.10.1" + +# Copy `noxfile_config.py` to your directory and modify it instead. + +# `TEST_CONFIG` dict is a configuration hook that allows users to +# modify the test configurations. The values here should be in sync +# with `noxfile_config.py`. Users will copy `noxfile_config.py` into +# their directory and modify it. + +TEST_CONFIG = { + # You can opt out from the test for specific Python versions. + "ignored_versions": [], + # Old samples are opted out of enforcing Python type hints + # All new samples should feature them + "enforce_type_hints": False, + # An envvar key for determining the project id to use. Change it + # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a + # build specific Cloud project. You can also use your own string + # to use your own Cloud project. + "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", + # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', + # If you need to use a specific version of pip, + # change pip_version_override to the string representation + # of the version number, for example, "20.2.4" + "pip_version_override": None, + # A dictionary you want to inject into your test. Don't put any + # secrets here. These values will override predefined values. + "envs": {}, +} + + +try: + # Ensure we can import noxfile_config in the project's directory. + sys.path.append(".") + from noxfile_config import TEST_CONFIG_OVERRIDE +except ImportError as e: + print("No user noxfile_config found: detail: {}".format(e)) + TEST_CONFIG_OVERRIDE = {} + +# Update the TEST_CONFIG with the user supplied values. +TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) + + +def get_pytest_env_vars() -> Dict[str, str]: + """Returns a dict for pytest invocation.""" + ret = {} + + # Override the GCLOUD_PROJECT and the alias. + env_key = TEST_CONFIG["gcloud_project_env"] + # This should error out if not set. + ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] + + # Apply user supplied envs. + ret.update(TEST_CONFIG["envs"]) + return ret + + +# DO NOT EDIT - automatically generated. +# All versions used to test samples. +ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] + +# Any default versions that should be ignored. +IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] + +TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) + +INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( + "True", + "true", +) + +# Error if a python version is missing +nox.options.error_on_missing_interpreters = True + +# +# Style Checks +# + + +# Linting with flake8. +# +# We ignore the following rules: +# E203: whitespace before ‘:’ +# E266: too many leading ‘#’ for block comment +# E501: line too long +# I202: Additional newline in a section of imports +# +# We also need to specify the rules which are ignored by default: +# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] +FLAKE8_COMMON_ARGS = [ + "--show-source", + "--builtin=gettext", + "--max-complexity=20", + "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", + "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", + "--max-line-length=88", +] + + +@nox.session +def lint(session: nox.sessions.Session) -> None: + if not TEST_CONFIG["enforce_type_hints"]: + session.install("flake8") + else: + session.install("flake8", "flake8-annotations") + + args = FLAKE8_COMMON_ARGS + [ + ".", + ] + session.run("flake8", *args) + + +# +# Black +# + + +@nox.session +def blacken(session: nox.sessions.Session) -> None: + """Run black. Format code to uniform standard.""" + session.install(BLACK_VERSION) + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + session.run("black", *python_files) + + +# +# format = isort + black +# + + +@nox.session +def format(session: nox.sessions.Session) -> None: + """ + Run isort to sort imports. Then run black + to format code to uniform standard. + """ + session.install(BLACK_VERSION, ISORT_VERSION) + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + # Use the --fss option to sort imports using strict alphabetical order. + # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections + session.run("isort", "--fss", *python_files) + session.run("black", *python_files) + + +# +# Sample Tests +# + + +PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] + + +def _session_tests( + session: nox.sessions.Session, post_install: Callable = None +) -> None: + # check for presence of tests + test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( + "**/test_*.py", recursive=True + ) + test_list.extend(glob.glob("**/tests", recursive=True)) + + if len(test_list) == 0: + print("No tests found, skipping directory.") + return + + if TEST_CONFIG["pip_version_override"]: + pip_version = TEST_CONFIG["pip_version_override"] + session.install(f"pip=={pip_version}") + """Runs py.test for a particular project.""" + concurrent_args = [] + if os.path.exists("requirements.txt"): + if os.path.exists("constraints.txt"): + session.install("-r", "requirements.txt", "-c", "constraints.txt") + else: + session.install("-r", "requirements.txt") + with open("requirements.txt") as rfile: + packages = rfile.read() + + if os.path.exists("requirements-test.txt"): + if os.path.exists("constraints-test.txt"): + session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") + else: + session.install("-r", "requirements-test.txt") + with open("requirements-test.txt") as rtfile: + packages += rtfile.read() + + if INSTALL_LIBRARY_FROM_SOURCE: + session.install("-e", _get_repo_root()) + + if post_install: + post_install(session) + + if "pytest-parallel" in packages: + concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) + elif "pytest-xdist" in packages: + concurrent_args.extend(["-n", "auto"]) + + session.run( + "pytest", + *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), + # Pytest will return 5 when no tests are collected. This can happen + # on travis where slow and flaky tests are excluded. + # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html + success_codes=[0, 5], + env=get_pytest_env_vars(), + ) + + +@nox.session(python=ALL_VERSIONS) +def py(session: nox.sessions.Session) -> None: + """Runs py.test for a sample using the specified version of Python.""" + if session.python in TESTED_VERSIONS: + _session_tests(session) + else: + session.skip( + "SKIPPED: {} tests are disabled for this sample.".format(session.python) + ) + + +# +# Readmegen +# + + +def _get_repo_root() -> Optional[str]: + """Returns the root folder of the project.""" + # Get root of this repository. Assume we don't have directories nested deeper than 10 items. + p = Path(os.getcwd()) + for i in range(10): + if p is None: + break + if Path(p / ".git").exists(): + return str(p) + # .git is not available in repos cloned via Cloud Build + # setup.py is always in the library's root, so use that instead + # https://github.com/googleapis/synthtool/issues/792 + if Path(p / "setup.py").exists(): + return str(p) + p = p.parent + raise Exception("Unable to detect repository root.") + + +GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) + + +@nox.session +@nox.parametrize("path", GENERATED_READMES) +def readmegen(session: nox.sessions.Session, path: str) -> None: + """(Re-)generates the readme for a sample.""" + session.install("jinja2", "pyyaml") + dir_ = os.path.dirname(path) + + if os.path.exists(os.path.join(dir_, "requirements.txt")): + session.install("-r", os.path.join(dir_, "requirements.txt")) + + in_file = os.path.join(dir_, "README.rst.in") + session.run( + "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file + ) diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/requirements-test.txt b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/requirements-test.txt new file mode 100644 index 000000000000..f01fd134c400 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/requirements-test.txt @@ -0,0 +1,2 @@ +pytest +google-cloud-testutils==1.7.0 diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/requirements.txt b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/requirements.txt new file mode 100644 index 000000000000..730d25dec63f --- /dev/null +++ b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/requirements.txt @@ -0,0 +1 @@ +google-cloud-bigtable==2.35.0 diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py new file mode 100644 index 000000000000..4949683806ef --- /dev/null +++ b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py @@ -0,0 +1,196 @@ +#!/usr/bin/env python + +# Copyright 2024, 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. + +"""Demonstrates how to connect to Cloud Bigtable and run table admin operations using BigtableTableAdminClient. + +Prerequisites: +- Create a Cloud Bigtable instance. +- Set your Google Application Default Credentials. +""" + +import argparse +import datetime + +from google.cloud import bigtable_admin_v2 +from google.protobuf import duration_pb2 + +from ..utils import create_table_cm + + +def run_table_operations(project_id, instance_id, table_id): + client = bigtable_admin_v2.BigtableTableAdminClient() + instance_path = client.instance_path(project_id, instance_id) + table_path = client.table_path(project_id, instance_id, table_id) + + with create_table_cm(project_id, instance_id, table_id, verbose=False): + # [START bigtable_list_tables] + tables = client.list_tables(parent=instance_path) + print("Listing tables in current project...") + if tables.tables: + for tbl in tables.tables: + print(tbl.name.split("/")[-1]) + else: + print("No table exists in current project...") + # [END bigtable_list_tables] + + # [START bigtable_create_family_gc_max_age] + print("Creating column family cf1 with MaxAge GC Rule...") + max_age_rule = bigtable_admin_v2.GcRule( + max_age=duration_pb2.Duration(seconds=5 * 86400) + ) + cf1 = bigtable_admin_v2.ColumnFamily(gc_rule=max_age_rule) + mod1 = bigtable_admin_v2.ModifyColumnFamiliesRequest.Modification( + id="cf1", create=cf1 + ) + client.modify_column_families(name=table_path, modifications=[mod1]) + print("Created column family cf1 with MaxAge GC Rule.") + # [END bigtable_create_family_gc_max_age] + + # [START bigtable_create_family_gc_max_versions] + print("Creating column family cf2 with max versions GC rule...") + max_versions_rule = bigtable_admin_v2.GcRule(max_num_versions=2) + cf2 = bigtable_admin_v2.ColumnFamily(gc_rule=max_versions_rule) + mod2 = bigtable_admin_v2.ModifyColumnFamiliesRequest.Modification( + id="cf2", create=cf2 + ) + client.modify_column_families(name=table_path, modifications=[mod2]) + print("Created column family cf2 with Max Versions GC Rule.") + # [END bigtable_create_family_gc_max_versions] + + # [START bigtable_create_family_gc_union] + print("Creating column family cf3 with union GC rule...") + union_rule = bigtable_admin_v2.GcRule( + union=bigtable_admin_v2.GcRule.Union( + rules=[ + bigtable_admin_v2.GcRule( + max_age=duration_pb2.Duration(seconds=5 * 86400) + ), + bigtable_admin_v2.GcRule(max_num_versions=2), + ] + ) + ) + cf3 = bigtable_admin_v2.ColumnFamily(gc_rule=union_rule) + mod3 = bigtable_admin_v2.ModifyColumnFamiliesRequest.Modification( + id="cf3", create=cf3 + ) + client.modify_column_families(name=table_path, modifications=[mod3]) + print("Created column family cf3 with Union GC rule") + # [END bigtable_create_family_gc_union] + + # [START bigtable_create_family_gc_intersection] + print("Creating column family cf4 with Intersection GC rule...") + intersection_rule = bigtable_admin_v2.GcRule( + intersection=bigtable_admin_v2.GcRule.Intersection( + rules=[ + bigtable_admin_v2.GcRule( + max_age=duration_pb2.Duration(seconds=5 * 86400) + ), + bigtable_admin_v2.GcRule(max_num_versions=2), + ] + ) + ) + cf4 = bigtable_admin_v2.ColumnFamily(gc_rule=intersection_rule) + mod4 = bigtable_admin_v2.ModifyColumnFamiliesRequest.Modification( + id="cf4", create=cf4 + ) + client.modify_column_families(name=table_path, modifications=[mod4]) + print("Created column family cf4 with Intersection GC rule.") + # [END bigtable_create_family_gc_intersection] + + # [START bigtable_create_family_gc_nested] + print("Creating column family cf5 with a Nested GC rule...") + rule1 = bigtable_admin_v2.GcRule(max_num_versions=10) + rule2 = bigtable_admin_v2.GcRule( + intersection=bigtable_admin_v2.GcRule.Intersection( + rules=[ + bigtable_admin_v2.GcRule( + max_age=duration_pb2.Duration(seconds=30 * 86400) + ), + bigtable_admin_v2.GcRule(max_num_versions=2), + ] + ) + ) + nested_rule = bigtable_admin_v2.GcRule( + union=bigtable_admin_v2.GcRule.Union(rules=[rule1, rule2]) + ) + cf5 = bigtable_admin_v2.ColumnFamily(gc_rule=nested_rule) + mod5 = bigtable_admin_v2.ModifyColumnFamiliesRequest.Modification( + id="cf5", create=cf5 + ) + client.modify_column_families(name=table_path, modifications=[mod5]) + print("Created column family cf5 with a Nested GC rule.") + # [END bigtable_create_family_gc_nested] + + # [START bigtable_list_column_families] + print("Printing Column Family and GC Rule for all column families...") + table_obj = client.get_table(name=table_path) + for column_family_name, cf_obj in sorted(table_obj.column_families.items()): + print("Column Family:", column_family_name) + print("GC Rule:") + print(cf_obj.gc_rule) + # [END bigtable_list_column_families] + + # [START bigtable_update_gc_rule] + print("Updating column family cf1 GC rule...") + updated_cf1 = bigtable_admin_v2.ColumnFamily( + gc_rule=bigtable_admin_v2.GcRule(max_num_versions=1) + ) + mod_update = bigtable_admin_v2.ModifyColumnFamiliesRequest.Modification( + id="cf1", update=updated_cf1 + ) + client.modify_column_families(name=table_path, modifications=[mod_update]) + print("Updated column family cf1 GC rule\n") + # [END bigtable_update_gc_rule] + + # [START bigtable_delete_family] + print("Delete a column family cf2...") + mod_delete = bigtable_admin_v2.ModifyColumnFamiliesRequest.Modification( + id="cf2", drop=True + ) + client.modify_column_families(name=table_path, modifications=[mod_delete]) + print("Column family cf2 deleted successfully.") + # [END bigtable_delete_family] + + +def delete_table(project_id, instance_id, table_id): + client = bigtable_admin_v2.BigtableTableAdminClient() + table_path = client.table_path(project_id, instance_id, table_id) + + # [START bigtable_delete_table] + print("Deleting {} table.".format(table_id)) + client.delete_table(name=table_path) + print("Deleted {} table.".format(table_id)) + # [END bigtable_delete_table] + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description=__doc__, formatter_class=argparse.ArgumentDefaultsHelpFormatter + ) + parser.add_argument("command", help="run or delete.") + parser.add_argument( + "--table", help="Cloud Bigtable Table name.", default="Hello-Bigtable" + ) + parser.add_argument("project_id", help="Your Cloud Platform project ID.") + parser.add_argument( + "instance_id", help="ID of the Cloud Bigtable instance to connect to." + ) + + args = parser.parse_args() + + if args.command.lower() == "run": + run_table_operations(args.project_id, args.instance_id, args.table) + elif args.command.lower() == "delete": + delete_table(args.project_id, args.instance_id, args.table) diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin_test.py b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin_test.py new file mode 100644 index 000000000000..db70d05be111 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin_test.py @@ -0,0 +1,41 @@ +# Copyright 2024, Google LLC +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import uuid + +from .tableadmin import delete_table, run_table_operations + +PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] +BIGTABLE_INSTANCE = os.environ["BIGTABLE_INSTANCE"] +TABLE_ID = f"table-admin-{str(uuid.uuid4())[:16]}" + + +def test_run_table_operations(capsys): + run_table_operations(PROJECT, BIGTABLE_INSTANCE, TABLE_ID) + out, _ = capsys.readouterr() + assert "Listing tables in current project..." in out + assert "Created column family cf1 with MaxAge GC Rule." in out + assert "Created column family cf2 with Max Versions GC Rule." in out + assert "Created column family cf3 with Union GC rule" in out + assert "Created column family cf4 with Intersection GC rule." in out + assert "Created column family cf5 with a Nested GC rule." in out + assert "Printing Column Family and GC Rule for all column families..." in out + assert "Updated column family cf1 GC rule" in out + assert "Column family cf2 deleted successfully." in out + + +def test_delete_table(capsys): + delete_table(PROJECT, BIGTABLE_INSTANCE, TABLE_ID) + out, _ = capsys.readouterr() + assert f"Deleted {TABLE_ID} table." in out From 91d87d26ba30e5b24754432e6cf0b140b37b5498 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Tue, 21 Jul 2026 16:45:55 -0700 Subject: [PATCH 08/23] deleted extra READMEs --- .../admin_client/instanceadmin/README.md | 52 ------------------- .../samples/admin_client/tableadmin/README.md | 52 ------------------- .../samples/data_client/hello/README.md | 52 ------------------- .../samples/data_client/quickstart/README.md | 52 ------------------- .../samples/data_client/snippets/README.md | 33 ------------ 5 files changed, 241 deletions(-) delete mode 100644 packages/google-cloud-bigtable/samples/admin_client/instanceadmin/README.md delete mode 100644 packages/google-cloud-bigtable/samples/admin_client/tableadmin/README.md delete mode 100644 packages/google-cloud-bigtable/samples/data_client/hello/README.md delete mode 100644 packages/google-cloud-bigtable/samples/data_client/quickstart/README.md delete mode 100644 packages/google-cloud-bigtable/samples/data_client/snippets/README.md diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/README.md b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/README.md deleted file mode 100644 index 675add700e93..000000000000 --- a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/README.md +++ /dev/null @@ -1,52 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." - -## Python Samples for Cloud Bigtable - -This directory contains samples for Cloud Bigtable, which may be used as a refererence for how to use this product. -Samples, quickstarts, and other documentation are available at cloud.google.com. - - -### cbt Command Demonstration - -This page explains how to use the cbt command to connect to a Cloud Bigtable instance, perform basic administrative tasks, and read and write data in a table. More information about this quickstart is available at https://cloud.google.com/bigtable/docs/quickstart-cbt - - -Open in Cloud Shell - - -To run this sample: - -1. If this is your first time working with GCP products, you will need to set up [the Cloud SDK][cloud_sdk] or utilize [Google Cloud Shell][gcloud_shell]. This sample may [require authetication][authentication] and you will need to [enable billing][enable_billing]. - -1. Make a fork of this repo and clone the branch locally, then navigate to the sample directory you want to use. - -1. Install the dependencies needed to run the samples. - - pip install -r requirements.txt - -1. Run the sample using - - python instanceadmin.py - - - -
usage: instanceadmin.py [-h] [run] [dev-instance] [del-instance] [add-cluster] [del-cluster] project_id instance_id cluster_id
Demonstrates how to connect to Cloud Bigtable and run some basic operations.
Prerequisites: - Create a Cloud Bigtable cluster.
https://cloud.google.com/bigtable/docs/creating-cluster - Set your Google
Application Default Credentials.
https://developers.google.com/identity/protocols/application-default-
credentials


positional arguments:
  project_id     Your Cloud Platform project ID.
  instance_id    ID of the Cloud Bigtable instance to connect to.


optional arguments:
  -h, --help     show this help message and exit
  --table TABLE  Table to create and destroy. (default: Hello-Bigtable)
- -## Additional Information - -You can read the documentation for more details on API usage and use GitHub -to browse the source and [report issues][issues]. - -### Contributing -View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. - -[authentication]: https://cloud.google.com/docs/authentication/getting-started -[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing -[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ -[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues -[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst -[py_style]: http://google.github.io/styleguide/pyguide.html -[cloud_sdk]: https://cloud.google.com/sdk/docs -[gcloud_shell]: https://cloud.google.com/shell/docs -[gcloud_shell]: https://cloud.google.com/shell/docs diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/README.md b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/README.md deleted file mode 100644 index b2f6a13af55a..000000000000 --- a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/README.md +++ /dev/null @@ -1,52 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." - -## Python Samples for Cloud Bigtable - -This directory contains samples for Cloud Bigtable, which may be used as a refererence for how to use this product. -Samples, quickstarts, and other documentation are available at cloud.google.com. - - -### Table Admin - -Demonstrates how to connect to Cloud Bigtable and run some basic operations. - - -Open in Cloud Shell - - -To run this sample: - -1. If this is your first time working with GCP products, you will need to set up [the Cloud SDK][cloud_sdk] or utilize [Google Cloud Shell][gcloud_shell]. This sample may [require authetication][authentication] and you will need to [enable billing][enable_billing]. - -1. Make a fork of this repo and clone the branch locally, then navigate to the sample directory you want to use. - -1. Install the dependencies needed to run the samples. - - pip install -r requirements.txt - -1. Run the sample using - - python tableadmin.py - - - -
usage: tableadmin.py [-h] [run] [delete] [--table TABLE] project_id instance_id 


Demonstrates how to connect to Cloud Bigtable and run some basic operations.
Prerequisites: - Create a Cloud Bigtable cluster.
https://cloud.google.com/bigtable/docs/creating-cluster - Set your Google
Application Default Credentials.
https://developers.google.com/identity/protocols/application-default-
credentials


positional arguments:
  project_id     Your Cloud Platform project ID.
  instance_id    ID of the Cloud Bigtable instance to connect to.


optional arguments:
  -h, --help     show this help message and exit
  --table TABLE  Table to create and destroy. (default: Hello-Bigtable)
- -## Additional Information - -You can read the documentation for more details on API usage and use GitHub -to browse the source and [report issues][issues]. - -### Contributing -View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. - -[authentication]: https://cloud.google.com/docs/authentication/getting-started -[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing -[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ -[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues -[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst -[py_style]: http://google.github.io/styleguide/pyguide.html -[cloud_sdk]: https://cloud.google.com/sdk/docs -[gcloud_shell]: https://cloud.google.com/shell/docs -[gcloud_shell]: https://cloud.google.com/shell/docs diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/README.md b/packages/google-cloud-bigtable/samples/data_client/hello/README.md deleted file mode 100644 index b3779fb43b27..000000000000 --- a/packages/google-cloud-bigtable/samples/data_client/hello/README.md +++ /dev/null @@ -1,52 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." - -## Python Samples for Cloud Bigtable - -This directory contains samples for Cloud Bigtable, which may be used as a refererence for how to use this product. -Samples, quickstarts, and other documentation are available at cloud.google.com. - - -### Hello World in Cloud Bigtable - -Demonstrates how to connect to Cloud Bigtable and run some basic operations. More information available at: https://cloud.google.com/bigtable/docs/samples-python-hello - - -Open in Cloud Shell - - -To run this sample: - -1. If this is your first time working with GCP products, you will need to set up [the Cloud SDK][cloud_sdk] or utilize [Google Cloud Shell][gcloud_shell]. This sample may [require authentication][authentication] and you will need to [enable billing][enable_billing]. - -1. Make a fork of this repo and clone the branch locally, then navigate to the sample directory you want to use. - -1. Install the dependencies needed to run the samples. - - pip install -r requirements.txt - -1. Run the sample using - - python main.py - - - -
usage: main.py [-h] [--table TABLE] project_id instance_id
Demonstrates how to connect to Cloud Bigtable and run some basic operations.
Prerequisites: - Create a Cloud Bigtable cluster.
https://cloud.google.com/bigtable/docs/creating-cluster - Set your Google
Application Default Credentials.
https://developers.google.com/identity/protocols/application-default-
credentials


positional arguments:
  project_id     Your Cloud Platform project ID.
  instance_id    ID of the Cloud Bigtable instance to connect to.


optional arguments:
  -h, --help     show this help message and exit
  --table TABLE  Table to create and destroy. (default: Hello-Bigtable)
- -## Additional Information - -You can read the documentation for more details on API usage and use GitHub -to browse the source and [report issues][issues]. - -### Contributing -View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. - -[authentication]: https://cloud.google.com/docs/authentication/getting-started -[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing -[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ -[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues -[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst -[py_style]: http://google.github.io/styleguide/pyguide.html -[cloud_sdk]: https://cloud.google.com/sdk/docs -[gcloud_shell]: https://cloud.google.com/shell/docs -[gcloud_shell]: https://cloud.google.com/shell/docs diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/README.md b/packages/google-cloud-bigtable/samples/data_client/quickstart/README.md deleted file mode 100644 index f61000e135d0..000000000000 --- a/packages/google-cloud-bigtable/samples/data_client/quickstart/README.md +++ /dev/null @@ -1,52 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." - -## Python Samples for Cloud Bigtable - -This directory contains samples for Cloud Bigtable, which may be used as a refererence for how to use this product. -Samples, quickstarts, and other documentation are available at cloud.google.com. - - -### Quickstart - -Demonstrates of Cloud Bigtable. This sample creates a Bigtable client, connects to an instance and then to a table, then closes the connection. - - -Open in Cloud Shell - - -To run this sample: - -1. If this is your first time working with GCP products, you will need to set up [the Cloud SDK][cloud_sdk] or utilize [Google Cloud Shell][gcloud_shell]. This sample may [require authetication][authentication] and you will need to [enable billing][enable_billing]. - -1. Make a fork of this repo and clone the branch locally, then navigate to the sample directory you want to use. - -1. Install the dependencies needed to run the samples. - - pip install -r requirements.txt - -1. Run the sample using - - python main.py - - - -
usage: main.py [-h] [--table TABLE] project_id instance_id 


positional arguments:
  project_id     Your Cloud Platform project ID.
  instance_id    ID of the Cloud Bigtable instance to connect to.


optional arguments:
  -h, --help     show this help message and exit
  --table TABLE  Existing table used in the quickstart. (default: my-table)
- -## Additional Information - -You can read the documentation for more details on API usage and use GitHub -to browse the source and [report issues][issues]. - -### Contributing -View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. - -[authentication]: https://cloud.google.com/docs/authentication/getting-started -[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing -[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ -[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues -[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst -[py_style]: http://google.github.io/styleguide/pyguide.html -[cloud_sdk]: https://cloud.google.com/sdk/docs -[gcloud_shell]: https://cloud.google.com/shell/docs -[gcloud_shell]: https://cloud.google.com/shell/docs diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/README.md b/packages/google-cloud-bigtable/samples/data_client/snippets/README.md deleted file mode 100644 index 7c0dd4463214..000000000000 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/README.md +++ /dev/null @@ -1,33 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." - -## Python Samples for Cloud Bigtable - -This directory contains samples for Cloud Bigtable, which may be used as a reference for how to use this product. -Samples, quickstarts, and other documentation are available at [cloud.google.com](https://cloud.google.com/bigtable). - - -### Snippets - -This folder contains snippets for Python Cloud Bigtable. - - - - -## Additional Information - -You can read the documentation for more details on API usage and use GitHub -to [browse the source](https://github.com/googleapis/python-bigtable) and [report issues][issues]. - -### Contributing -View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. - -[authentication]: https://cloud.google.com/docs/authentication/getting-started -[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing -[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ -[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues -[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst -[py_style]: http://google.github.io/styleguide/pyguide.html -[cloud_sdk]: https://cloud.google.com/sdk/docs -[gcloud_shell]: https://cloud.google.com/shell/docs -[gcloud_shell]: https://cloud.google.com/shell/docs From 39b1339446035a6f386a6df04c88009851c993b2 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Tue, 21 Jul 2026 16:46:55 -0700 Subject: [PATCH 09/23] updated headers --- .../samples/admin_client/instanceadmin/instanceadmin.py | 2 +- .../samples/admin_client/instanceadmin/noxfile.py | 2 +- .../samples/admin_client/instanceadmin/test_instanceadmin.py | 2 +- .../samples/admin_client/tableadmin/noxfile.py | 2 +- .../samples/admin_client/tableadmin/tableadmin.py | 2 +- .../samples/admin_client/tableadmin/tableadmin_test.py | 2 +- .../google-cloud-bigtable/samples/data_client/hello/main.py | 2 +- .../samples/data_client/hello/main_test.py | 2 +- .../google-cloud-bigtable/samples/data_client/hello/noxfile.py | 2 +- .../samples/data_client/quickstart/main.py | 2 +- .../samples/data_client/quickstart/main_test.py | 2 +- .../samples/data_client/quickstart/noxfile.py | 2 +- .../samples/data_client/snippets/data_client_snippets.py | 2 +- .../samples/data_client/snippets/data_client_snippets_test.py | 2 +- .../samples/data_client/snippets/deletes_snippets.py | 2 +- .../samples/data_client/snippets/deletes_snippets_test.py | 2 +- .../samples/data_client/snippets/filter_snippets.py | 2 +- .../samples/data_client/snippets/filter_snippets_test.py | 2 +- .../samples/data_client/snippets/noxfile.py | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py index f25b3c69d2c2..2ccff906b908 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py +++ b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# Copyright 2024, Google LLC +# Copyright 2026 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 diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/noxfile.py b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/noxfile.py index c0e60097b353..a2a659dcca04 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/noxfile.py +++ b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/noxfile.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/test_instanceadmin.py b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/test_instanceadmin.py index 0908b6a8c8b3..17da5fb84303 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/test_instanceadmin.py +++ b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/test_instanceadmin.py @@ -1,4 +1,4 @@ -# Copyright 2024, Google LLC +# Copyright 2026 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 diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/noxfile.py b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/noxfile.py index c0e60097b353..a2a659dcca04 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/noxfile.py +++ b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/noxfile.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py index 4949683806ef..115b1e33246a 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py +++ b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# Copyright 2024, Google LLC +# Copyright 2026 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 diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin_test.py b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin_test.py index db70d05be111..38700717377e 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin_test.py +++ b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin_test.py @@ -1,4 +1,4 @@ -# Copyright 2024, Google LLC +# Copyright 2026 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 diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/main.py b/packages/google-cloud-bigtable/samples/data_client/hello/main.py index 6012383fd1f8..6cbef394e8b0 100644 --- a/packages/google-cloud-bigtable/samples/data_client/hello/main.py +++ b/packages/google-cloud-bigtable/samples/data_client/hello/main.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# Copyright 2024 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/main_test.py b/packages/google-cloud-bigtable/samples/data_client/hello/main_test.py index e8b850797963..77cab55a025d 100644 --- a/packages/google-cloud-bigtable/samples/data_client/hello/main_test.py +++ b/packages/google-cloud-bigtable/samples/data_client/hello/main_test.py @@ -1,4 +1,4 @@ -# Copyright 2024 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/noxfile.py b/packages/google-cloud-bigtable/samples/data_client/hello/noxfile.py index c0e60097b353..a2a659dcca04 100644 --- a/packages/google-cloud-bigtable/samples/data_client/hello/noxfile.py +++ b/packages/google-cloud-bigtable/samples/data_client/hello/noxfile.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/main.py b/packages/google-cloud-bigtable/samples/data_client/quickstart/main.py index 4f1818265900..dacbe6c7ae8c 100644 --- a/packages/google-cloud-bigtable/samples/data_client/quickstart/main.py +++ b/packages/google-cloud-bigtable/samples/data_client/quickstart/main.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# Copyright 2024 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/main_test.py b/packages/google-cloud-bigtable/samples/data_client/quickstart/main_test.py index 6b31da66d21e..e7d82e5e1ffc 100644 --- a/packages/google-cloud-bigtable/samples/data_client/quickstart/main_test.py +++ b/packages/google-cloud-bigtable/samples/data_client/quickstart/main_test.py @@ -1,4 +1,4 @@ -# Copyright 2024 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/noxfile.py b/packages/google-cloud-bigtable/samples/data_client/quickstart/noxfile.py index c0e60097b353..a2a659dcca04 100644 --- a/packages/google-cloud-bigtable/samples/data_client/quickstart/noxfile.py +++ b/packages/google-cloud-bigtable/samples/data_client/quickstart/noxfile.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py index 30cbf98887d7..5075830de240 100644 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# Copyright 2024, Google LLC +# Copyright 2026 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 diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_test.py b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_test.py index 15169a59c1ca..fbdc1a69f6a7 100644 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_test.py +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_test.py @@ -1,4 +1,4 @@ -# Copyright 2024, Google LLC +# Copyright 2026 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 diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets.py b/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets.py index f92119d3b618..6955e1119832 100644 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets.py +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# Copyright 2024, Google LLC +# Copyright 2026 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 diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets_test.py b/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets_test.py index 4481a5599a8e..ebd193135d52 100644 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets_test.py +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets_test.py @@ -1,4 +1,4 @@ -# Copyright 2024, Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets.py b/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets.py index 434364621a6d..9f00201ae25f 100644 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets.py +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets.py @@ -1,4 +1,4 @@ -# Copyright 2024, Google LLC +# Copyright 2026 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 diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets_test.py b/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets_test.py index 29b55941ce57..71aaa582cede 100644 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets_test.py +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets_test.py @@ -1,4 +1,4 @@ -# Copyright 2020, Google LLC +# Copyright 2026 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 diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/noxfile.py b/packages/google-cloud-bigtable/samples/data_client/snippets/noxfile.py index c0e60097b353..a2a659dcca04 100644 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/noxfile.py +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/noxfile.py @@ -1,4 +1,4 @@ -# Copyright 2019 Google LLC +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. From 460162278913c8d7e511f4dcb62e30b6ba012ca5 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Wed, 22 Jul 2026 17:05:41 -0700 Subject: [PATCH 10/23] remove sub readmes --- packages/google-cloud-bigtable/docs/conf.py | 1 - .../google-cloud-bigtable/samples/README.md | 42 +++++++++++---- .../samples/legacy_client/hello/README.md | 52 ------------------- .../legacy_client/hello_happybase/README.md | 52 ------------------- .../legacy_client/instanceadmin/README.md | 52 ------------------- .../legacy_client/metricscaler/README.md | 52 ------------------- .../legacy_client/quickstart/README.md | 52 ------------------- .../quickstart_happybase/README.md | 52 ------------------- .../samples/legacy_client/snippets/README.md | 33 ------------ .../legacy_client/tableadmin/README.md | 52 ------------------- 10 files changed, 33 insertions(+), 407 deletions(-) delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/hello/README.md delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/README.md delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/README.md delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/metricscaler/README.md delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/quickstart/README.md delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/README.md delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/snippets/README.md delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/tableadmin/README.md diff --git a/packages/google-cloud-bigtable/docs/conf.py b/packages/google-cloud-bigtable/docs/conf.py index 2adeae7c91b7..a9d4f515cd39 100644 --- a/packages/google-cloud-bigtable/docs/conf.py +++ b/packages/google-cloud-bigtable/docs/conf.py @@ -117,7 +117,6 @@ "**/.nox/**/*", "samples/AUTHORING_GUIDE.md", "samples/CONTRIBUTING.md", - "samples/**/snippets/README*", ] # The reST default role (used for this markup: `text`) to use for all diff --git a/packages/google-cloud-bigtable/samples/README.md b/packages/google-cloud-bigtable/samples/README.md index 1301c6fb1f60..0478dcb80044 100644 --- a/packages/google-cloud-bigtable/samples/README.md +++ b/packages/google-cloud-bigtable/samples/README.md @@ -1,24 +1,48 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." +# Python Code Samples for Cloud Bigtable -## Python Samples for Cloud Bigtable +This directory contains code samples for Cloud Bigtable, which may be used as a reference for using this product. -This directory contains samples for Cloud Bigtable, which may be used as a refererence for how to use this product. +## Prerequisites + +1. If this is your first time working with GCP products, you will need to set up [the Cloud SDK][cloud_sdk] or utilize [Google Cloud Shell][gcloud_shell]. This sample may [require authentication][authentication] and you will need to [enable billing][enable_billing]. + +2. Set your environment variables: + ```bash + export GOOGLE_CLOUD_PROJECT="your-project-id" + export BIGTABLE_INSTANCE="your-instance-id" + ``` + +## Running Samples and Tests + +1. Install dependencies for the sample module you want to run: + ```bash + pip install -r requirements.txt + ``` + +2. Run sample scripts directly: + ```bash + python main.py $GOOGLE_CLOUD_PROJECT $BIGTABLE_INSTANCE + ``` + +3. To run sample tests using Nox: + ```bash + nox -s py-3.14 + ``` ## Additional Information You can read the documentation for more details on API usage and use GitHub -to browse the source and [report issues][issues]. +to browse the source and [report issues][issues]. ### Contributing -View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. + +View the [contributing guidelines][contrib_guide] and the [Python style guide][py_style] for more information. [authentication]: https://cloud.google.com/docs/authentication/getting-started -[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing +[enable_billing]: https://cloud.google.com/apis/docs/getting-started#enabling_billing [client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ -[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues +[issues]: https://github.com/googleapis/google-cloud-python/issues [contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst [py_style]: http://google.github.io/styleguide/pyguide.html [cloud_sdk]: https://cloud.google.com/sdk/docs [gcloud_shell]: https://cloud.google.com/shell/docs -[gcloud_shell]: https://cloud.google.com/shell/docs diff --git a/packages/google-cloud-bigtable/samples/legacy_client/hello/README.md b/packages/google-cloud-bigtable/samples/legacy_client/hello/README.md deleted file mode 100644 index b3779fb43b27..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/hello/README.md +++ /dev/null @@ -1,52 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." - -## Python Samples for Cloud Bigtable - -This directory contains samples for Cloud Bigtable, which may be used as a refererence for how to use this product. -Samples, quickstarts, and other documentation are available at cloud.google.com. - - -### Hello World in Cloud Bigtable - -Demonstrates how to connect to Cloud Bigtable and run some basic operations. More information available at: https://cloud.google.com/bigtable/docs/samples-python-hello - - -Open in Cloud Shell - - -To run this sample: - -1. If this is your first time working with GCP products, you will need to set up [the Cloud SDK][cloud_sdk] or utilize [Google Cloud Shell][gcloud_shell]. This sample may [require authentication][authentication] and you will need to [enable billing][enable_billing]. - -1. Make a fork of this repo and clone the branch locally, then navigate to the sample directory you want to use. - -1. Install the dependencies needed to run the samples. - - pip install -r requirements.txt - -1. Run the sample using - - python main.py - - - -
usage: main.py [-h] [--table TABLE] project_id instance_id
Demonstrates how to connect to Cloud Bigtable and run some basic operations.
Prerequisites: - Create a Cloud Bigtable cluster.
https://cloud.google.com/bigtable/docs/creating-cluster - Set your Google
Application Default Credentials.
https://developers.google.com/identity/protocols/application-default-
credentials


positional arguments:
  project_id     Your Cloud Platform project ID.
  instance_id    ID of the Cloud Bigtable instance to connect to.


optional arguments:
  -h, --help     show this help message and exit
  --table TABLE  Table to create and destroy. (default: Hello-Bigtable)
- -## Additional Information - -You can read the documentation for more details on API usage and use GitHub -to browse the source and [report issues][issues]. - -### Contributing -View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. - -[authentication]: https://cloud.google.com/docs/authentication/getting-started -[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing -[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ -[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues -[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst -[py_style]: http://google.github.io/styleguide/pyguide.html -[cloud_sdk]: https://cloud.google.com/sdk/docs -[gcloud_shell]: https://cloud.google.com/shell/docs -[gcloud_shell]: https://cloud.google.com/shell/docs diff --git a/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/README.md b/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/README.md deleted file mode 100644 index fdbea4e63739..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/README.md +++ /dev/null @@ -1,52 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." - -## Python Samples for Cloud Bigtable - -This directory contains samples for Cloud Bigtable, which may be used as a refererence for how to use this product. -Samples, quickstarts, and other documentation are available at cloud.google.com. - - -### Hello World using HappyBase - -This sample demonstrates using the Google Cloud Client Library HappyBase package, an implementation of the HappyBase API to connect to and interact with Cloud Bigtable. More information available at: https://cloud.google.com/bigtable/docs/samples-python-hello-happybase - - -Open in Cloud Shell - - -To run this sample: - -1. If this is your first time working with GCP products, you will need to set up [the Cloud SDK][cloud_sdk] or utilize [Google Cloud Shell][gcloud_shell]. This sample may [require authetication][authentication] and you will need to [enable billing][enable_billing]. - -1. Make a fork of this repo and clone the branch locally, then navigate to the sample directory you want to use. - -1. Install the dependencies needed to run the samples. - - pip install -r requirements.txt - -1. Run the sample using - - python main.py - - - -
usage: main.py [-h] [--table TABLE] project_id instance_id
Demonstrates how to connect to Cloud Bigtable and run some basic operations.
Prerequisites: - Create a Cloud Bigtable cluster.
https://cloud.google.com/bigtable/docs/creating-cluster - Set your Google
Application Default Credentials.
https://developers.google.com/identity/protocols/application-default-
credentials


positional arguments:
  project_id     Your Cloud Platform project ID.
  instance_id    ID of the Cloud Bigtable instance to connect to.


optional arguments:
  -h, --help     show this help message and exit
  --table TABLE  Table to create and destroy. (default: Hello-Bigtable)
- -## Additional Information - -You can read the documentation for more details on API usage and use GitHub -to browse the source and [report issues][issues]. - -### Contributing -View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. - -[authentication]: https://cloud.google.com/docs/authentication/getting-started -[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing -[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ -[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues -[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst -[py_style]: http://google.github.io/styleguide/pyguide.html -[cloud_sdk]: https://cloud.google.com/sdk/docs -[gcloud_shell]: https://cloud.google.com/shell/docs -[gcloud_shell]: https://cloud.google.com/shell/docs diff --git a/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/README.md b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/README.md deleted file mode 100644 index 675add700e93..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/README.md +++ /dev/null @@ -1,52 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." - -## Python Samples for Cloud Bigtable - -This directory contains samples for Cloud Bigtable, which may be used as a refererence for how to use this product. -Samples, quickstarts, and other documentation are available at cloud.google.com. - - -### cbt Command Demonstration - -This page explains how to use the cbt command to connect to a Cloud Bigtable instance, perform basic administrative tasks, and read and write data in a table. More information about this quickstart is available at https://cloud.google.com/bigtable/docs/quickstart-cbt - - -Open in Cloud Shell - - -To run this sample: - -1. If this is your first time working with GCP products, you will need to set up [the Cloud SDK][cloud_sdk] or utilize [Google Cloud Shell][gcloud_shell]. This sample may [require authetication][authentication] and you will need to [enable billing][enable_billing]. - -1. Make a fork of this repo and clone the branch locally, then navigate to the sample directory you want to use. - -1. Install the dependencies needed to run the samples. - - pip install -r requirements.txt - -1. Run the sample using - - python instanceadmin.py - - - -
usage: instanceadmin.py [-h] [run] [dev-instance] [del-instance] [add-cluster] [del-cluster] project_id instance_id cluster_id
Demonstrates how to connect to Cloud Bigtable and run some basic operations.
Prerequisites: - Create a Cloud Bigtable cluster.
https://cloud.google.com/bigtable/docs/creating-cluster - Set your Google
Application Default Credentials.
https://developers.google.com/identity/protocols/application-default-
credentials


positional arguments:
  project_id     Your Cloud Platform project ID.
  instance_id    ID of the Cloud Bigtable instance to connect to.


optional arguments:
  -h, --help     show this help message and exit
  --table TABLE  Table to create and destroy. (default: Hello-Bigtable)
- -## Additional Information - -You can read the documentation for more details on API usage and use GitHub -to browse the source and [report issues][issues]. - -### Contributing -View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. - -[authentication]: https://cloud.google.com/docs/authentication/getting-started -[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing -[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ -[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues -[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst -[py_style]: http://google.github.io/styleguide/pyguide.html -[cloud_sdk]: https://cloud.google.com/sdk/docs -[gcloud_shell]: https://cloud.google.com/shell/docs -[gcloud_shell]: https://cloud.google.com/shell/docs diff --git a/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/README.md b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/README.md deleted file mode 100644 index e1624bb1872e..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/README.md +++ /dev/null @@ -1,52 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." - -## Python Samples for Cloud Bigtable - -This directory contains samples for Cloud Bigtable, which may be used as a refererence for how to use this product. -Samples, quickstarts, and other documentation are available at cloud.google.com. - - -### Metric Scaler - -This sample demonstrates how to use Stackdriver Monitoring to scale Cloud Bigtable based on CPU usage. - - -Open in Cloud Shell - - -To run this sample: - -1. If this is your first time working with GCP products, you will need to set up [the Cloud SDK][cloud_sdk] or utilize [Google Cloud Shell][gcloud_shell]. This sample may [require authetication][authentication] and you will need to [enable billing][enable_billing]. - -1. Make a fork of this repo and clone the branch locally, then navigate to the sample directory you want to use. - -1. Install the dependencies needed to run the samples. - - pip install -r requirements.txt - -1. Run the sample using - - python metricscaler.py - - - -
usage: metricscaler.py [-h] [--high_cpu_threshold HIGH_CPU_THRESHOLD] [--low_cpu_threshold LOW_CPU_THRESHOLD] [--short_sleep SHORT_SLEEP] [--long_sleep LONG_SLEEP] bigtable_instance bigtable_cluster
usage: metricscaler.py [-h] [--high_cpu_threshold HIGH_CPU_THRESHOLD]
                       [--low_cpu_threshold LOW_CPU_THRESHOLD]
                       [--short_sleep SHORT_SLEEP] [--long_sleep LONG_SLEEP]
                       bigtable_instance bigtable_cluster


Scales Cloud Bigtable clusters based on CPU usage.


positional arguments:
  bigtable_instance     ID of the Cloud Bigtable instance to connect to.
  bigtable_cluster      ID of the Cloud Bigtable cluster to connect to.


optional arguments:
  -h, --help            show this help message and exit
  --high_cpu_threshold HIGH_CPU_THRESHOLD
                        If Cloud Bigtable CPU usage is above this threshold,
                        scale up
  --low_cpu_threshold LOW_CPU_THRESHOLD
                        If Cloud Bigtable CPU usage is below this threshold,
                        scale down
  --short_sleep SHORT_SLEEP
                        How long to sleep in seconds between checking metrics
                        after no scale operation
  --long_sleep LONG_SLEEP
                        How long to sleep in seconds between checking metrics
                        after a scaling operation
- -## Additional Information - -You can read the documentation for more details on API usage and use GitHub -to browse the source and [report issues][issues]. - -### Contributing -View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. - -[authentication]: https://cloud.google.com/docs/authentication/getting-started -[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing -[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ -[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues -[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst -[py_style]: http://google.github.io/styleguide/pyguide.html -[cloud_sdk]: https://cloud.google.com/sdk/docs -[gcloud_shell]: https://cloud.google.com/shell/docs -[gcloud_shell]: https://cloud.google.com/shell/docs diff --git a/packages/google-cloud-bigtable/samples/legacy_client/quickstart/README.md b/packages/google-cloud-bigtable/samples/legacy_client/quickstart/README.md deleted file mode 100644 index f61000e135d0..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/quickstart/README.md +++ /dev/null @@ -1,52 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." - -## Python Samples for Cloud Bigtable - -This directory contains samples for Cloud Bigtable, which may be used as a refererence for how to use this product. -Samples, quickstarts, and other documentation are available at cloud.google.com. - - -### Quickstart - -Demonstrates of Cloud Bigtable. This sample creates a Bigtable client, connects to an instance and then to a table, then closes the connection. - - -Open in Cloud Shell - - -To run this sample: - -1. If this is your first time working with GCP products, you will need to set up [the Cloud SDK][cloud_sdk] or utilize [Google Cloud Shell][gcloud_shell]. This sample may [require authetication][authentication] and you will need to [enable billing][enable_billing]. - -1. Make a fork of this repo and clone the branch locally, then navigate to the sample directory you want to use. - -1. Install the dependencies needed to run the samples. - - pip install -r requirements.txt - -1. Run the sample using - - python main.py - - - -
usage: main.py [-h] [--table TABLE] project_id instance_id 


positional arguments:
  project_id     Your Cloud Platform project ID.
  instance_id    ID of the Cloud Bigtable instance to connect to.


optional arguments:
  -h, --help     show this help message and exit
  --table TABLE  Existing table used in the quickstart. (default: my-table)
- -## Additional Information - -You can read the documentation for more details on API usage and use GitHub -to browse the source and [report issues][issues]. - -### Contributing -View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. - -[authentication]: https://cloud.google.com/docs/authentication/getting-started -[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing -[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ -[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues -[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst -[py_style]: http://google.github.io/styleguide/pyguide.html -[cloud_sdk]: https://cloud.google.com/sdk/docs -[gcloud_shell]: https://cloud.google.com/shell/docs -[gcloud_shell]: https://cloud.google.com/shell/docs diff --git a/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/README.md b/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/README.md deleted file mode 100644 index 6d4d8871e3cb..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/README.md +++ /dev/null @@ -1,52 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." - -## Python Samples for Cloud Bigtable - -This directory contains samples for Cloud Bigtable, which may be used as a refererence for how to use this product. -Samples, quickstarts, and other documentation are available at cloud.google.com. - - -### Quickstart using HappyBase - -Demonstrates of Cloud Bigtable using HappyBase. This sample creates a Bigtable client, connects to an instance and then to a table, then closes the connection. - - -Open in Cloud Shell - - -To run this sample: - -1. If this is your first time working with GCP products, you will need to set up [the Cloud SDK][cloud_sdk] or utilize [Google Cloud Shell][gcloud_shell]. This sample may [require authetication][authentication] and you will need to [enable billing][enable_billing]. - -1. Make a fork of this repo and clone the branch locally, then navigate to the sample directory you want to use. - -1. Install the dependencies needed to run the samples. - - pip install -r requirements.txt - -1. Run the sample using - - python main.py - - - -
usage: main.py [-h] [--table TABLE] project_id instance_id
usage: main.py [-h] [--table TABLE] project_id instance_id


positional arguments:
  project_id     Your Cloud Platform project ID.
  instance_id    ID of the Cloud Bigtable instance to connect to.


optional arguments:
  -h, --help     show this help message and exit
  --table TABLE  Existing table used in the quickstart. (default: my-table)browse the source and [report issues][issues]. - -### Contributing -View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. - -[authentication]: https://cloud.google.com/docs/authentication/getting-started -[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing -[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ -[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues -[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst -[py_style]: http://google.github.io/styleguide/pyguide.html -[cloud_sdk]: https://cloud.google.com/sdk/docs -[gcloud_shell]: https://cloud.google.com/shell/docs -[gcloud_shell]: https://cloud.google.com/shell/docs diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/README.md b/packages/google-cloud-bigtable/samples/legacy_client/snippets/README.md deleted file mode 100644 index 7c0dd4463214..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/README.md +++ /dev/null @@ -1,33 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." - -## Python Samples for Cloud Bigtable - -This directory contains samples for Cloud Bigtable, which may be used as a reference for how to use this product. -Samples, quickstarts, and other documentation are available at [cloud.google.com](https://cloud.google.com/bigtable). - - -### Snippets - -This folder contains snippets for Python Cloud Bigtable. - - - - -## Additional Information - -You can read the documentation for more details on API usage and use GitHub -to [browse the source](https://github.com/googleapis/python-bigtable) and [report issues][issues]. - -### Contributing -View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. - -[authentication]: https://cloud.google.com/docs/authentication/getting-started -[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing -[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ -[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues -[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst -[py_style]: http://google.github.io/styleguide/pyguide.html -[cloud_sdk]: https://cloud.google.com/sdk/docs -[gcloud_shell]: https://cloud.google.com/shell/docs -[gcloud_shell]: https://cloud.google.com/shell/docs diff --git a/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/README.md b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/README.md deleted file mode 100644 index b2f6a13af55a..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/README.md +++ /dev/null @@ -1,52 +0,0 @@ -[//]: # "This README.md file is auto-generated, all changes to this file will be lost." -[//]: # "To regenerate it, use `python -m synthtool`." - -## Python Samples for Cloud Bigtable - -This directory contains samples for Cloud Bigtable, which may be used as a refererence for how to use this product. -Samples, quickstarts, and other documentation are available at cloud.google.com. - - -### Table Admin - -Demonstrates how to connect to Cloud Bigtable and run some basic operations. - - -Open in Cloud Shell - - -To run this sample: - -1. If this is your first time working with GCP products, you will need to set up [the Cloud SDK][cloud_sdk] or utilize [Google Cloud Shell][gcloud_shell]. This sample may [require authetication][authentication] and you will need to [enable billing][enable_billing]. - -1. Make a fork of this repo and clone the branch locally, then navigate to the sample directory you want to use. - -1. Install the dependencies needed to run the samples. - - pip install -r requirements.txt - -1. Run the sample using - - python tableadmin.py - - - -
usage: tableadmin.py [-h] [run] [delete] [--table TABLE] project_id instance_id 


Demonstrates how to connect to Cloud Bigtable and run some basic operations.
Prerequisites: - Create a Cloud Bigtable cluster.
https://cloud.google.com/bigtable/docs/creating-cluster - Set your Google
Application Default Credentials.
https://developers.google.com/identity/protocols/application-default-
credentials


positional arguments:
  project_id     Your Cloud Platform project ID.
  instance_id    ID of the Cloud Bigtable instance to connect to.


optional arguments:
  -h, --help     show this help message and exit
  --table TABLE  Table to create and destroy. (default: Hello-Bigtable)
- -## Additional Information - -You can read the documentation for more details on API usage and use GitHub -to browse the source and [report issues][issues]. - -### Contributing -View the [contributing guidelines][contrib_guide], the [Python style guide][py_style] for more information. - -[authentication]: https://cloud.google.com/docs/authentication/getting-started -[enable_billing]:https://cloud.google.com/apis/docs/getting-started#enabling_billing -[client_library_python]: https://googlecloudplatform.github.io/google-cloud-python/ -[issues]: https://github.com/GoogleCloudPlatform/google-cloud-python/issues -[contrib_guide]: https://github.com/googleapis/google-cloud-python/blob/main/CONTRIBUTING.rst -[py_style]: http://google.github.io/styleguide/pyguide.html -[cloud_sdk]: https://cloud.google.com/sdk/docs -[gcloud_shell]: https://cloud.google.com/shell/docs -[gcloud_shell]: https://cloud.google.com/shell/docs From bb848b4f33bb5769840ae6b69b54f13f5c9bc1d4 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Thu, 6 Aug 2026 14:43:23 -0700 Subject: [PATCH 11/23] address gemini comments --- .../samples/admin_client/instanceadmin/instanceadmin.py | 2 +- .../samples/admin_client/tableadmin/tableadmin.py | 4 ++-- .../samples/data_client/snippets/data_client_snippets.py | 4 +--- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py index 2ccff906b908..28db14eee0ee 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py +++ b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py @@ -23,6 +23,7 @@ import argparse from google.api_core.exceptions import NotFound + from google.cloud import bigtable_admin_v2 @@ -40,7 +41,6 @@ def run_instance_operations(project_id, instance_id, cluster_id): # [END bigtable_check_instance_exists] # [START bigtable_create_prod_instance] - cluster_path = client.cluster_path(project_id, instance_id, cluster_id) cluster = bigtable_admin_v2.Cluster( location=client.common_location_path(project_id, "us-central1-f"), serve_nodes=1, diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py index 115b1e33246a..33302652e7c2 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py +++ b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py @@ -21,11 +21,11 @@ """ import argparse -import datetime -from google.cloud import bigtable_admin_v2 from google.protobuf import duration_pb2 +from google.cloud import bigtable_admin_v2 + from ..utils import create_table_cm diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py index 5075830de240..2d89ee39b049 100644 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py @@ -146,9 +146,7 @@ def write_aggregate(project_id, instance_id, table_id): value=32304, timestamp_micros=time.time_ns() // 1000, ) - batcher.append( - RowMutationEntry(row_key.encode("utf-8"), [reading]) - ) + batcher.append(RowMutationEntry(row_key.encode("utf-8"), [reading])) except MutationsExceptionGroup as e: for sub_exception in e.exceptions: failed_entry: RowMutationEntry = sub_exception.entry From 033e9f4f2f0fb66fa88ec145f75effde33d7fd0d Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Wed, 12 Aug 2026 09:37:06 -0700 Subject: [PATCH 12/23] moved generated samples back --- packages/google-cloud-bigtable/docs/conf.py | 1 + ...generated_bigtable_instance_admin_create_app_profile_async.py | 0 ..._generated_bigtable_instance_admin_create_app_profile_sync.py | 0 ..._v2_generated_bigtable_instance_admin_create_cluster_async.py | 0 ...n_v2_generated_bigtable_instance_admin_create_cluster_sync.py | 0 ...v2_generated_bigtable_instance_admin_create_instance_async.py | 0 ..._v2_generated_bigtable_instance_admin_create_instance_sync.py | 0 ...enerated_bigtable_instance_admin_create_logical_view_async.py | 0 ...generated_bigtable_instance_admin_create_logical_view_sync.py | 0 ...ted_bigtable_instance_admin_create_materialized_view_async.py | 0 ...ated_bigtable_instance_admin_create_materialized_view_sync.py | 0 ...generated_bigtable_instance_admin_delete_app_profile_async.py | 0 ..._generated_bigtable_instance_admin_delete_app_profile_sync.py | 0 ..._v2_generated_bigtable_instance_admin_delete_cluster_async.py | 0 ...n_v2_generated_bigtable_instance_admin_delete_cluster_sync.py | 0 ...v2_generated_bigtable_instance_admin_delete_instance_async.py | 0 ..._v2_generated_bigtable_instance_admin_delete_instance_sync.py | 0 ...enerated_bigtable_instance_admin_delete_logical_view_async.py | 0 ...generated_bigtable_instance_admin_delete_logical_view_sync.py | 0 ...ted_bigtable_instance_admin_delete_materialized_view_async.py | 0 ...ated_bigtable_instance_admin_delete_materialized_view_sync.py | 0 ...v2_generated_bigtable_instance_admin_get_app_profile_async.py | 0 ..._v2_generated_bigtable_instance_admin_get_app_profile_sync.py | 0 ...min_v2_generated_bigtable_instance_admin_get_cluster_async.py | 0 ...dmin_v2_generated_bigtable_instance_admin_get_cluster_sync.py | 0 ..._v2_generated_bigtable_instance_admin_get_iam_policy_async.py | 0 ...n_v2_generated_bigtable_instance_admin_get_iam_policy_sync.py | 0 ...in_v2_generated_bigtable_instance_admin_get_instance_async.py | 0 ...min_v2_generated_bigtable_instance_admin_get_instance_sync.py | 0 ...2_generated_bigtable_instance_admin_get_logical_view_async.py | 0 ...v2_generated_bigtable_instance_admin_get_logical_view_sync.py | 0 ...erated_bigtable_instance_admin_get_materialized_view_async.py | 0 ...nerated_bigtable_instance_admin_get_materialized_view_sync.py | 0 ..._generated_bigtable_instance_admin_list_app_profiles_async.py | 0 ...2_generated_bigtable_instance_admin_list_app_profiles_sync.py | 0 ...n_v2_generated_bigtable_instance_admin_list_clusters_async.py | 0 ...in_v2_generated_bigtable_instance_admin_list_clusters_sync.py | 0 ...2_generated_bigtable_instance_admin_list_hot_tablets_async.py | 0 ...v2_generated_bigtable_instance_admin_list_hot_tablets_sync.py | 0 ..._v2_generated_bigtable_instance_admin_list_instances_async.py | 0 ...n_v2_generated_bigtable_instance_admin_list_instances_sync.py | 0 ...generated_bigtable_instance_admin_list_logical_views_async.py | 0 ..._generated_bigtable_instance_admin_list_logical_views_sync.py | 0 ...ated_bigtable_instance_admin_list_materialized_views_async.py | 0 ...rated_bigtable_instance_admin_list_materialized_views_sync.py | 0 ...rated_bigtable_instance_admin_partial_update_cluster_async.py | 0 ...erated_bigtable_instance_admin_partial_update_cluster_sync.py | 0 ...ated_bigtable_instance_admin_partial_update_instance_async.py | 0 ...rated_bigtable_instance_admin_partial_update_instance_sync.py | 0 ..._v2_generated_bigtable_instance_admin_set_iam_policy_async.py | 0 ...n_v2_generated_bigtable_instance_admin_set_iam_policy_sync.py | 0 ...nerated_bigtable_instance_admin_test_iam_permissions_async.py | 0 ...enerated_bigtable_instance_admin_test_iam_permissions_sync.py | 0 ...generated_bigtable_instance_admin_update_app_profile_async.py | 0 ..._generated_bigtable_instance_admin_update_app_profile_sync.py | 0 ..._v2_generated_bigtable_instance_admin_update_cluster_async.py | 0 ...n_v2_generated_bigtable_instance_admin_update_cluster_sync.py | 0 ...v2_generated_bigtable_instance_admin_update_instance_async.py | 0 ..._v2_generated_bigtable_instance_admin_update_instance_sync.py | 0 ...enerated_bigtable_instance_admin_update_logical_view_async.py | 0 ...generated_bigtable_instance_admin_update_logical_view_sync.py | 0 ...ted_bigtable_instance_admin_update_materialized_view_async.py | 0 ...ated_bigtable_instance_admin_update_materialized_view_sync.py | 0 ..._v2_generated_bigtable_table_admin_check_consistency_async.py | 0 ...n_v2_generated_bigtable_table_admin_check_consistency_sync.py | 0 ...eadmin_v2_generated_bigtable_table_admin_copy_backup_async.py | 0 ...leadmin_v2_generated_bigtable_table_admin_copy_backup_sync.py | 0 ...enerated_bigtable_table_admin_create_authorized_view_async.py | 0 ...generated_bigtable_table_admin_create_authorized_view_sync.py | 0 ...dmin_v2_generated_bigtable_table_admin_create_backup_async.py | 0 ...admin_v2_generated_bigtable_table_admin_create_backup_sync.py | 0 ..._generated_bigtable_table_admin_create_schema_bundle_async.py | 0 ...2_generated_bigtable_table_admin_create_schema_bundle_sync.py | 0 ...admin_v2_generated_bigtable_table_admin_create_table_async.py | 0 ...ated_bigtable_table_admin_create_table_from_snapshot_async.py | 0 ...rated_bigtable_table_admin_create_table_from_snapshot_sync.py | 0 ...eadmin_v2_generated_bigtable_table_admin_create_table_sync.py | 0 ...enerated_bigtable_table_admin_delete_authorized_view_async.py | 0 ...generated_bigtable_table_admin_delete_authorized_view_sync.py | 0 ...dmin_v2_generated_bigtable_table_admin_delete_backup_async.py | 0 ...admin_v2_generated_bigtable_table_admin_delete_backup_sync.py | 0 ..._generated_bigtable_table_admin_delete_schema_bundle_async.py | 0 ...2_generated_bigtable_table_admin_delete_schema_bundle_sync.py | 0 ...in_v2_generated_bigtable_table_admin_delete_snapshot_async.py | 0 ...min_v2_generated_bigtable_table_admin_delete_snapshot_sync.py | 0 ...admin_v2_generated_bigtable_table_admin_delete_table_async.py | 0 ...eadmin_v2_generated_bigtable_table_admin_delete_table_sync.py | 0 ...min_v2_generated_bigtable_table_admin_drop_row_range_async.py | 0 ...dmin_v2_generated_bigtable_table_admin_drop_row_range_sync.py | 0 ...ated_bigtable_table_admin_generate_consistency_token_async.py | 0 ...rated_bigtable_table_admin_generate_consistency_token_sync.py | 0 ...2_generated_bigtable_table_admin_get_authorized_view_async.py | 0 ...v2_generated_bigtable_table_admin_get_authorized_view_sync.py | 0 ...leadmin_v2_generated_bigtable_table_admin_get_backup_async.py | 0 ...bleadmin_v2_generated_bigtable_table_admin_get_backup_sync.py | 0 ...min_v2_generated_bigtable_table_admin_get_iam_policy_async.py | 0 ...dmin_v2_generated_bigtable_table_admin_get_iam_policy_sync.py | 0 ..._v2_generated_bigtable_table_admin_get_schema_bundle_async.py | 0 ...n_v2_generated_bigtable_table_admin_get_schema_bundle_sync.py | 0 ...admin_v2_generated_bigtable_table_admin_get_snapshot_async.py | 0 ...eadmin_v2_generated_bigtable_table_admin_get_snapshot_sync.py | 0 ...bleadmin_v2_generated_bigtable_table_admin_get_table_async.py | 0 ...ableadmin_v2_generated_bigtable_table_admin_get_table_sync.py | 0 ...generated_bigtable_table_admin_list_authorized_views_async.py | 0 ..._generated_bigtable_table_admin_list_authorized_views_sync.py | 0 ...admin_v2_generated_bigtable_table_admin_list_backups_async.py | 0 ...eadmin_v2_generated_bigtable_table_admin_list_backups_sync.py | 0 ...2_generated_bigtable_table_admin_list_schema_bundles_async.py | 0 ...v2_generated_bigtable_table_admin_list_schema_bundles_sync.py | 0 ...min_v2_generated_bigtable_table_admin_list_snapshots_async.py | 0 ...dmin_v2_generated_bigtable_table_admin_list_snapshots_sync.py | 0 ...eadmin_v2_generated_bigtable_table_admin_list_tables_async.py | 0 ...leadmin_v2_generated_bigtable_table_admin_list_tables_sync.py | 0 ...enerated_bigtable_table_admin_modify_column_families_async.py | 0 ...generated_bigtable_table_admin_modify_column_families_sync.py | 0 ...enerated_bigtable_table_admin_restore_table_async_internal.py | 0 ...generated_bigtable_table_admin_restore_table_sync_internal.py | 0 ...min_v2_generated_bigtable_table_admin_set_iam_policy_async.py | 0 ...dmin_v2_generated_bigtable_table_admin_set_iam_policy_sync.py | 0 ...min_v2_generated_bigtable_table_admin_snapshot_table_async.py | 0 ...dmin_v2_generated_bigtable_table_admin_snapshot_table_sync.py | 0 ..._generated_bigtable_table_admin_test_iam_permissions_async.py | 0 ...2_generated_bigtable_table_admin_test_iam_permissions_sync.py | 0 ...min_v2_generated_bigtable_table_admin_undelete_table_async.py | 0 ...dmin_v2_generated_bigtable_table_admin_undelete_table_sync.py | 0 ...enerated_bigtable_table_admin_update_authorized_view_async.py | 0 ...generated_bigtable_table_admin_update_authorized_view_sync.py | 0 ...dmin_v2_generated_bigtable_table_admin_update_backup_async.py | 0 ...admin_v2_generated_bigtable_table_admin_update_backup_sync.py | 0 ..._generated_bigtable_table_admin_update_schema_bundle_async.py | 0 ...2_generated_bigtable_table_admin_update_schema_bundle_sync.py | 0 ...admin_v2_generated_bigtable_table_admin_update_table_async.py | 0 ...eadmin_v2_generated_bigtable_table_admin_update_table_sync.py | 0 .../snippet_metadata_google.bigtable.admin.v2.json | 0 134 files changed, 1 insertion(+) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_async_internal.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_sync_internal.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_async.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_sync.py (100%) rename packages/google-cloud-bigtable/samples/{admin_client => }/generated_samples/snippet_metadata_google.bigtable.admin.v2.json (100%) diff --git a/packages/google-cloud-bigtable/docs/conf.py b/packages/google-cloud-bigtable/docs/conf.py index a9d4f515cd39..47f0191ddd3f 100644 --- a/packages/google-cloud-bigtable/docs/conf.py +++ b/packages/google-cloud-bigtable/docs/conf.py @@ -117,6 +117,7 @@ "**/.nox/**/*", "samples/AUTHORING_GUIDE.md", "samples/CONTRIBUTING.md", + "samples/snippets/README.rst", ] # The reST default role (used for this markup: `text`) to use for all diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_app_profile_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_cluster_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_instance_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_logical_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_delete_materialized_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_async_internal.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_async_internal.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_async_internal.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_async_internal.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_sync_internal.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_sync_internal.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_sync_internal.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_sync_internal.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_async.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_async.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_async.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_async.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_sync.py b/packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_sync.py similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_sync.py rename to packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_sync.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/generated_samples/snippet_metadata_google.bigtable.admin.v2.json b/packages/google-cloud-bigtable/samples/generated_samples/snippet_metadata_google.bigtable.admin.v2.json similarity index 100% rename from packages/google-cloud-bigtable/samples/admin_client/generated_samples/snippet_metadata_google.bigtable.admin.v2.json rename to packages/google-cloud-bigtable/samples/generated_samples/snippet_metadata_google.bigtable.admin.v2.json From 0b43f15213ed1b7919fb003dad5ba14604456b72 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Wed, 12 Aug 2026 09:38:30 -0700 Subject: [PATCH 13/23] reset librarian file --- .../bigtable-integration.yaml | 244 +++++++++--------- 1 file changed, 122 insertions(+), 122 deletions(-) diff --git a/.librarian/generator-input/client-post-processing/bigtable-integration.yaml b/.librarian/generator-input/client-post-processing/bigtable-integration.yaml index 1681b97cb1a0..63b5ffa7c9fb 100644 --- a/.librarian/generator-input/client-post-processing/bigtable-integration.yaml +++ b/.librarian/generator-input/client-post-processing/bigtable-integration.yaml @@ -15,128 +15,128 @@ description: Integrate Google Cloud Bigtable Handwritten code url: https://github.com/googleapis/gapic-generator-python/issues/123 replacements: - paths: [ - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_async_internal.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_sync_internal.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_sync.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_async.py, - packages/google-cloud-bigtable/samples/admin_client/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_app_profile_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_cluster_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_instance_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_logical_view_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_create_materialized_view_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_app_profile_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_cluster_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_iam_policy_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_instance_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_logical_view_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_get_materialized_view_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_app_profiles_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_clusters_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_hot_tablets_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_instances_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_logical_views_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_list_materialized_views_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_cluster_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_partial_update_instance_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_set_iam_policy_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_test_iam_permissions_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_app_profile_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_cluster_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_instance_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_logical_view_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_instance_admin_update_materialized_view_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_check_consistency_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_copy_backup_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_authorized_view_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_backup_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_schema_bundle_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_from_snapshot_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_create_table_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_authorized_view_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_backup_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_schema_bundle_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_snapshot_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_delete_table_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_drop_row_range_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_generate_consistency_token_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_authorized_view_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_backup_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_iam_policy_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_schema_bundle_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_snapshot_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_get_table_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_authorized_views_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_backups_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_schema_bundles_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_snapshots_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_list_tables_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_modify_column_families_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_async_internal.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_restore_table_sync_internal.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_set_iam_policy_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_snapshot_table_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_test_iam_permissions_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_undelete_table_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_authorized_view_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_backup_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_schema_bundle_sync.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_async.py, + packages/google-cloud-bigtable/samples/generated_samples/bigtableadmin_v2_generated_bigtable_table_admin_update_table_sync.py, packages/google-cloud-bigtable/google/cloud/bigtable_admin_v2/services/bigtable_instance_admin/client.py, packages/google-cloud-bigtable/google/cloud/bigtable_admin_v2/services/bigtable_instance_admin/async_client.py, packages/google-cloud-bigtable/google/cloud/bigtable_admin_v2/services/bigtable_table_admin/client.py, From d835f0efb432a6d082927e445ff9b4ebfdb7aad7 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Wed, 7 Oct 2026 14:28:25 -0700 Subject: [PATCH 14/23] added imports into samples --- .../instanceadmin/instanceadmin.py | 67 +++++++--- .../admin_client/tableadmin/tableadmin.py | 125 ++++++++++++------ 2 files changed, 132 insertions(+), 60 deletions(-) diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py index 28db14eee0ee..2ae2eb6798dd 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py +++ b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py @@ -22,17 +22,15 @@ import argparse -from google.api_core.exceptions import NotFound - -from google.cloud import bigtable_admin_v2 - def run_instance_operations(project_id, instance_id, cluster_id): - client = bigtable_admin_v2.BigtableInstanceAdminClient() - project_path = client.common_project_path(project_id) + # [START bigtable_check_instance_exists] + from google.api_core.exceptions import NotFound + from google.cloud import bigtable_admin + + client = bigtable_admin.BigtableInstanceAdminClient() instance_path = client.instance_path(project_id, instance_id) - # [START bigtable_check_instance_exists] try: instance = client.get_instance(name=instance_path) print(f"Instance {instance_id} already exists.") @@ -41,15 +39,22 @@ def run_instance_operations(project_id, instance_id, cluster_id): # [END bigtable_check_instance_exists] # [START bigtable_create_prod_instance] - cluster = bigtable_admin_v2.Cluster( + from google.api_core.exceptions import NotFound + from google.cloud import bigtable_admin + + client = bigtable_admin.BigtableInstanceAdminClient() + project_path = client.common_project_path(project_id) + instance_path = client.instance_path(project_id, instance_id) + + cluster = bigtable_admin.Cluster( location=client.common_location_path(project_id, "us-central1-f"), serve_nodes=1, - default_storage_type=bigtable_admin_v2.StorageType.SSD, + default_storage_type=bigtable_admin.StorageType.SSD, ) - instance_obj = bigtable_admin_v2.Instance( + instance_obj = bigtable_admin.Instance( display_name=instance_id, labels={"prod-label": "prod-label"}, - type_=bigtable_admin_v2.Instance.Type.PRODUCTION, + type_=bigtable_admin.Instance.Type.PRODUCTION, ) try: @@ -67,6 +72,11 @@ def run_instance_operations(project_id, instance_id, cluster_id): # [END bigtable_create_prod_instance] # [START bigtable_list_instances] + from google.cloud import bigtable_admin + + client = bigtable_admin.BigtableInstanceAdminClient() + project_path = client.common_project_path(project_id) + print("\nListing instances:") instances_response = client.list_instances(parent=project_path) for instance in instances_response.instances: @@ -74,11 +84,21 @@ def run_instance_operations(project_id, instance_id, cluster_id): # [END bigtable_list_instances] # [START bigtable_get_instance] + from google.cloud import bigtable_admin + + client = bigtable_admin.BigtableInstanceAdminClient() + instance_path = client.instance_path(project_id, instance_id) + inst = client.get_instance(name=instance_path) print(f"\nName of instance: {inst.display_name}\nLabels: {dict(inst.labels)}") # [END bigtable_get_instance] # [START bigtable_get_clusters] + from google.cloud import bigtable_admin + + client = bigtable_admin.BigtableInstanceAdminClient() + instance_path = client.instance_path(project_id, instance_id) + print("\nListing clusters...") clusters_response = client.list_clusters(parent=instance_path) for cluster in clusters_response.clusters: @@ -87,10 +107,13 @@ def run_instance_operations(project_id, instance_id, cluster_id): def delete_instance(project_id, instance_id): - client = bigtable_admin_v2.BigtableInstanceAdminClient() + # [START bigtable_delete_instance] + from google.api_core.exceptions import NotFound + from google.cloud import bigtable_admin + + client = bigtable_admin.BigtableInstanceAdminClient() instance_path = client.instance_path(project_id, instance_id) - # [START bigtable_delete_instance] print("\nDeleting instance") try: client.delete_instance(name=instance_path) @@ -101,20 +124,23 @@ def delete_instance(project_id, instance_id): def add_cluster(project_id, instance_id, cluster_id): - client = bigtable_admin_v2.BigtableInstanceAdminClient() + # [START bigtable_create_cluster] + from google.api_core.exceptions import NotFound + from google.cloud import bigtable_admin + + client = bigtable_admin.BigtableInstanceAdminClient() instance_path = client.instance_path(project_id, instance_id) cluster_path = client.cluster_path(project_id, instance_id, cluster_id) - # [START bigtable_create_cluster] print("\nListing clusters...") clusters_response = client.list_clusters(parent=instance_path) for cluster in clusters_response.clusters: print(cluster.name.split("/")[-1]) - new_cluster = bigtable_admin_v2.Cluster( + new_cluster = bigtable_admin.Cluster( location=client.common_location_path(project_id, "us-central1-a"), serve_nodes=1, - default_storage_type=bigtable_admin_v2.StorageType.SSD, + default_storage_type=bigtable_admin.StorageType.SSD, ) try: client.get_cluster(name=cluster_path) @@ -129,10 +155,13 @@ def add_cluster(project_id, instance_id, cluster_id): def delete_cluster(project_id, instance_id, cluster_id): - client = bigtable_admin_v2.BigtableInstanceAdminClient() + # [START bigtable_delete_cluster] + from google.api_core.exceptions import NotFound + from google.cloud import bigtable_admin + + client = bigtable_admin.BigtableInstanceAdminClient() cluster_path = client.cluster_path(project_id, instance_id, cluster_id) - # [START bigtable_delete_cluster] print("\nDeleting cluster") try: client.delete_cluster(name=cluster_path) diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py index 33302652e7c2..116ac9a5c644 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py +++ b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py @@ -22,20 +22,17 @@ import argparse -from google.protobuf import duration_pb2 - -from google.cloud import bigtable_admin_v2 - from ..utils import create_table_cm def run_table_operations(project_id, instance_id, table_id): - client = bigtable_admin_v2.BigtableTableAdminClient() - instance_path = client.instance_path(project_id, instance_id) - table_path = client.table_path(project_id, instance_id, table_id) - with create_table_cm(project_id, instance_id, table_id, verbose=False): # [START bigtable_list_tables] + from google.cloud import bigtable_admin + + client = bigtable_admin.BigtableTableAdminClient() + instance_path = client.instance_path(project_id, instance_id) + tables = client.list_tables(parent=instance_path) print("Listing tables in current project...") if tables.tables: @@ -46,12 +43,18 @@ def run_table_operations(project_id, instance_id, table_id): # [END bigtable_list_tables] # [START bigtable_create_family_gc_max_age] + from google.cloud import bigtable_admin + from google.protobuf import duration_pb2 + + client = bigtable_admin.BigtableTableAdminClient() + table_path = client.table_path(project_id, instance_id, table_id) + print("Creating column family cf1 with MaxAge GC Rule...") - max_age_rule = bigtable_admin_v2.GcRule( + max_age_rule = bigtable_admin.GcRule( max_age=duration_pb2.Duration(seconds=5 * 86400) ) - cf1 = bigtable_admin_v2.ColumnFamily(gc_rule=max_age_rule) - mod1 = bigtable_admin_v2.ModifyColumnFamiliesRequest.Modification( + cf1 = bigtable_admin.ColumnFamily(gc_rule=max_age_rule) + mod1 = bigtable_admin.ModifyColumnFamiliesRequest.Modification( id="cf1", create=cf1 ) client.modify_column_families(name=table_path, modifications=[mod1]) @@ -59,10 +62,15 @@ def run_table_operations(project_id, instance_id, table_id): # [END bigtable_create_family_gc_max_age] # [START bigtable_create_family_gc_max_versions] + from google.cloud import bigtable_admin + + client = bigtable_admin.BigtableTableAdminClient() + table_path = client.table_path(project_id, instance_id, table_id) + print("Creating column family cf2 with max versions GC rule...") - max_versions_rule = bigtable_admin_v2.GcRule(max_num_versions=2) - cf2 = bigtable_admin_v2.ColumnFamily(gc_rule=max_versions_rule) - mod2 = bigtable_admin_v2.ModifyColumnFamiliesRequest.Modification( + max_versions_rule = bigtable_admin.GcRule(max_num_versions=2) + cf2 = bigtable_admin.ColumnFamily(gc_rule=max_versions_rule) + mod2 = bigtable_admin.ModifyColumnFamiliesRequest.Modification( id="cf2", create=cf2 ) client.modify_column_families(name=table_path, modifications=[mod2]) @@ -70,19 +78,25 @@ def run_table_operations(project_id, instance_id, table_id): # [END bigtable_create_family_gc_max_versions] # [START bigtable_create_family_gc_union] + from google.cloud import bigtable_admin + from google.protobuf import duration_pb2 + + client = bigtable_admin.BigtableTableAdminClient() + table_path = client.table_path(project_id, instance_id, table_id) + print("Creating column family cf3 with union GC rule...") - union_rule = bigtable_admin_v2.GcRule( - union=bigtable_admin_v2.GcRule.Union( + union_rule = bigtable_admin.GcRule( + union=bigtable_admin.GcRule.Union( rules=[ - bigtable_admin_v2.GcRule( + bigtable_admin.GcRule( max_age=duration_pb2.Duration(seconds=5 * 86400) ), - bigtable_admin_v2.GcRule(max_num_versions=2), + bigtable_admin.GcRule(max_num_versions=2), ] ) ) - cf3 = bigtable_admin_v2.ColumnFamily(gc_rule=union_rule) - mod3 = bigtable_admin_v2.ModifyColumnFamiliesRequest.Modification( + cf3 = bigtable_admin.ColumnFamily(gc_rule=union_rule) + mod3 = bigtable_admin.ModifyColumnFamiliesRequest.Modification( id="cf3", create=cf3 ) client.modify_column_families(name=table_path, modifications=[mod3]) @@ -90,19 +104,25 @@ def run_table_operations(project_id, instance_id, table_id): # [END bigtable_create_family_gc_union] # [START bigtable_create_family_gc_intersection] + from google.cloud import bigtable_admin + from google.protobuf import duration_pb2 + + client = bigtable_admin.BigtableTableAdminClient() + table_path = client.table_path(project_id, instance_id, table_id) + print("Creating column family cf4 with Intersection GC rule...") - intersection_rule = bigtable_admin_v2.GcRule( - intersection=bigtable_admin_v2.GcRule.Intersection( + intersection_rule = bigtable_admin.GcRule( + intersection=bigtable_admin.GcRule.Intersection( rules=[ - bigtable_admin_v2.GcRule( + bigtable_admin.GcRule( max_age=duration_pb2.Duration(seconds=5 * 86400) ), - bigtable_admin_v2.GcRule(max_num_versions=2), + bigtable_admin.GcRule(max_num_versions=2), ] ) ) - cf4 = bigtable_admin_v2.ColumnFamily(gc_rule=intersection_rule) - mod4 = bigtable_admin_v2.ModifyColumnFamiliesRequest.Modification( + cf4 = bigtable_admin.ColumnFamily(gc_rule=intersection_rule) + mod4 = bigtable_admin.ModifyColumnFamiliesRequest.Modification( id="cf4", create=cf4 ) client.modify_column_families(name=table_path, modifications=[mod4]) @@ -110,23 +130,29 @@ def run_table_operations(project_id, instance_id, table_id): # [END bigtable_create_family_gc_intersection] # [START bigtable_create_family_gc_nested] + from google.cloud import bigtable_admin + from google.protobuf import duration_pb2 + + client = bigtable_admin.BigtableTableAdminClient() + table_path = client.table_path(project_id, instance_id, table_id) + print("Creating column family cf5 with a Nested GC rule...") - rule1 = bigtable_admin_v2.GcRule(max_num_versions=10) - rule2 = bigtable_admin_v2.GcRule( - intersection=bigtable_admin_v2.GcRule.Intersection( + rule1 = bigtable_admin.GcRule(max_num_versions=10) + rule2 = bigtable_admin.GcRule( + intersection=bigtable_admin.GcRule.Intersection( rules=[ - bigtable_admin_v2.GcRule( + bigtable_admin.GcRule( max_age=duration_pb2.Duration(seconds=30 * 86400) ), - bigtable_admin_v2.GcRule(max_num_versions=2), + bigtable_admin.GcRule(max_num_versions=2), ] ) ) - nested_rule = bigtable_admin_v2.GcRule( - union=bigtable_admin_v2.GcRule.Union(rules=[rule1, rule2]) + nested_rule = bigtable_admin.GcRule( + union=bigtable_admin.GcRule.Union(rules=[rule1, rule2]) ) - cf5 = bigtable_admin_v2.ColumnFamily(gc_rule=nested_rule) - mod5 = bigtable_admin_v2.ModifyColumnFamiliesRequest.Modification( + cf5 = bigtable_admin.ColumnFamily(gc_rule=nested_rule) + mod5 = bigtable_admin.ModifyColumnFamiliesRequest.Modification( id="cf5", create=cf5 ) client.modify_column_families(name=table_path, modifications=[mod5]) @@ -134,6 +160,11 @@ def run_table_operations(project_id, instance_id, table_id): # [END bigtable_create_family_gc_nested] # [START bigtable_list_column_families] + from google.cloud import bigtable_admin + + client = bigtable_admin.BigtableTableAdminClient() + table_path = client.table_path(project_id, instance_id, table_id) + print("Printing Column Family and GC Rule for all column families...") table_obj = client.get_table(name=table_path) for column_family_name, cf_obj in sorted(table_obj.column_families.items()): @@ -143,11 +174,16 @@ def run_table_operations(project_id, instance_id, table_id): # [END bigtable_list_column_families] # [START bigtable_update_gc_rule] + from google.cloud import bigtable_admin + + client = bigtable_admin.BigtableTableAdminClient() + table_path = client.table_path(project_id, instance_id, table_id) + print("Updating column family cf1 GC rule...") - updated_cf1 = bigtable_admin_v2.ColumnFamily( - gc_rule=bigtable_admin_v2.GcRule(max_num_versions=1) + updated_cf1 = bigtable_admin.ColumnFamily( + gc_rule=bigtable_admin.GcRule(max_num_versions=1) ) - mod_update = bigtable_admin_v2.ModifyColumnFamiliesRequest.Modification( + mod_update = bigtable_admin.ModifyColumnFamiliesRequest.Modification( id="cf1", update=updated_cf1 ) client.modify_column_families(name=table_path, modifications=[mod_update]) @@ -155,8 +191,13 @@ def run_table_operations(project_id, instance_id, table_id): # [END bigtable_update_gc_rule] # [START bigtable_delete_family] + from google.cloud import bigtable_admin + + client = bigtable_admin.BigtableTableAdminClient() + table_path = client.table_path(project_id, instance_id, table_id) + print("Delete a column family cf2...") - mod_delete = bigtable_admin_v2.ModifyColumnFamiliesRequest.Modification( + mod_delete = bigtable_admin.ModifyColumnFamiliesRequest.Modification( id="cf2", drop=True ) client.modify_column_families(name=table_path, modifications=[mod_delete]) @@ -165,10 +206,12 @@ def run_table_operations(project_id, instance_id, table_id): def delete_table(project_id, instance_id, table_id): - client = bigtable_admin_v2.BigtableTableAdminClient() + # [START bigtable_delete_table] + from google.cloud import bigtable_admin + + client = bigtable_admin.BigtableTableAdminClient() table_path = client.table_path(project_id, instance_id, table_id) - # [START bigtable_delete_table] print("Deleting {} table.".format(table_id)) client.delete_table(name=table_path) print("Deleted {} table.".format(table_id)) From f5e5f99cf58582dde182f8ad6b6aa2c38cf482ef Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Wed, 7 Oct 2026 14:38:05 -0700 Subject: [PATCH 15/23] add comments --- .../instanceadmin/instanceadmin.py | 14 +++++ .../admin_client/tableadmin/tableadmin.py | 59 +++++++++++++++++++ .../samples/data_client/hello/main.py | 2 + .../snippets/data_client_snippets.py | 13 ++++ 4 files changed, 88 insertions(+) diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py index 2ae2eb6798dd..c0f5b9546433 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py +++ b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py @@ -61,12 +61,14 @@ def run_instance_operations(project_id, instance_id, cluster_id): client.get_instance(name=instance_path) except NotFound: print("\nCreating an instance") + # Create instance with given options operation = client.create_instance( parent=project_path, instance_id=instance_id, instance=instance_obj, clusters={cluster_id: cluster}, ) + # Ensure the operation completes. operation.result(timeout=480) print(f"\nCreated instance: {instance_id}") # [END bigtable_create_prod_instance] @@ -149,12 +151,24 @@ def add_cluster(project_id, instance_id, cluster_id): operation = client.create_cluster( parent=instance_path, cluster_id=cluster_id, cluster=new_cluster ) + # Ensure the operation completes. operation.result(timeout=480) print(f"\nCluster created: {cluster_id}") # [END bigtable_create_cluster] def delete_cluster(project_id, instance_id, cluster_id): + """Delete the cluster + + :type project_id: str + :param project_id: Project id of the client. + + :type instance_id: str + :param instance_id: Instance of the client. + + :type cluster_id: str + :param cluster_id: Cluster id. + """ # [START bigtable_delete_cluster] from google.api_core.exceptions import NotFound from google.cloud import bigtable_admin diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py index 116ac9a5c644..225e35a6cdcc 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py +++ b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py @@ -50,6 +50,10 @@ def run_table_operations(project_id, instance_id, table_id): table_path = client.table_path(project_id, instance_id, table_id) print("Creating column family cf1 with MaxAge GC Rule...") + # Create a column family with GC policy : maximum age + # where age = current time minus cell timestamp + + # Define the GC rule to retain data with max age of 5 days max_age_rule = bigtable_admin.GcRule( max_age=duration_pb2.Duration(seconds=5 * 86400) ) @@ -68,6 +72,10 @@ def run_table_operations(project_id, instance_id, table_id): table_path = client.table_path(project_id, instance_id, table_id) print("Creating column family cf2 with max versions GC rule...") + # Create a column family with GC policy : most recent N versions + # where 1 = most recent version + + # Define the GC policy to retain only the most recent 2 versions max_versions_rule = bigtable_admin.GcRule(max_num_versions=2) cf2 = bigtable_admin.ColumnFamily(gc_rule=max_versions_rule) mod2 = bigtable_admin.ModifyColumnFamiliesRequest.Modification( @@ -85,6 +93,10 @@ def run_table_operations(project_id, instance_id, table_id): table_path = client.table_path(project_id, instance_id, table_id) print("Creating column family cf3 with union GC rule...") + # Create a column family with GC policy to drop data that matches + # at least one condition. + # Define a GC rule to drop cells older than 5 days or not the + # most recent version union_rule = bigtable_admin.GcRule( union=bigtable_admin.GcRule.Union( rules=[ @@ -111,6 +123,10 @@ def run_table_operations(project_id, instance_id, table_id): table_path = client.table_path(project_id, instance_id, table_id) print("Creating column family cf4 with Intersection GC rule...") + # Create a column family with GC policy to drop data that matches + # all conditions + # GC rule: Drop cells older than 5 days AND older than the most + # recent 2 versions intersection_rule = bigtable_admin.GcRule( intersection=bigtable_admin.GcRule.Intersection( rules=[ @@ -137,6 +153,12 @@ def run_table_operations(project_id, instance_id, table_id): table_path = client.table_path(project_id, instance_id, table_id) print("Creating column family cf5 with a Nested GC rule...") + # Create a column family with nested GC policies. + # Create a nested GC rule: + # Drop cells that are either older than the 10 recent versions + # OR + # Drop cells that are older than a month AND older than the + # 2 recent versions rule1 = bigtable_admin.GcRule(max_num_versions=10) rule2 = bigtable_admin.GcRule( intersection=bigtable_admin.GcRule.Intersection( @@ -171,6 +193,19 @@ def run_table_operations(project_id, instance_id, table_id): print("Column Family:", column_family_name) print("GC Rule:") print(cf_obj.gc_rule) + # Sample output: + # Column Family: cf4 + # GC Rule: + # intersection { + # rules { + # max_age { + # seconds: 432000 + # } + # } + # rules { + # max_num_versions: 2 + # } + # } # [END bigtable_list_column_families] # [START bigtable_update_gc_rule] @@ -180,6 +215,7 @@ def run_table_operations(project_id, instance_id, table_id): table_path = client.table_path(project_id, instance_id, table_id) print("Updating column family cf1 GC rule...") + # Update the column family cf1 to update the GC rule updated_cf1 = bigtable_admin.ColumnFamily( gc_rule=bigtable_admin.GcRule(max_num_versions=1) ) @@ -197,6 +233,7 @@ def run_table_operations(project_id, instance_id, table_id): table_path = client.table_path(project_id, instance_id, table_id) print("Delete a column family cf2...") + # Delete a column family mod_delete = bigtable_admin.ModifyColumnFamiliesRequest.Modification( id="cf2", drop=True ) @@ -204,14 +241,31 @@ def run_table_operations(project_id, instance_id, table_id): print("Column family cf2 deleted successfully.") # [END bigtable_delete_family] + print( + 'execute command "python tableadmin.py delete [project_id] \ + [instance_id] --table [tableName]" to delete the table.' + ) + def delete_table(project_id, instance_id, table_id): + """Delete bigtable. + + :type project_id: str + :param project_id: Project id of the client. + + :type instance_id: str + :param instance_id: Instance of the client. + + :type table_id: str + :param table_id: Table id to create table. + """ # [START bigtable_delete_table] from google.cloud import bigtable_admin client = bigtable_admin.BigtableTableAdminClient() table_path = client.table_path(project_id, instance_id, table_id) + # Delete the entire table print("Deleting {} table.".format(table_id)) client.delete_table(name=table_path) print("Deleted {} table.".format(table_id)) @@ -237,3 +291,8 @@ def delete_table(project_id, instance_id, table_id): run_table_operations(args.project_id, args.instance_id, args.table) elif args.command.lower() == "delete": delete_table(args.project_id, args.instance_id, args.table) + else: + print( + "Command should be either run or delete.\n Use argument -h,\ + --help to show help and exit." + ) diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/main.py b/packages/google-cloud-bigtable/samples/data_client/hello/main.py index 6cbef394e8b0..239f06ce7cbe 100644 --- a/packages/google-cloud-bigtable/samples/data_client/hello/main.py +++ b/packages/google-cloud-bigtable/samples/data_client/hello/main.py @@ -111,6 +111,8 @@ def main(project_id, instance_id, table_id): # [END bigtable_hw_scan_with_filter_data_client] finally: # [START bigtable_hw_delete_table_data_client] + # the data client only supports the data API. Table deletion is an admin operation + # use admin client to delete the table print("Deleting the {} table.".format(table_id)) admin_table.delete() client.close() diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py index 2d89ee39b049..b4e7b8bb358d 100644 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py @@ -53,6 +53,8 @@ def write_batch(project_id, instance_id, table_id): SetCell(family_id, "connected_wifi", 1), SetCell(family_id, "os_build", "12155.0.0-rc1"), ] + # batcher.append adds the RowMutationEntry to the batcher's + # queue to be written in the next flush. batcher.append( RowMutationEntry("tablet#a0b81f74#20190501", mutation_list) ) @@ -60,6 +62,8 @@ def write_batch(project_id, instance_id, table_id): RowMutationEntry("tablet#a0b81f74#20190502", mutation_list) ) except MutationsExceptionGroup as e: + # MutationsExceptionGroup contains a FailedMutationEntryError for + # each mutation that failed. for sub_exception in e.exceptions: failed_entry: RowMutationEntry = sub_exception.entry cause: Exception = sub_exception.__cause__ @@ -82,11 +86,13 @@ def write_increment(project_id, instance_id, table_id): family_id = "stats_summary" row_key = "phone#4c410523#20190501" + # Decrement the connected_wifi value by 1. increment_rule = IncrementRule( family_id, "connected_wifi", increment_amount=-1 ) result_row = table.read_modify_write_row(row_key, increment_rule) + # check result cell = result_row[0] print(f"{cell.row_key} value: {int(cell)}") @@ -135,19 +141,26 @@ def write_aggregate(table): from google.cloud.bigtable.data.mutations import AddToCell, RowMutationEntry def write_aggregate(project_id, instance_id, table_id): + """Increments a value in a Bigtable table using AddToCell mutation.""" with BigtableDataClient(project=project_id) as client: table = client.get_table(instance_id, table_id) row_key = "unique_device_ids_1" try: with table.mutations_batcher() as batcher: + # The AddToCell mutation increments the value of a cell. + # The `counters` family must be set up to be an aggregate + # family with an int64 input type. reading = AddToCell( family="counters", qualifier="odometer", value=32304, + # Convert nanoseconds to microseconds timestamp_micros=time.time_ns() // 1000, ) batcher.append(RowMutationEntry(row_key.encode("utf-8"), [reading])) except MutationsExceptionGroup as e: + # MutationsExceptionGroup contains a FailedMutationEntryError for + # each mutation that failed. for sub_exception in e.exceptions: failed_entry: RowMutationEntry = sub_exception.entry cause: Exception = sub_exception.__cause__ From 86811b354b4f2dc3fa2793b4d3bde2c4cf0fbee9 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Wed, 7 Oct 2026 14:52:33 -0700 Subject: [PATCH 16/23] data samples prefer gapic admin client --- .../samples/data_client/hello/main.py | 35 ++++++++++------ .../data_client_async/hello/async_main.py | 42 ++++++++++++------- .../google-cloud-bigtable/samples/utils.py | 13 ++++-- 3 files changed, 60 insertions(+), 30 deletions(-) diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/main.py b/packages/google-cloud-bigtable/samples/data_client/hello/main.py index 239f06ce7cbe..7efc4578a69f 100644 --- a/packages/google-cloud-bigtable/samples/data_client/hello/main.py +++ b/packages/google-cloud-bigtable/samples/data_client/hello/main.py @@ -45,30 +45,36 @@ def main(project_id, instance_id, table_id): # [END bigtable_hw_connect_data_client] # [START bigtable_hw_create_table_data_client] - from google.cloud.bigtable import column_family + from google.api_core.exceptions import AlreadyExists + from google.cloud import bigtable_admin # the data client only supports the data API. Table creation is an admin operation # use admin client to create the table print("Creating the {} table.".format(table_id)) - admin_client = bigtable.Client(project=project_id, admin=True) - admin_instance = admin_client.instance(instance_id) - admin_table = admin_instance.table(table_id) + admin_client = bigtable_admin.BigtableTableAdminClient() + instance_path = admin_client.instance_path(project_id, instance_id) print("Creating column family cf1 with Max Version GC rule...") # Create a column family with GC policy : most recent N versions # Define the GC policy to retain only the most recent 2 versions - max_versions_rule = column_family.MaxVersionsGCRule(2) - column_family_id = b"cf1" - column_families = {column_family_id: max_versions_rule} - if not admin_table.exists(): - admin_table.create(column_families=column_families) - else: + max_versions_rule = bigtable_admin.GcRule(max_num_versions=2) + column_family_id = "cf1" + column_families = { + column_family_id: bigtable_admin.ColumnFamily(gc_rule=max_versions_rule) + } + try: + admin_client.create_table( + parent=instance_path, + table_id=table_id, + table=bigtable_admin.Table(column_families=column_families), + ) + except AlreadyExists: print("Table {} already exists.".format(table_id)) # [END bigtable_hw_create_table_data_client] try: # let table creation complete - wait_for_table(admin_table) + wait_for_table(table) # [START bigtable_hw_write_rows_data_client] print("Writing some greetings to the table.") greetings = [b"Hello World!", b"Hello Cloud Bigtable!", b"Hello Python!"] @@ -111,10 +117,15 @@ def main(project_id, instance_id, table_id): # [END bigtable_hw_scan_with_filter_data_client] finally: # [START bigtable_hw_delete_table_data_client] + from google.cloud import bigtable_admin + # the data client only supports the data API. Table deletion is an admin operation # use admin client to delete the table + admin_client = bigtable_admin.BigtableTableAdminClient() + table_path = admin_client.table_path(project_id, instance_id, table_id) + print("Deleting the {} table.".format(table_id)) - admin_table.delete() + admin_client.delete_table(name=table_path) client.close() # [END bigtable_hw_delete_table_data_client] diff --git a/packages/google-cloud-bigtable/samples/data_client_async/hello/async_main.py b/packages/google-cloud-bigtable/samples/data_client_async/hello/async_main.py index c26a74faeead..2feeb3b23203 100644 --- a/packages/google-cloud-bigtable/samples/data_client_async/hello/async_main.py +++ b/packages/google-cloud-bigtable/samples/data_client_async/hello/async_main.py @@ -46,30 +46,36 @@ async def main(project_id, instance_id, table_id): # [END bigtable_async_hw_connect] # [START bigtable_async_hw_create_table] - from google.cloud.bigtable import column_family + from google.api_core.exceptions import AlreadyExists + from google.cloud import bigtable_admin - # the async client only supports the data API. Table creation as an admin operation + # the async client only supports the data API. Table creation is an admin operation # use admin client to create the table print("Creating the {} table.".format(table_id)) - admin_client = bigtable.Client(project=project_id, admin=True) - admin_instance = admin_client.instance(instance_id) - admin_table = admin_instance.table(table_id) + admin_client = bigtable_admin.BigtableTableAdminAsyncClient() + instance_path = admin_client.instance_path(project_id, instance_id) print("Creating column family cf1 with Max Version GC rule...") # Create a column family with GC policy : most recent N versions # Define the GC policy to retain only the most recent 2 versions - max_versions_rule = column_family.MaxVersionsGCRule(2) - column_family_id = b"cf1" - column_families = {column_family_id: max_versions_rule} - if not admin_table.exists(): - admin_table.create(column_families=column_families) - else: + max_versions_rule = bigtable_admin.GcRule(max_num_versions=2) + column_family_id = "cf1" + column_families = { + column_family_id: bigtable_admin.ColumnFamily(gc_rule=max_versions_rule) + } + try: + await admin_client.create_table( + parent=instance_path, + table_id=table_id, + table=bigtable_admin.Table(column_families=column_families), + ) + except AlreadyExists: print("Table {} already exists.".format(table_id)) # [END bigtable_async_hw_create_table] try: # let table creation complete - wait_for_table(admin_table) + wait_for_table(table) # [START bigtable_async_hw_write_rows] print("Writing some greetings to the table.") greetings = [b"Hello World!", b"Hello Cloud Bigtable!", b"Hello Python!"] @@ -125,10 +131,16 @@ async def main(project_id, instance_id, table_id): # [END bigtable_async_hw_scan_with_filter] finally: # [START bigtable_async_hw_delete_table] - # the async client only supports the data API. Table deletion as an admin operation - # use admin client to create the table + from google.cloud import bigtable_admin + + # the async client only supports the data API. Table deletion is an admin operation + # use admin client to delete the table + admin_client = bigtable_admin.BigtableTableAdminAsyncClient() + table_path = admin_client.table_path(project_id, instance_id, table_id) + print("Deleting the {} table.".format(table_id)) - admin_table.delete() + await admin_client.delete_table(name=table_path) + await client.close() # [END bigtable_async_hw_delete_table] diff --git a/packages/google-cloud-bigtable/samples/utils.py b/packages/google-cloud-bigtable/samples/utils.py index d093d0427cbf..e50b63fc77ea 100644 --- a/packages/google-cloud-bigtable/samples/utils.py +++ b/packages/google-cloud-bigtable/samples/utils.py @@ -17,7 +17,7 @@ from google.api_core import exceptions from google.api_core.retry import Retry, if_exception_type -from google.cloud import bigtable +from google.cloud import bigtable, bigtable_admin from google.cloud.bigtable.column_family import ColumnFamily from google.cloud.bigtable_admin_v2.types import ColumnFamily as ColumnFamily_pb @@ -101,5 +101,12 @@ def wait_for_table(table): Because this method is wrapped with an api_core.Retry decorator, it will retry with backoff if the table is not ready """ - if not table.exists(): - raise exceptions.NotFound + if hasattr(table, "exists"): + if not table.exists(): + raise exceptions.NotFound + else: + table_path = table.table_name if hasattr(table, "table_name") else str(table) + admin_client = bigtable_admin.BigtableTableAdminClient() + admin_client.get_table( + name=table_path, view=bigtable_admin.Table.View.NAME_ONLY + ) From b842e6093dffdf971fd4ac9f0b61a3b000516589 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Wed, 7 Oct 2026 15:55:10 -0700 Subject: [PATCH 17/23] fix sample nox sessions --- .../samples/data_client_async/__init__.py | 0 .../data_client_async/hello/__init__.py | 0 .../data_client_async/hello/async_main.py | 2 +- .../data_client_async/hello/noxfile.py | 292 ++++++++++ .../hello/requirements-test.txt | 1 + .../data_client_async/hello/requirements.txt | 2 + .../data_client_async/quickstart/__init__.py | 0 .../quickstart/main_async_test.py | 2 +- .../data_client_async/quickstart/noxfile.py | 292 ++++++++++ .../quickstart/requirements-test.txt | 2 + .../quickstart/requirements.txt | 1 + .../snippets/snapshots/__init__.py | 0 .../snippets/snapshots/snap_filters_test.py | 503 ++++++++++++++++++ .../samples/legacy_client/__init__.py | 0 .../beam/hello_world_write_test.py | 2 +- .../samples/legacy_client/hello/main.py | 2 +- .../legacy_client/hello_happybase/main.py | 2 +- .../legacy_client/instanceadmin/__init__.py | 0 .../legacy_client/metricscaler/__init__.py | 0 .../legacy_client/quickstart/main_test.py | 2 +- .../quickstart_happybase/main_test.py | 2 +- .../snippets/deletes/deletes_test.py | 2 +- .../snippets/filters/filters_test.py | 2 +- .../snippets/reads/reads_test.py | 2 +- .../snippets/writes/writes_test.py | 2 +- .../legacy_client/tableadmin/tableadmin.py | 2 +- .../tableadmin/tableadmin_test.py | 2 +- .../google-cloud-bigtable/samples/utils.py | 15 + 28 files changed, 1121 insertions(+), 13 deletions(-) create mode 100644 packages/google-cloud-bigtable/samples/data_client_async/__init__.py create mode 100644 packages/google-cloud-bigtable/samples/data_client_async/hello/__init__.py create mode 100644 packages/google-cloud-bigtable/samples/data_client_async/hello/noxfile.py create mode 100644 packages/google-cloud-bigtable/samples/data_client_async/hello/requirements-test.txt create mode 100644 packages/google-cloud-bigtable/samples/data_client_async/hello/requirements.txt create mode 100644 packages/google-cloud-bigtable/samples/data_client_async/quickstart/__init__.py create mode 100644 packages/google-cloud-bigtable/samples/data_client_async/quickstart/noxfile.py create mode 100644 packages/google-cloud-bigtable/samples/data_client_async/quickstart/requirements-test.txt create mode 100644 packages/google-cloud-bigtable/samples/data_client_async/quickstart/requirements.txt create mode 100644 packages/google-cloud-bigtable/samples/data_client_async/snippets/snapshots/__init__.py create mode 100644 packages/google-cloud-bigtable/samples/data_client_async/snippets/snapshots/snap_filters_test.py create mode 100644 packages/google-cloud-bigtable/samples/legacy_client/__init__.py create mode 100644 packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/__init__.py create mode 100644 packages/google-cloud-bigtable/samples/legacy_client/metricscaler/__init__.py diff --git a/packages/google-cloud-bigtable/samples/data_client_async/__init__.py b/packages/google-cloud-bigtable/samples/data_client_async/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-bigtable/samples/data_client_async/hello/__init__.py b/packages/google-cloud-bigtable/samples/data_client_async/hello/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-bigtable/samples/data_client_async/hello/async_main.py b/packages/google-cloud-bigtable/samples/data_client_async/hello/async_main.py index c26a74faeead..8b1e6bf49aa0 100644 --- a/packages/google-cloud-bigtable/samples/data_client_async/hello/async_main.py +++ b/packages/google-cloud-bigtable/samples/data_client_async/hello/async_main.py @@ -31,7 +31,7 @@ from google.cloud import bigtable from google.cloud.bigtable.data import row_filters -from ..utils import wait_for_table +from ...utils import wait_for_table # [END bigtable_async_hw_imports] diff --git a/packages/google-cloud-bigtable/samples/data_client_async/hello/noxfile.py b/packages/google-cloud-bigtable/samples/data_client_async/hello/noxfile.py new file mode 100644 index 000000000000..a2a659dcca04 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client_async/hello/noxfile.py @@ -0,0 +1,292 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import glob +import os +import sys +from pathlib import Path +from typing import Callable, Dict, Optional + +import nox + +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING +# DO NOT EDIT THIS FILE EVER! +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING + +BLACK_VERSION = "black==22.3.0" +ISORT_VERSION = "isort==5.10.1" + +# Copy `noxfile_config.py` to your directory and modify it instead. + +# `TEST_CONFIG` dict is a configuration hook that allows users to +# modify the test configurations. The values here should be in sync +# with `noxfile_config.py`. Users will copy `noxfile_config.py` into +# their directory and modify it. + +TEST_CONFIG = { + # You can opt out from the test for specific Python versions. + "ignored_versions": [], + # Old samples are opted out of enforcing Python type hints + # All new samples should feature them + "enforce_type_hints": False, + # An envvar key for determining the project id to use. Change it + # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a + # build specific Cloud project. You can also use your own string + # to use your own Cloud project. + "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", + # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', + # If you need to use a specific version of pip, + # change pip_version_override to the string representation + # of the version number, for example, "20.2.4" + "pip_version_override": None, + # A dictionary you want to inject into your test. Don't put any + # secrets here. These values will override predefined values. + "envs": {}, +} + + +try: + # Ensure we can import noxfile_config in the project's directory. + sys.path.append(".") + from noxfile_config import TEST_CONFIG_OVERRIDE +except ImportError as e: + print("No user noxfile_config found: detail: {}".format(e)) + TEST_CONFIG_OVERRIDE = {} + +# Update the TEST_CONFIG with the user supplied values. +TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) + + +def get_pytest_env_vars() -> Dict[str, str]: + """Returns a dict for pytest invocation.""" + ret = {} + + # Override the GCLOUD_PROJECT and the alias. + env_key = TEST_CONFIG["gcloud_project_env"] + # This should error out if not set. + ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] + + # Apply user supplied envs. + ret.update(TEST_CONFIG["envs"]) + return ret + + +# DO NOT EDIT - automatically generated. +# All versions used to test samples. +ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] + +# Any default versions that should be ignored. +IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] + +TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) + +INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( + "True", + "true", +) + +# Error if a python version is missing +nox.options.error_on_missing_interpreters = True + +# +# Style Checks +# + + +# Linting with flake8. +# +# We ignore the following rules: +# E203: whitespace before ‘:’ +# E266: too many leading ‘#’ for block comment +# E501: line too long +# I202: Additional newline in a section of imports +# +# We also need to specify the rules which are ignored by default: +# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] +FLAKE8_COMMON_ARGS = [ + "--show-source", + "--builtin=gettext", + "--max-complexity=20", + "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", + "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", + "--max-line-length=88", +] + + +@nox.session +def lint(session: nox.sessions.Session) -> None: + if not TEST_CONFIG["enforce_type_hints"]: + session.install("flake8") + else: + session.install("flake8", "flake8-annotations") + + args = FLAKE8_COMMON_ARGS + [ + ".", + ] + session.run("flake8", *args) + + +# +# Black +# + + +@nox.session +def blacken(session: nox.sessions.Session) -> None: + """Run black. Format code to uniform standard.""" + session.install(BLACK_VERSION) + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + session.run("black", *python_files) + + +# +# format = isort + black +# + + +@nox.session +def format(session: nox.sessions.Session) -> None: + """ + Run isort to sort imports. Then run black + to format code to uniform standard. + """ + session.install(BLACK_VERSION, ISORT_VERSION) + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + # Use the --fss option to sort imports using strict alphabetical order. + # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections + session.run("isort", "--fss", *python_files) + session.run("black", *python_files) + + +# +# Sample Tests +# + + +PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] + + +def _session_tests( + session: nox.sessions.Session, post_install: Callable = None +) -> None: + # check for presence of tests + test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( + "**/test_*.py", recursive=True + ) + test_list.extend(glob.glob("**/tests", recursive=True)) + + if len(test_list) == 0: + print("No tests found, skipping directory.") + return + + if TEST_CONFIG["pip_version_override"]: + pip_version = TEST_CONFIG["pip_version_override"] + session.install(f"pip=={pip_version}") + """Runs py.test for a particular project.""" + concurrent_args = [] + if os.path.exists("requirements.txt"): + if os.path.exists("constraints.txt"): + session.install("-r", "requirements.txt", "-c", "constraints.txt") + else: + session.install("-r", "requirements.txt") + with open("requirements.txt") as rfile: + packages = rfile.read() + + if os.path.exists("requirements-test.txt"): + if os.path.exists("constraints-test.txt"): + session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") + else: + session.install("-r", "requirements-test.txt") + with open("requirements-test.txt") as rtfile: + packages += rtfile.read() + + if INSTALL_LIBRARY_FROM_SOURCE: + session.install("-e", _get_repo_root()) + + if post_install: + post_install(session) + + if "pytest-parallel" in packages: + concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) + elif "pytest-xdist" in packages: + concurrent_args.extend(["-n", "auto"]) + + session.run( + "pytest", + *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), + # Pytest will return 5 when no tests are collected. This can happen + # on travis where slow and flaky tests are excluded. + # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html + success_codes=[0, 5], + env=get_pytest_env_vars(), + ) + + +@nox.session(python=ALL_VERSIONS) +def py(session: nox.sessions.Session) -> None: + """Runs py.test for a sample using the specified version of Python.""" + if session.python in TESTED_VERSIONS: + _session_tests(session) + else: + session.skip( + "SKIPPED: {} tests are disabled for this sample.".format(session.python) + ) + + +# +# Readmegen +# + + +def _get_repo_root() -> Optional[str]: + """Returns the root folder of the project.""" + # Get root of this repository. Assume we don't have directories nested deeper than 10 items. + p = Path(os.getcwd()) + for i in range(10): + if p is None: + break + if Path(p / ".git").exists(): + return str(p) + # .git is not available in repos cloned via Cloud Build + # setup.py is always in the library's root, so use that instead + # https://github.com/googleapis/synthtool/issues/792 + if Path(p / "setup.py").exists(): + return str(p) + p = p.parent + raise Exception("Unable to detect repository root.") + + +GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) + + +@nox.session +@nox.parametrize("path", GENERATED_READMES) +def readmegen(session: nox.sessions.Session, path: str) -> None: + """(Re-)generates the readme for a sample.""" + session.install("jinja2", "pyyaml") + dir_ = os.path.dirname(path) + + if os.path.exists(os.path.join(dir_, "requirements.txt")): + session.install("-r", os.path.join(dir_, "requirements.txt")) + + in_file = os.path.join(dir_, "README.rst.in") + session.run( + "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file + ) diff --git a/packages/google-cloud-bigtable/samples/data_client_async/hello/requirements-test.txt b/packages/google-cloud-bigtable/samples/data_client_async/hello/requirements-test.txt new file mode 100644 index 000000000000..e079f8a6038d --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client_async/hello/requirements-test.txt @@ -0,0 +1 @@ +pytest diff --git a/packages/google-cloud-bigtable/samples/data_client_async/hello/requirements.txt b/packages/google-cloud-bigtable/samples/data_client_async/hello/requirements.txt new file mode 100644 index 000000000000..5113ca7f17bb --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client_async/hello/requirements.txt @@ -0,0 +1,2 @@ +google-cloud-bigtable==2.35.0 +google-cloud-core==2.5.0 diff --git a/packages/google-cloud-bigtable/samples/data_client_async/quickstart/__init__.py b/packages/google-cloud-bigtable/samples/data_client_async/quickstart/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-bigtable/samples/data_client_async/quickstart/main_async_test.py b/packages/google-cloud-bigtable/samples/data_client_async/quickstart/main_async_test.py index a67c0d095ba0..434d9b946968 100644 --- a/packages/google-cloud-bigtable/samples/data_client_async/quickstart/main_async_test.py +++ b/packages/google-cloud-bigtable/samples/data_client_async/quickstart/main_async_test.py @@ -21,7 +21,7 @@ from google.cloud.bigtable.data import BigtableDataClientAsync, SetCell -from ..utils import create_table_cm +from ...utils import create_table_cm from .main_async import main PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] diff --git a/packages/google-cloud-bigtable/samples/data_client_async/quickstart/noxfile.py b/packages/google-cloud-bigtable/samples/data_client_async/quickstart/noxfile.py new file mode 100644 index 000000000000..a2a659dcca04 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client_async/quickstart/noxfile.py @@ -0,0 +1,292 @@ +# Copyright 2026 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import glob +import os +import sys +from pathlib import Path +from typing import Callable, Dict, Optional + +import nox + +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING +# DO NOT EDIT THIS FILE EVER! +# WARNING - WARNING - WARNING - WARNING - WARNING +# WARNING - WARNING - WARNING - WARNING - WARNING + +BLACK_VERSION = "black==22.3.0" +ISORT_VERSION = "isort==5.10.1" + +# Copy `noxfile_config.py` to your directory and modify it instead. + +# `TEST_CONFIG` dict is a configuration hook that allows users to +# modify the test configurations. The values here should be in sync +# with `noxfile_config.py`. Users will copy `noxfile_config.py` into +# their directory and modify it. + +TEST_CONFIG = { + # You can opt out from the test for specific Python versions. + "ignored_versions": [], + # Old samples are opted out of enforcing Python type hints + # All new samples should feature them + "enforce_type_hints": False, + # An envvar key for determining the project id to use. Change it + # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a + # build specific Cloud project. You can also use your own string + # to use your own Cloud project. + "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", + # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', + # If you need to use a specific version of pip, + # change pip_version_override to the string representation + # of the version number, for example, "20.2.4" + "pip_version_override": None, + # A dictionary you want to inject into your test. Don't put any + # secrets here. These values will override predefined values. + "envs": {}, +} + + +try: + # Ensure we can import noxfile_config in the project's directory. + sys.path.append(".") + from noxfile_config import TEST_CONFIG_OVERRIDE +except ImportError as e: + print("No user noxfile_config found: detail: {}".format(e)) + TEST_CONFIG_OVERRIDE = {} + +# Update the TEST_CONFIG with the user supplied values. +TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) + + +def get_pytest_env_vars() -> Dict[str, str]: + """Returns a dict for pytest invocation.""" + ret = {} + + # Override the GCLOUD_PROJECT and the alias. + env_key = TEST_CONFIG["gcloud_project_env"] + # This should error out if not set. + ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] + + # Apply user supplied envs. + ret.update(TEST_CONFIG["envs"]) + return ret + + +# DO NOT EDIT - automatically generated. +# All versions used to test samples. +ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] + +# Any default versions that should be ignored. +IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] + +TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) + +INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( + "True", + "true", +) + +# Error if a python version is missing +nox.options.error_on_missing_interpreters = True + +# +# Style Checks +# + + +# Linting with flake8. +# +# We ignore the following rules: +# E203: whitespace before ‘:’ +# E266: too many leading ‘#’ for block comment +# E501: line too long +# I202: Additional newline in a section of imports +# +# We also need to specify the rules which are ignored by default: +# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] +FLAKE8_COMMON_ARGS = [ + "--show-source", + "--builtin=gettext", + "--max-complexity=20", + "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", + "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", + "--max-line-length=88", +] + + +@nox.session +def lint(session: nox.sessions.Session) -> None: + if not TEST_CONFIG["enforce_type_hints"]: + session.install("flake8") + else: + session.install("flake8", "flake8-annotations") + + args = FLAKE8_COMMON_ARGS + [ + ".", + ] + session.run("flake8", *args) + + +# +# Black +# + + +@nox.session +def blacken(session: nox.sessions.Session) -> None: + """Run black. Format code to uniform standard.""" + session.install(BLACK_VERSION) + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + session.run("black", *python_files) + + +# +# format = isort + black +# + + +@nox.session +def format(session: nox.sessions.Session) -> None: + """ + Run isort to sort imports. Then run black + to format code to uniform standard. + """ + session.install(BLACK_VERSION, ISORT_VERSION) + python_files = [path for path in os.listdir(".") if path.endswith(".py")] + + # Use the --fss option to sort imports using strict alphabetical order. + # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections + session.run("isort", "--fss", *python_files) + session.run("black", *python_files) + + +# +# Sample Tests +# + + +PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] + + +def _session_tests( + session: nox.sessions.Session, post_install: Callable = None +) -> None: + # check for presence of tests + test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( + "**/test_*.py", recursive=True + ) + test_list.extend(glob.glob("**/tests", recursive=True)) + + if len(test_list) == 0: + print("No tests found, skipping directory.") + return + + if TEST_CONFIG["pip_version_override"]: + pip_version = TEST_CONFIG["pip_version_override"] + session.install(f"pip=={pip_version}") + """Runs py.test for a particular project.""" + concurrent_args = [] + if os.path.exists("requirements.txt"): + if os.path.exists("constraints.txt"): + session.install("-r", "requirements.txt", "-c", "constraints.txt") + else: + session.install("-r", "requirements.txt") + with open("requirements.txt") as rfile: + packages = rfile.read() + + if os.path.exists("requirements-test.txt"): + if os.path.exists("constraints-test.txt"): + session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") + else: + session.install("-r", "requirements-test.txt") + with open("requirements-test.txt") as rtfile: + packages += rtfile.read() + + if INSTALL_LIBRARY_FROM_SOURCE: + session.install("-e", _get_repo_root()) + + if post_install: + post_install(session) + + if "pytest-parallel" in packages: + concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) + elif "pytest-xdist" in packages: + concurrent_args.extend(["-n", "auto"]) + + session.run( + "pytest", + *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), + # Pytest will return 5 when no tests are collected. This can happen + # on travis where slow and flaky tests are excluded. + # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html + success_codes=[0, 5], + env=get_pytest_env_vars(), + ) + + +@nox.session(python=ALL_VERSIONS) +def py(session: nox.sessions.Session) -> None: + """Runs py.test for a sample using the specified version of Python.""" + if session.python in TESTED_VERSIONS: + _session_tests(session) + else: + session.skip( + "SKIPPED: {} tests are disabled for this sample.".format(session.python) + ) + + +# +# Readmegen +# + + +def _get_repo_root() -> Optional[str]: + """Returns the root folder of the project.""" + # Get root of this repository. Assume we don't have directories nested deeper than 10 items. + p = Path(os.getcwd()) + for i in range(10): + if p is None: + break + if Path(p / ".git").exists(): + return str(p) + # .git is not available in repos cloned via Cloud Build + # setup.py is always in the library's root, so use that instead + # https://github.com/googleapis/synthtool/issues/792 + if Path(p / "setup.py").exists(): + return str(p) + p = p.parent + raise Exception("Unable to detect repository root.") + + +GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) + + +@nox.session +@nox.parametrize("path", GENERATED_READMES) +def readmegen(session: nox.sessions.Session, path: str) -> None: + """(Re-)generates the readme for a sample.""" + session.install("jinja2", "pyyaml") + dir_ = os.path.dirname(path) + + if os.path.exists(os.path.join(dir_, "requirements.txt")): + session.install("-r", os.path.join(dir_, "requirements.txt")) + + in_file = os.path.join(dir_, "README.rst.in") + session.run( + "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file + ) diff --git a/packages/google-cloud-bigtable/samples/data_client_async/quickstart/requirements-test.txt b/packages/google-cloud-bigtable/samples/data_client_async/quickstart/requirements-test.txt new file mode 100644 index 000000000000..ee4ba018603b --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client_async/quickstart/requirements-test.txt @@ -0,0 +1,2 @@ +pytest +pytest-asyncio diff --git a/packages/google-cloud-bigtable/samples/data_client_async/quickstart/requirements.txt b/packages/google-cloud-bigtable/samples/data_client_async/quickstart/requirements.txt new file mode 100644 index 000000000000..730d25dec63f --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client_async/quickstart/requirements.txt @@ -0,0 +1 @@ +google-cloud-bigtable==2.35.0 diff --git a/packages/google-cloud-bigtable/samples/data_client_async/snippets/snapshots/__init__.py b/packages/google-cloud-bigtable/samples/data_client_async/snippets/snapshots/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-bigtable/samples/data_client_async/snippets/snapshots/snap_filters_test.py b/packages/google-cloud-bigtable/samples/data_client_async/snippets/snapshots/snap_filters_test.py new file mode 100644 index 000000000000..0547ddddd858 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/data_client_async/snippets/snapshots/snap_filters_test.py @@ -0,0 +1,503 @@ +# -*- coding: utf-8 -*- +# this was previously implemented using the `snapshottest` package (https://goo.gl/zC4yUc), +# which is not compatible with Python 3.12. So we moved to a standard dictionary storing +# expected outputs for each test +from __future__ import unicode_literals + +snapshots = {} + +snapshots["test_filter_limit_row_regex"] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: false @2019-05-01 00:00:00+00:00 +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_limit_cells_per_col" +] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: false @2019-05-01 00:00:00+00:00 +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_limit_cells_per_row" +] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: false @2019-05-01 00:00:00+00:00 +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_limit_cells_per_row_offset" +] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family stats_summary +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family stats_summary +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family stats_summary +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family stats_summary +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_limit_col_family_regex" +] = """Reading data for phone#4c410523#20190501: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_limit_col_qualifier_regex" +] = """Reading data for phone#4c410523#20190501: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 + +""" + +snapshots["test_filter_limit_col_range"] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: false @2019-05-01 00:00:00+00:00 +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_limit_value_range" +] = """Reading data for phone#4c410523#20190501: +Column Family stats_summary +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family stats_summary +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_limit_value_regex" +] = """Reading data for phone#4c410523#20190501: +Column Family stats_summary +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family stats_summary +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family stats_summary +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family stats_summary +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family stats_summary +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_limit_timestamp_range" +] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 + +""" + +snapshots["test_filter_limit_block_all"] = "" + +snapshots["test_filter_limit_pass_all"] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: false @2019-05-01 00:00:00+00:00 +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_modify_strip_value" +] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: @2019-05-01 00:00:00+00:00 +\tdata_plan_01gb: @2019-04-30 23:00:00+00:00 +\tdata_plan_05gb: @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: @2019-05-01 00:00:00+00:00 +\tconnected_wifi: @2019-05-01 00:00:00+00:00 +\tos_build: @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: @2019-05-01 00:00:00+00:00 +\tconnected_wifi: @2019-05-01 00:00:00+00:00 +\tos_build: @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: @2019-05-01 00:00:00+00:00 +\tconnected_wifi: @2019-05-01 00:00:00+00:00 +\tos_build: @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: @2019-05-01 00:00:00+00:00 +\tconnected_wifi: @2019-05-01 00:00:00+00:00 +\tos_build: @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family cell_plan +\tdata_plan_10gb: @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tconnected_cell: @2019-05-01 00:00:00+00:00 +\tconnected_wifi: @2019-05-01 00:00:00+00:00 +\tos_build: @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_modify_apply_label" +] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: false @2019-05-01 00:00:00+00:00 [labelled] +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 [labelled] +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 [labelled] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [labelled] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [labelled] +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 [labelled] + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 [labelled] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [labelled] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [labelled] +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 [labelled] + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 [labelled] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 [labelled] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [labelled] +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 [labelled] + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 [labelled] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [labelled] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [labelled] +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 [labelled] + +Reading data for phone#5c10102#20190502: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 [labelled] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [labelled] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 [labelled] +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 [labelled] + +""" + +snapshots["test_filter_composing_chain"] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: false @2019-05-01 00:00:00+00:00 +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_composing_interleave" +] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 + +Reading data for phone#5c10102#20190502: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 +Column Family stats_summary +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 + +""" + +snapshots[ + "test_filter_composing_condition" +] = """Reading data for phone#4c410523#20190501: +Column Family cell_plan +\tdata_plan_01gb: false @2019-05-01 00:00:00+00:00 [filtered-out] +\tdata_plan_01gb: true @2019-04-30 23:00:00+00:00 [filtered-out] +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 [filtered-out] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [filtered-out] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [filtered-out] +\tos_build: PQ2A.190405.003 @2019-05-01 00:00:00+00:00 [filtered-out] + +Reading data for phone#4c410523#20190502: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 [filtered-out] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [filtered-out] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [filtered-out] +\tos_build: PQ2A.190405.004 @2019-05-01 00:00:00+00:00 [filtered-out] + +Reading data for phone#4c410523#20190505: +Column Family cell_plan +\tdata_plan_05gb: true @2019-05-01 00:00:00+00:00 [filtered-out] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 [filtered-out] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [filtered-out] +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 [filtered-out] + +Reading data for phone#5c10102#20190501: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 [passed-filter] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [passed-filter] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [passed-filter] +\tos_build: PQ2A.190401.002 @2019-05-01 00:00:00+00:00 [passed-filter] + +Reading data for phone#5c10102#20190502: +Column Family cell_plan +\tdata_plan_10gb: true @2019-05-01 00:00:00+00:00 [passed-filter] +Column Family stats_summary +\tconnected_cell: \x00\x00\x00\x00\x00\x00\x00\x01 @2019-05-01 00:00:00+00:00 [passed-filter] +\tconnected_wifi: \x00\x00\x00\x00\x00\x00\x00\x00 @2019-05-01 00:00:00+00:00 [passed-filter] +\tos_build: PQ2A.190406.000 @2019-05-01 00:00:00+00:00 [passed-filter] + +""" diff --git a/packages/google-cloud-bigtable/samples/legacy_client/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-bigtable/samples/legacy_client/beam/hello_world_write_test.py b/packages/google-cloud-bigtable/samples/legacy_client/beam/hello_world_write_test.py index 82490ec7855e..8a2b6aed1717 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/beam/hello_world_write_test.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/beam/hello_world_write_test.py @@ -16,7 +16,7 @@ import pytest -from ..utils import create_table_cm +from ...utils import create_table_cm from . import hello_world_write PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] diff --git a/packages/google-cloud-bigtable/samples/legacy_client/hello/main.py b/packages/google-cloud-bigtable/samples/legacy_client/hello/main.py index 13899a87425b..c971280b9f77 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/hello/main.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/hello/main.py @@ -32,7 +32,7 @@ from google.cloud import bigtable from google.cloud.bigtable import column_family, row_filters -from ..utils import wait_for_table +from ...utils import wait_for_table # [END bigtable_hw_imports] diff --git a/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/main.py b/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/main.py index 54099a1fa630..e9396ee2f75e 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/main.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/main.py @@ -29,7 +29,7 @@ # [START bigtable_hw_imports_happybase] from google.cloud import bigtable, happybase -from ..utils import wait_for_table +from ...utils import wait_for_table # [END bigtable_hw_imports_happybase] diff --git a/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-bigtable/samples/legacy_client/quickstart/main_test.py b/packages/google-cloud-bigtable/samples/legacy_client/quickstart/main_test.py index 88419abd7ec4..a238b0e873ec 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/quickstart/main_test.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/quickstart/main_test.py @@ -17,7 +17,7 @@ import pytest -from ..utils import create_table_cm +from ...utils import create_table_cm from .main import main PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] diff --git a/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/main_test.py b/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/main_test.py index 0f0d1ecf5f5f..8e40cc07f722 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/main_test.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/main_test.py @@ -17,7 +17,7 @@ import pytest -from ..utils import create_table_cm +from ...utils import create_table_cm from .main import main PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/deletes_test.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/deletes_test.py index a683df541309..94416807d8fd 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/deletes_test.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/deletes_test.py @@ -20,7 +20,7 @@ import pytest -from ...utils import create_table_cm +from ....utils import create_table_cm from . import deletes_snippets PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/filters_test.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/filters_test.py index c5d780c90e80..479d12d261e4 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/filters_test.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/filters_test.py @@ -20,7 +20,7 @@ import pytest -from ...utils import create_table_cm +from ....utils import create_table_cm from . import filter_snippets from .snapshots.snap_filters_test import snapshots diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/reads_test.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/reads_test.py index 251141954955..7beda28f9ad0 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/reads_test.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/reads_test.py @@ -18,7 +18,7 @@ import pytest -from ...utils import create_table_cm +from ....utils import create_table_cm from . import read_snippets from .snapshots.snap_reads_test import snapshots diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/writes_test.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/writes_test.py index 663122d3e783..25fe4a35443e 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/writes_test.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/writes_test.py @@ -19,7 +19,7 @@ import pytest from google.api_core.exceptions import DeadlineExceeded -from ...utils import create_table_cm +from ....utils import create_table_cm from .write_batch import write_batch from .write_conditionally import write_conditional from .write_increment import write_increment diff --git a/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/tableadmin.py b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/tableadmin.py index d62cfa3328b0..a9b8446db7e5 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/tableadmin.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/tableadmin.py @@ -36,7 +36,7 @@ from google.cloud import bigtable from google.cloud.bigtable import column_family -from ..utils import create_table_cm +from ...utils import create_table_cm def run_table_operations(project_id, instance_id, table_id): diff --git a/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/tableadmin_test.py b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/tableadmin_test.py index 1c4cc41a1964..4213a1bdb237 100755 --- a/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/tableadmin_test.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/tableadmin_test.py @@ -19,7 +19,7 @@ from google.api_core import exceptions from test_utils.retry import RetryErrors -from ..utils import create_table_cm +from ...utils import create_table_cm from .tableadmin import delete_table, run_table_operations PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] diff --git a/packages/google-cloud-bigtable/samples/utils.py b/packages/google-cloud-bigtable/samples/utils.py index d093d0427cbf..4a307946934e 100644 --- a/packages/google-cloud-bigtable/samples/utils.py +++ b/packages/google-cloud-bigtable/samples/utils.py @@ -101,5 +101,20 @@ def wait_for_table(table): Because this method is wrapped with an api_core.Retry decorator, it will retry with backoff if the table is not ready """ +<<<<<<< Updated upstream if not table.exists(): raise exceptions.NotFound +======= + if hasattr(table, "exists"): + if not table.exists(): + raise exceptions.NotFound + else: + table_path = table.table_name if hasattr(table, "table_name") else str(table) + admin_client = bigtable_admin.BigtableTableAdminClient() + admin_client.get_table( + request={ + "name": table_path, + "view": bigtable_admin.Table.View.NAME_ONLY, + } + ) +>>>>>>> Stashed changes From 6f13a523933413dd84ed41483814d5b98a7242c8 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Wed, 7 Oct 2026 16:02:02 -0700 Subject: [PATCH 18/23] fixed merge issue --- .../legacy_client/instanceadmin/__init__.py | 0 .../legacy_client/metricscaler/__init__.py | 0 packages/google-cloud-bigtable/samples/utils.py | 15 --------------- 3 files changed, 15 deletions(-) delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/__init__.py delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/metricscaler/__init__.py diff --git a/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/packages/google-cloud-bigtable/samples/utils.py b/packages/google-cloud-bigtable/samples/utils.py index 4a307946934e..d093d0427cbf 100644 --- a/packages/google-cloud-bigtable/samples/utils.py +++ b/packages/google-cloud-bigtable/samples/utils.py @@ -101,20 +101,5 @@ def wait_for_table(table): Because this method is wrapped with an api_core.Retry decorator, it will retry with backoff if the table is not ready """ -<<<<<<< Updated upstream if not table.exists(): raise exceptions.NotFound -======= - if hasattr(table, "exists"): - if not table.exists(): - raise exceptions.NotFound - else: - table_path = table.table_name if hasattr(table, "table_name") else str(table) - admin_client = bigtable_admin.BigtableTableAdminClient() - admin_client.get_table( - request={ - "name": table_path, - "view": bigtable_admin.Table.View.NAME_ONLY, - } - ) ->>>>>>> Stashed changes From 0193f8c6dd3751ce1a00a998bf1d50f2b02e02be Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Wed, 7 Oct 2026 16:31:52 -0700 Subject: [PATCH 19/23] trigger samples tests from main noxfile --- .../bigtable-integration.yaml | 31 ++ packages/google-cloud-bigtable/noxfile.py | 31 ++ .../data_client_async/hello/noxfile.py | 292 ------------------ .../data_client_async/quickstart/noxfile.py | 292 ------------------ .../data_client_async/snippets/noxfile.py | 292 ------------------ .../samples/legacy_client/beam/noxfile.py | 290 ----------------- .../legacy_client/beam/noxfile_config.py | 45 --- .../samples/legacy_client/hello/noxfile.py | 292 ------------------ .../legacy_client/hello_happybase/noxfile.py | 292 ------------------ .../legacy_client/instanceadmin/__init__.py | 0 .../legacy_client/instanceadmin/noxfile.py | 292 ------------------ .../legacy_client/metricscaler/__init__.py | 0 .../legacy_client/metricscaler/noxfile.py | 292 ------------------ .../metricscaler/noxfile_config.py | 39 --- .../legacy_client/quickstart/noxfile.py | 292 ------------------ .../quickstart_happybase/noxfile.py | 292 ------------------ .../legacy_client/snippets/deletes/noxfile.py | 292 ------------------ .../legacy_client/snippets/filters/noxfile.py | 292 ------------------ .../legacy_client/snippets/reads/noxfile.py | 292 ------------------ .../legacy_client/snippets/writes/noxfile.py | 292 ------------------ .../legacy_client/tableadmin/noxfile.py | 292 ------------------ 21 files changed, 62 insertions(+), 4462 deletions(-) delete mode 100644 packages/google-cloud-bigtable/samples/data_client_async/hello/noxfile.py delete mode 100644 packages/google-cloud-bigtable/samples/data_client_async/quickstart/noxfile.py delete mode 100644 packages/google-cloud-bigtable/samples/data_client_async/snippets/noxfile.py delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/beam/noxfile.py delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/beam/noxfile_config.py delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/hello/noxfile.py delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/noxfile.py create mode 100644 packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/__init__.py delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/noxfile.py create mode 100644 packages/google-cloud-bigtable/samples/legacy_client/metricscaler/__init__.py delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/metricscaler/noxfile.py delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/metricscaler/noxfile_config.py delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/quickstart/noxfile.py delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/noxfile.py delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/noxfile.py delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/noxfile.py delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/noxfile.py delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/noxfile.py delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/tableadmin/noxfile.py diff --git a/.librarian/generator-input/client-post-processing/bigtable-integration.yaml b/.librarian/generator-input/client-post-processing/bigtable-integration.yaml index 2ff18605f256..c49d3bd90c82 100644 --- a/.librarian/generator-input/client-post-processing/bigtable-integration.yaml +++ b/.librarian/generator-input/client-post-processing/bigtable-integration.yaml @@ -746,6 +746,37 @@ replacements: ) + @nox.session(python=DEFAULT_PYTHON_VERSION) + def samples(session): + """Run the sample test suite.""" + req_files = [ + str(p.relative_to(CURRENT_DIRECTORY)) + for p in sorted(CURRENT_DIRECTORY.glob("samples/**/requirements.txt")) + if "beam" not in p.parts + ] + req_args = [arg for req_file in req_files for arg in ("-r", req_file)] + session.install("-e", ".") + session.install( + "google-cloud-testutils", + "mock", + "pytest", + "pytest-asyncio", + *req_args, + ) + session.install("-e", ".", "--no-deps") + + has_target = any(not arg.startswith("-") for arg in session.posargs) + target_paths = [] if has_target else [os.path.join("samples")] + session.run( + "py.test", + "--quiet", + f"--junitxml=samples_{session.python}_sponge_log.xml", + "--ignore=samples/legacy_client/beam", + *target_paths, + *session.posargs, + ) + + @nox.session(python=DEFAULT_PYTHON_VERSION) def cover(session): """Run the final coverage report. diff --git a/packages/google-cloud-bigtable/noxfile.py b/packages/google-cloud-bigtable/noxfile.py index f87b6a52b7cd..df86406022de 100644 --- a/packages/google-cloud-bigtable/noxfile.py +++ b/packages/google-cloud-bigtable/noxfile.py @@ -386,6 +386,37 @@ def system_default(session): ) +@nox.session(python=DEFAULT_PYTHON_VERSION) +def samples(session): + """Run the sample test suite.""" + req_files = [ + str(p.relative_to(CURRENT_DIRECTORY)) + for p in sorted(CURRENT_DIRECTORY.glob("samples/**/requirements.txt")) + if "beam" not in p.parts + ] + req_args = [arg for req_file in req_files for arg in ("-r", req_file)] + session.install("-e", ".") + session.install( + "google-cloud-testutils", + "mock", + "pytest", + "pytest-asyncio", + *req_args, + ) + session.install("-e", ".", "--no-deps") + + has_target = any(not arg.startswith("-") for arg in session.posargs) + target_paths = [] if has_target else [os.path.join("samples")] + session.run( + "py.test", + "--quiet", + f"--junitxml=samples_{session.python}_sponge_log.xml", + "--ignore=samples/legacy_client/beam", + *target_paths, + *session.posargs, + ) + + @nox.session(python=DEFAULT_PYTHON_VERSION) def cover(session): """Run the final coverage report. diff --git a/packages/google-cloud-bigtable/samples/data_client_async/hello/noxfile.py b/packages/google-cloud-bigtable/samples/data_client_async/hello/noxfile.py deleted file mode 100644 index a2a659dcca04..000000000000 --- a/packages/google-cloud-bigtable/samples/data_client_async/hello/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2026 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/data_client_async/quickstart/noxfile.py b/packages/google-cloud-bigtable/samples/data_client_async/quickstart/noxfile.py deleted file mode 100644 index a2a659dcca04..000000000000 --- a/packages/google-cloud-bigtable/samples/data_client_async/quickstart/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2026 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/data_client_async/snippets/noxfile.py b/packages/google-cloud-bigtable/samples/data_client_async/snippets/noxfile.py deleted file mode 100644 index c0e60097b353..000000000000 --- a/packages/google-cloud-bigtable/samples/data_client_async/snippets/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2019 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/legacy_client/beam/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/beam/noxfile.py deleted file mode 100644 index 1b8f66b398c9..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/beam/noxfile.py +++ /dev/null @@ -1,290 +0,0 @@ -# Copyright 2019 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -# todo(kolea2): temporary workaround to install pinned dep version -INSTALL_LIBRARY_FROM_SOURCE = False - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/legacy_client/beam/noxfile_config.py b/packages/google-cloud-bigtable/samples/legacy_client/beam/noxfile_config.py deleted file mode 100644 index 66d7bc5aca17..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/beam/noxfile_config.py +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright 2021 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Default TEST_CONFIG_OVERRIDE for python repos. - -# You can copy this file into your directory, then it will be imported from -# the noxfile.py. - -# The source of truth: -# https://github.com/GoogleCloudPlatform/python-docs-samples/blob/main/noxfile_config.py - -TEST_CONFIG_OVERRIDE = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [ - "3.7", # Beam no longer supports Python 3.7 for new releases - "3.12", # Beam not yet supported for Python 3.12 - ], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} diff --git a/packages/google-cloud-bigtable/samples/legacy_client/hello/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/hello/noxfile.py deleted file mode 100644 index c0e60097b353..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/hello/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2019 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/noxfile.py deleted file mode 100644 index c0e60097b353..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2019 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/noxfile.py deleted file mode 100644 index c0e60097b353..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2019 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/__init__.py b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/noxfile.py deleted file mode 100644 index c0e60097b353..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2019 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/noxfile_config.py b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/noxfile_config.py deleted file mode 100644 index 8a2d55bea291..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/noxfile_config.py +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright 2021 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Default TEST_CONFIG_OVERRIDE for python repos. - -# You can copy this file into your directory, then it will be imported from -# the noxfile.py. - -# The source of truth: -# https://github.com/GoogleCloudPlatform/python-docs-samples/blob/main/noxfile_config.py - -TEST_CONFIG_OVERRIDE = { - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "BUILD_SPECIFIC_GCLOUD_PROJECT", - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} diff --git a/packages/google-cloud-bigtable/samples/legacy_client/quickstart/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/quickstart/noxfile.py deleted file mode 100644 index c0e60097b353..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/quickstart/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2019 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/noxfile.py deleted file mode 100644 index c0e60097b353..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2019 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/noxfile.py deleted file mode 100644 index c0e60097b353..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2019 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/noxfile.py deleted file mode 100644 index c0e60097b353..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2019 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/noxfile.py deleted file mode 100644 index c0e60097b353..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2019 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/noxfile.py deleted file mode 100644 index c0e60097b353..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2019 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/noxfile.py b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/noxfile.py deleted file mode 100644 index c0e60097b353..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2019 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) From 0035d73e7adcf2e33a533f48b81426cded385b8c Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Wed, 7 Oct 2026 16:32:20 -0700 Subject: [PATCH 20/23] unpin bigtable version --- .../hello/requirements-test.txt | 1 - .../data_client_async/hello/requirements.txt | 2 +- .../quickstart/requirements-test.txt | 2 -- .../quickstart/requirements.txt | 2 +- .../snippets/requirements-test.txt | 2 -- .../data_client_async/snippets/requirements.txt | 2 +- .../legacy_client/beam/requirements-test.txt | 1 - .../samples/legacy_client/beam/requirements.txt | 2 +- .../legacy_client/hello/requirements-test.txt | 1 - .../samples/legacy_client/hello/requirements.txt | 2 +- .../hello_happybase/requirements-test.txt | 1 - .../instanceadmin/requirements-test.txt | 1 - .../legacy_client/instanceadmin/requirements.txt | 2 +- .../instanceadmin/test_instanceadmin.py | 3 ++- .../metricscaler/metricscaler_test.py | 16 +++++++++------- .../metricscaler/requirements-test.txt | 3 --- .../legacy_client/metricscaler/requirements.txt | 2 +- .../quickstart/requirements-test.txt | 2 -- .../legacy_client/quickstart/requirements.txt | 2 +- .../quickstart_happybase/requirements-test.txt | 1 - .../snippets/deletes/requirements-test.txt | 2 -- .../snippets/deletes/requirements.txt | 2 +- .../snippets/filters/requirements-test.txt | 2 -- .../snippets/filters/requirements.txt | 2 +- .../snippets/reads/requirements-test.txt | 1 - .../snippets/reads/requirements.txt | 2 +- .../snippets/writes/requirements-test.txt | 2 -- .../snippets/writes/requirements.txt | 2 +- .../tableadmin/requirements-test.txt | 2 -- .../legacy_client/tableadmin/requirements.txt | 2 +- 30 files changed, 24 insertions(+), 45 deletions(-) delete mode 100644 packages/google-cloud-bigtable/samples/data_client_async/hello/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/data_client_async/quickstart/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/data_client_async/snippets/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/beam/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/hello/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/metricscaler/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/quickstart/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/legacy_client/tableadmin/requirements-test.txt diff --git a/packages/google-cloud-bigtable/samples/data_client_async/hello/requirements-test.txt b/packages/google-cloud-bigtable/samples/data_client_async/hello/requirements-test.txt deleted file mode 100644 index e079f8a6038d..000000000000 --- a/packages/google-cloud-bigtable/samples/data_client_async/hello/requirements-test.txt +++ /dev/null @@ -1 +0,0 @@ -pytest diff --git a/packages/google-cloud-bigtable/samples/data_client_async/hello/requirements.txt b/packages/google-cloud-bigtable/samples/data_client_async/hello/requirements.txt index 5113ca7f17bb..35b55807c842 100644 --- a/packages/google-cloud-bigtable/samples/data_client_async/hello/requirements.txt +++ b/packages/google-cloud-bigtable/samples/data_client_async/hello/requirements.txt @@ -1,2 +1,2 @@ -google-cloud-bigtable==2.35.0 +google-cloud-bigtable google-cloud-core==2.5.0 diff --git a/packages/google-cloud-bigtable/samples/data_client_async/quickstart/requirements-test.txt b/packages/google-cloud-bigtable/samples/data_client_async/quickstart/requirements-test.txt deleted file mode 100644 index ee4ba018603b..000000000000 --- a/packages/google-cloud-bigtable/samples/data_client_async/quickstart/requirements-test.txt +++ /dev/null @@ -1,2 +0,0 @@ -pytest -pytest-asyncio diff --git a/packages/google-cloud-bigtable/samples/data_client_async/quickstart/requirements.txt b/packages/google-cloud-bigtable/samples/data_client_async/quickstart/requirements.txt index 730d25dec63f..47acfcb87fb0 100644 --- a/packages/google-cloud-bigtable/samples/data_client_async/quickstart/requirements.txt +++ b/packages/google-cloud-bigtable/samples/data_client_async/quickstart/requirements.txt @@ -1 +1 @@ -google-cloud-bigtable==2.35.0 +google-cloud-bigtable diff --git a/packages/google-cloud-bigtable/samples/data_client_async/snippets/requirements-test.txt b/packages/google-cloud-bigtable/samples/data_client_async/snippets/requirements-test.txt deleted file mode 100644 index ee4ba018603b..000000000000 --- a/packages/google-cloud-bigtable/samples/data_client_async/snippets/requirements-test.txt +++ /dev/null @@ -1,2 +0,0 @@ -pytest -pytest-asyncio diff --git a/packages/google-cloud-bigtable/samples/data_client_async/snippets/requirements.txt b/packages/google-cloud-bigtable/samples/data_client_async/snippets/requirements.txt index 730d25dec63f..47acfcb87fb0 100644 --- a/packages/google-cloud-bigtable/samples/data_client_async/snippets/requirements.txt +++ b/packages/google-cloud-bigtable/samples/data_client_async/snippets/requirements.txt @@ -1 +1 @@ -google-cloud-bigtable==2.35.0 +google-cloud-bigtable diff --git a/packages/google-cloud-bigtable/samples/legacy_client/beam/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/beam/requirements-test.txt deleted file mode 100644 index e079f8a6038d..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/beam/requirements-test.txt +++ /dev/null @@ -1 +0,0 @@ -pytest diff --git a/packages/google-cloud-bigtable/samples/legacy_client/beam/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/beam/requirements.txt index 622cacf88efe..b1e2a45e9001 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/beam/requirements.txt +++ b/packages/google-cloud-bigtable/samples/legacy_client/beam/requirements.txt @@ -1,5 +1,5 @@ apache-beam==2.60.0; python_version == '3.8' apache-beam==2.69.0; python_version == '3.9' apache-beam==2.71.0; python_version >= '3.10' -google-cloud-bigtable==2.35.0 +google-cloud-bigtable google-cloud-core==2.5.0 diff --git a/packages/google-cloud-bigtable/samples/legacy_client/hello/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/hello/requirements-test.txt deleted file mode 100644 index e079f8a6038d..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/hello/requirements-test.txt +++ /dev/null @@ -1 +0,0 @@ -pytest diff --git a/packages/google-cloud-bigtable/samples/legacy_client/hello/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/hello/requirements.txt index 5113ca7f17bb..35b55807c842 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/hello/requirements.txt +++ b/packages/google-cloud-bigtable/samples/legacy_client/hello/requirements.txt @@ -1,2 +1,2 @@ -google-cloud-bigtable==2.35.0 +google-cloud-bigtable google-cloud-core==2.5.0 diff --git a/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/requirements-test.txt deleted file mode 100644 index e079f8a6038d..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/hello_happybase/requirements-test.txt +++ /dev/null @@ -1 +0,0 @@ -pytest diff --git a/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/requirements-test.txt deleted file mode 100644 index e079f8a6038d..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/requirements-test.txt +++ /dev/null @@ -1 +0,0 @@ -pytest diff --git a/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/requirements.txt index 67a1ea5b8d23..bde485d13258 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/requirements.txt +++ b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/requirements.txt @@ -1,2 +1,2 @@ -google-cloud-bigtable==2.35.0 +google-cloud-bigtable backoff==2.2.1 diff --git a/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/test_instanceadmin.py b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/test_instanceadmin.py index 5d1378fcd946..669280967733 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/test_instanceadmin.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/instanceadmin/test_instanceadmin.py @@ -18,12 +18,13 @@ import warnings import backoff -import instanceadmin import pytest from google.api_core import exceptions from google.cloud import bigtable +from . import instanceadmin + PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] INSTANCE_ID_FORMAT = "instanceadmin-{:03}-{}" CLUSTER_ID_FORMAT = "instanceadmin-{:03}" diff --git a/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/metricscaler_test.py b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/metricscaler_test.py index f769ce05e11f..b88c8091ea5e 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/metricscaler_test.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/metricscaler_test.py @@ -18,15 +18,17 @@ import uuid import pytest -from metricscaler import get_cpu_load, get_storage_utilization, main, scale_bigtable from mock import Mock, patch from test_utils.retry import RetryInstanceState, RetryResult from google.cloud import bigtable from google.cloud.bigtable import enums +from . import metricscaler +from .metricscaler import get_cpu_load, get_storage_utilization, main, scale_bigtable + PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] -BIGTABLE_ZONE = os.environ["BIGTABLE_ZONE"] +BIGTABLE_ZONE = os.environ.get("BIGTABLE_ZONE", "us-central1-b") SIZE_CHANGE_STEP = 3 INSTANCE_ID_FORMAT = "metric-scale-test-{}" BIGTABLE_INSTANCE = INSTANCE_ID_FORMAT.format(str(uuid.uuid4())[:10]) @@ -36,14 +38,14 @@ # System tests to verify API calls succeed -@patch("metricscaler.query") +@patch.object(metricscaler, "query") def test_get_cpu_load(monitoring_v3_query): iter_mock = monitoring_v3_query.Query().select_resources().iter iter_mock.return_value = iter([Mock(points=[Mock(value=Mock(double_value=1.0))])]) assert float(get_cpu_load(BIGTABLE_INSTANCE, BIGTABLE_INSTANCE)) > 0.0 -@patch("metricscaler.query") +@patch.object(metricscaler, "query") def test_get_storage_utilization(monitoring_v3_query): iter_mock = monitoring_v3_query.Query().select_resources().iter iter_mock.return_value = iter([Mock(points=[Mock(value=Mock(double_value=1.0))])]) @@ -169,9 +171,9 @@ def test_handle_dev_instance(capsys, dev_instance): @patch("time.sleep") -@patch("metricscaler.get_storage_utilization") -@patch("metricscaler.get_cpu_load") -@patch("metricscaler.scale_bigtable") +@patch.object(metricscaler, "get_storage_utilization") +@patch.object(metricscaler, "get_cpu_load") +@patch.object(metricscaler, "scale_bigtable") def test_main(scale_bigtable, get_cpu_load, get_storage_utilization, sleep): SHORT_SLEEP = 5 LONG_SLEEP = 10 diff --git a/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/requirements-test.txt deleted file mode 100644 index d11108b81f7c..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/requirements-test.txt +++ /dev/null @@ -1,3 +0,0 @@ -pytest -mock==5.2.0 -google-cloud-testutils diff --git a/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/requirements.txt index 257fd1ef67aa..4a2b04016e67 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/requirements.txt +++ b/packages/google-cloud-bigtable/samples/legacy_client/metricscaler/requirements.txt @@ -1,2 +1,2 @@ -google-cloud-bigtable==2.35.0 +google-cloud-bigtable google-cloud-monitoring==2.29.0 diff --git a/packages/google-cloud-bigtable/samples/legacy_client/quickstart/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/quickstart/requirements-test.txt deleted file mode 100644 index ee4ba018603b..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/quickstart/requirements-test.txt +++ /dev/null @@ -1,2 +0,0 @@ -pytest -pytest-asyncio diff --git a/packages/google-cloud-bigtable/samples/legacy_client/quickstart/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/quickstart/requirements.txt index 730d25dec63f..47acfcb87fb0 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/quickstart/requirements.txt +++ b/packages/google-cloud-bigtable/samples/legacy_client/quickstart/requirements.txt @@ -1 +1 @@ -google-cloud-bigtable==2.35.0 +google-cloud-bigtable diff --git a/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/requirements-test.txt deleted file mode 100644 index 55b033e901cd..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/quickstart_happybase/requirements-test.txt +++ /dev/null @@ -1 +0,0 @@ -pytest \ No newline at end of file diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/requirements-test.txt deleted file mode 100644 index ee4ba018603b..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/requirements-test.txt +++ /dev/null @@ -1,2 +0,0 @@ -pytest -pytest-asyncio diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/requirements.txt index 730d25dec63f..47acfcb87fb0 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/requirements.txt +++ b/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/requirements.txt @@ -1 +1 @@ -google-cloud-bigtable==2.35.0 +google-cloud-bigtable diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/requirements-test.txt deleted file mode 100644 index ee4ba018603b..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/requirements-test.txt +++ /dev/null @@ -1,2 +0,0 @@ -pytest -pytest-asyncio diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/requirements.txt index 730d25dec63f..47acfcb87fb0 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/requirements.txt +++ b/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/requirements.txt @@ -1 +1 @@ -google-cloud-bigtable==2.35.0 +google-cloud-bigtable diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/requirements-test.txt deleted file mode 100644 index e079f8a6038d..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/requirements-test.txt +++ /dev/null @@ -1 +0,0 @@ -pytest diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/requirements.txt index 730d25dec63f..47acfcb87fb0 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/requirements.txt +++ b/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/requirements.txt @@ -1 +1 @@ -google-cloud-bigtable==2.35.0 +google-cloud-bigtable diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/requirements-test.txt deleted file mode 100644 index 5e15eb26f589..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/requirements-test.txt +++ /dev/null @@ -1,2 +0,0 @@ -backoff==2.2.1 -pytest diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/requirements.txt index 54c0c14a3c5b..e67acf402263 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/requirements.txt +++ b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/requirements.txt @@ -1 +1 @@ -google-cloud-bigtable==2.35.0 \ No newline at end of file +google-cloud-bigtable \ No newline at end of file diff --git a/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/requirements-test.txt b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/requirements-test.txt deleted file mode 100644 index f01fd134c400..000000000000 --- a/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/requirements-test.txt +++ /dev/null @@ -1,2 +0,0 @@ -pytest -google-cloud-testutils==1.7.0 diff --git a/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/requirements.txt b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/requirements.txt index 730d25dec63f..47acfcb87fb0 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/requirements.txt +++ b/packages/google-cloud-bigtable/samples/legacy_client/tableadmin/requirements.txt @@ -1 +1 @@ -google-cloud-bigtable==2.35.0 +google-cloud-bigtable From 0012b238dd117d49b8615c3cd197f66c0bac0a3c Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Wed, 7 Oct 2026 15:53:02 -0700 Subject: [PATCH 21/23] fix sample tests --- .../samples/admin_client/__init__.py | 0 .../samples/admin_client/instanceadmin/__init__.py | 0 .../admin_client/instanceadmin/test_instanceadmin.py | 6 +++--- .../samples/admin_client/tableadmin/__init__.py | 0 .../samples/admin_client/tableadmin/tableadmin.py | 2 +- .../samples/admin_client/tableadmin/tableadmin_test.py | 8 ++++++-- .../google-cloud-bigtable/samples/data_client/__init__.py | 0 .../samples/data_client/hello/__init__.py | 0 .../samples/data_client/hello/main.py | 2 +- .../samples/data_client/quickstart/__init__.py | 0 .../samples/data_client/quickstart/main_test.py | 2 +- .../samples/data_client/snippets/__init__.py | 0 12 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 packages/google-cloud-bigtable/samples/admin_client/__init__.py create mode 100644 packages/google-cloud-bigtable/samples/admin_client/instanceadmin/__init__.py create mode 100644 packages/google-cloud-bigtable/samples/admin_client/tableadmin/__init__.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/__init__.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/hello/__init__.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/quickstart/__init__.py create mode 100644 packages/google-cloud-bigtable/samples/data_client/snippets/__init__.py diff --git a/packages/google-cloud-bigtable/samples/admin_client/__init__.py b/packages/google-cloud-bigtable/samples/admin_client/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/__init__.py b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/test_instanceadmin.py b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/test_instanceadmin.py index 17da5fb84303..f567727261aa 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/test_instanceadmin.py +++ b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/test_instanceadmin.py @@ -22,9 +22,9 @@ ) PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] -INSTANCE_ID = f"instance-admin-{str(uuid.uuid4())[:16]}" -CLUSTER_ID = f"cluster-admin-{str(uuid.uuid4())[:16]}" -NEW_CLUSTER_ID = f"cluster-add-{str(uuid.uuid4())[:16]}" +INSTANCE_ID = f"instance-admin-{str(uuid.uuid4())[:8]}" +CLUSTER_ID = f"cluster-admin-{str(uuid.uuid4())[:8]}" +NEW_CLUSTER_ID = f"cluster-add-{str(uuid.uuid4())[:8]}" def test_instance_operations(capsys): diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/__init__.py b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py index 225e35a6cdcc..497fc705349a 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py +++ b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py @@ -22,7 +22,7 @@ import argparse -from ..utils import create_table_cm +from ...utils import create_table_cm def run_table_operations(project_id, instance_id, table_id): diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin_test.py b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin_test.py index 38700717377e..ea3c4cbc17d1 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin_test.py +++ b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin_test.py @@ -14,6 +14,7 @@ import os import uuid +from ...utils import create_table_cm from .tableadmin import delete_table, run_table_operations PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] @@ -36,6 +37,9 @@ def test_run_table_operations(capsys): def test_delete_table(capsys): - delete_table(PROJECT, BIGTABLE_INSTANCE, TABLE_ID) + table_id = f"table-admin-to-delete-{str(uuid.uuid4())[:16]}" + with create_table_cm(PROJECT, BIGTABLE_INSTANCE, table_id, verbose=False): + delete_table(PROJECT, BIGTABLE_INSTANCE, table_id) out, _ = capsys.readouterr() - assert f"Deleted {TABLE_ID} table." in out + assert f"Deleting {table_id} table." in out + assert f"Deleted {table_id} table." in out diff --git a/packages/google-cloud-bigtable/samples/data_client/__init__.py b/packages/google-cloud-bigtable/samples/data_client/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/__init__.py b/packages/google-cloud-bigtable/samples/data_client/hello/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/main.py b/packages/google-cloud-bigtable/samples/data_client/hello/main.py index 7efc4578a69f..5ead6cf22039 100644 --- a/packages/google-cloud-bigtable/samples/data_client/hello/main.py +++ b/packages/google-cloud-bigtable/samples/data_client/hello/main.py @@ -30,7 +30,7 @@ from google.cloud import bigtable from google.cloud.bigtable.data import row_filters -from ..utils import wait_for_table +from ...utils import wait_for_table # [END bigtable_hw_imports_data_client] diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/__init__.py b/packages/google-cloud-bigtable/samples/data_client/quickstart/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/main_test.py b/packages/google-cloud-bigtable/samples/data_client/quickstart/main_test.py index e7d82e5e1ffc..9b42cf553e16 100644 --- a/packages/google-cloud-bigtable/samples/data_client/quickstart/main_test.py +++ b/packages/google-cloud-bigtable/samples/data_client/quickstart/main_test.py @@ -20,7 +20,7 @@ from google.cloud.bigtable.data import BigtableDataClient, SetCell -from ..utils import create_table_cm +from ...utils import create_table_cm from .main import main PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/__init__.py b/packages/google-cloud-bigtable/samples/data_client/snippets/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 From b4accd87d85ccb9d493d72775b0c95a55c487d75 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Wed, 7 Oct 2026 16:57:14 -0700 Subject: [PATCH 22/23] removed unneeded files --- .../admin_client/instanceadmin/noxfile.py | 292 ------------------ .../instanceadmin/requirements-test.txt | 1 - .../instanceadmin/requirements.txt | 2 +- .../admin_client/tableadmin/noxfile.py | 292 ------------------ .../tableadmin/requirements-test.txt | 2 - .../admin_client/tableadmin/requirements.txt | 2 +- .../samples/data_client/hello/noxfile.py | 292 ------------------ .../data_client/hello/requirements-test.txt | 1 - .../data_client/hello/requirements.txt | 2 +- .../samples/data_client/quickstart/noxfile.py | 292 ------------------ .../quickstart/requirements-test.txt | 2 - .../data_client/quickstart/requirements.txt | 2 +- .../samples/data_client/snippets/noxfile.py | 292 ------------------ .../snippets/requirements-test.txt | 2 - .../data_client/snippets/requirements.txt | 2 +- 15 files changed, 5 insertions(+), 1473 deletions(-) delete mode 100644 packages/google-cloud-bigtable/samples/admin_client/instanceadmin/noxfile.py delete mode 100644 packages/google-cloud-bigtable/samples/admin_client/instanceadmin/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/admin_client/tableadmin/noxfile.py delete mode 100644 packages/google-cloud-bigtable/samples/admin_client/tableadmin/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/data_client/hello/noxfile.py delete mode 100644 packages/google-cloud-bigtable/samples/data_client/hello/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/data_client/quickstart/noxfile.py delete mode 100644 packages/google-cloud-bigtable/samples/data_client/quickstart/requirements-test.txt delete mode 100644 packages/google-cloud-bigtable/samples/data_client/snippets/noxfile.py delete mode 100644 packages/google-cloud-bigtable/samples/data_client/snippets/requirements-test.txt diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/noxfile.py b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/noxfile.py deleted file mode 100644 index a2a659dcca04..000000000000 --- a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2026 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/requirements-test.txt b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/requirements-test.txt deleted file mode 100644 index e079f8a6038d..000000000000 --- a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/requirements-test.txt +++ /dev/null @@ -1 +0,0 @@ -pytest diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/requirements.txt b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/requirements.txt index 67a1ea5b8d23..bde485d13258 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/requirements.txt +++ b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/requirements.txt @@ -1,2 +1,2 @@ -google-cloud-bigtable==2.35.0 +google-cloud-bigtable backoff==2.2.1 diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/noxfile.py b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/noxfile.py deleted file mode 100644 index a2a659dcca04..000000000000 --- a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2026 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/requirements-test.txt b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/requirements-test.txt deleted file mode 100644 index f01fd134c400..000000000000 --- a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/requirements-test.txt +++ /dev/null @@ -1,2 +0,0 @@ -pytest -google-cloud-testutils==1.7.0 diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/requirements.txt b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/requirements.txt index 730d25dec63f..47acfcb87fb0 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/requirements.txt +++ b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/requirements.txt @@ -1 +1 @@ -google-cloud-bigtable==2.35.0 +google-cloud-bigtable diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/noxfile.py b/packages/google-cloud-bigtable/samples/data_client/hello/noxfile.py deleted file mode 100644 index a2a659dcca04..000000000000 --- a/packages/google-cloud-bigtable/samples/data_client/hello/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2026 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/requirements-test.txt b/packages/google-cloud-bigtable/samples/data_client/hello/requirements-test.txt deleted file mode 100644 index e079f8a6038d..000000000000 --- a/packages/google-cloud-bigtable/samples/data_client/hello/requirements-test.txt +++ /dev/null @@ -1 +0,0 @@ -pytest diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/requirements.txt b/packages/google-cloud-bigtable/samples/data_client/hello/requirements.txt index 5113ca7f17bb..35b55807c842 100644 --- a/packages/google-cloud-bigtable/samples/data_client/hello/requirements.txt +++ b/packages/google-cloud-bigtable/samples/data_client/hello/requirements.txt @@ -1,2 +1,2 @@ -google-cloud-bigtable==2.35.0 +google-cloud-bigtable google-cloud-core==2.5.0 diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/noxfile.py b/packages/google-cloud-bigtable/samples/data_client/quickstart/noxfile.py deleted file mode 100644 index a2a659dcca04..000000000000 --- a/packages/google-cloud-bigtable/samples/data_client/quickstart/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2026 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/requirements-test.txt b/packages/google-cloud-bigtable/samples/data_client/quickstart/requirements-test.txt deleted file mode 100644 index ee4ba018603b..000000000000 --- a/packages/google-cloud-bigtable/samples/data_client/quickstart/requirements-test.txt +++ /dev/null @@ -1,2 +0,0 @@ -pytest -pytest-asyncio diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/requirements.txt b/packages/google-cloud-bigtable/samples/data_client/quickstart/requirements.txt index 730d25dec63f..47acfcb87fb0 100644 --- a/packages/google-cloud-bigtable/samples/data_client/quickstart/requirements.txt +++ b/packages/google-cloud-bigtable/samples/data_client/quickstart/requirements.txt @@ -1 +1 @@ -google-cloud-bigtable==2.35.0 +google-cloud-bigtable diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/noxfile.py b/packages/google-cloud-bigtable/samples/data_client/snippets/noxfile.py deleted file mode 100644 index a2a659dcca04..000000000000 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/noxfile.py +++ /dev/null @@ -1,292 +0,0 @@ -# Copyright 2026 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import glob -import os -import sys -from pathlib import Path -from typing import Callable, Dict, Optional - -import nox - -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING -# DO NOT EDIT THIS FILE EVER! -# WARNING - WARNING - WARNING - WARNING - WARNING -# WARNING - WARNING - WARNING - WARNING - WARNING - -BLACK_VERSION = "black==22.3.0" -ISORT_VERSION = "isort==5.10.1" - -# Copy `noxfile_config.py` to your directory and modify it instead. - -# `TEST_CONFIG` dict is a configuration hook that allows users to -# modify the test configurations. The values here should be in sync -# with `noxfile_config.py`. Users will copy `noxfile_config.py` into -# their directory and modify it. - -TEST_CONFIG = { - # You can opt out from the test for specific Python versions. - "ignored_versions": [], - # Old samples are opted out of enforcing Python type hints - # All new samples should feature them - "enforce_type_hints": False, - # An envvar key for determining the project id to use. Change it - # to 'BUILD_SPECIFIC_GCLOUD_PROJECT' if you want to opt in using a - # build specific Cloud project. You can also use your own string - # to use your own Cloud project. - "gcloud_project_env": "GOOGLE_CLOUD_PROJECT", - # 'gcloud_project_env': 'BUILD_SPECIFIC_GCLOUD_PROJECT', - # If you need to use a specific version of pip, - # change pip_version_override to the string representation - # of the version number, for example, "20.2.4" - "pip_version_override": None, - # A dictionary you want to inject into your test. Don't put any - # secrets here. These values will override predefined values. - "envs": {}, -} - - -try: - # Ensure we can import noxfile_config in the project's directory. - sys.path.append(".") - from noxfile_config import TEST_CONFIG_OVERRIDE -except ImportError as e: - print("No user noxfile_config found: detail: {}".format(e)) - TEST_CONFIG_OVERRIDE = {} - -# Update the TEST_CONFIG with the user supplied values. -TEST_CONFIG.update(TEST_CONFIG_OVERRIDE) - - -def get_pytest_env_vars() -> Dict[str, str]: - """Returns a dict for pytest invocation.""" - ret = {} - - # Override the GCLOUD_PROJECT and the alias. - env_key = TEST_CONFIG["gcloud_project_env"] - # This should error out if not set. - ret["GOOGLE_CLOUD_PROJECT"] = os.environ[env_key] - - # Apply user supplied envs. - ret.update(TEST_CONFIG["envs"]) - return ret - - -# DO NOT EDIT - automatically generated. -# All versions used to test samples. -ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] - -# Any default versions that should be ignored. -IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"] - -TESTED_VERSIONS = sorted([v for v in ALL_VERSIONS if v not in IGNORED_VERSIONS]) - -INSTALL_LIBRARY_FROM_SOURCE = os.environ.get("INSTALL_LIBRARY_FROM_SOURCE", False) in ( - "True", - "true", -) - -# Error if a python version is missing -nox.options.error_on_missing_interpreters = True - -# -# Style Checks -# - - -# Linting with flake8. -# -# We ignore the following rules: -# E203: whitespace before ‘:’ -# E266: too many leading ‘#’ for block comment -# E501: line too long -# I202: Additional newline in a section of imports -# -# We also need to specify the rules which are ignored by default: -# ['E226', 'W504', 'E126', 'E123', 'W503', 'E24', 'E704', 'E121'] -FLAKE8_COMMON_ARGS = [ - "--show-source", - "--builtin=gettext", - "--max-complexity=20", - "--exclude=.nox,.cache,env,lib,generated_pb2,*_pb2.py,*_pb2_grpc.py", - "--ignore=E121,E123,E126,E203,E226,E24,E266,E501,E704,W503,W504,I202", - "--max-line-length=88", -] - - -@nox.session -def lint(session: nox.sessions.Session) -> None: - if not TEST_CONFIG["enforce_type_hints"]: - session.install("flake8") - else: - session.install("flake8", "flake8-annotations") - - args = FLAKE8_COMMON_ARGS + [ - ".", - ] - session.run("flake8", *args) - - -# -# Black -# - - -@nox.session -def blacken(session: nox.sessions.Session) -> None: - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - session.run("black", *python_files) - - -# -# format = isort + black -# - - -@nox.session -def format(session: nox.sessions.Session) -> None: - """ - Run isort to sort imports. Then run black - to format code to uniform standard. - """ - session.install(BLACK_VERSION, ISORT_VERSION) - python_files = [path for path in os.listdir(".") if path.endswith(".py")] - - # Use the --fss option to sort imports using strict alphabetical order. - # See https://pycqa.github.io/isort/docs/configuration/options.html#force-sort-within-sections - session.run("isort", "--fss", *python_files) - session.run("black", *python_files) - - -# -# Sample Tests -# - - -PYTEST_COMMON_ARGS = ["--junitxml=sponge_log.xml"] - - -def _session_tests( - session: nox.sessions.Session, post_install: Callable = None -) -> None: - # check for presence of tests - test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( - "**/test_*.py", recursive=True - ) - test_list.extend(glob.glob("**/tests", recursive=True)) - - if len(test_list) == 0: - print("No tests found, skipping directory.") - return - - if TEST_CONFIG["pip_version_override"]: - pip_version = TEST_CONFIG["pip_version_override"] - session.install(f"pip=={pip_version}") - """Runs py.test for a particular project.""" - concurrent_args = [] - if os.path.exists("requirements.txt"): - if os.path.exists("constraints.txt"): - session.install("-r", "requirements.txt", "-c", "constraints.txt") - else: - session.install("-r", "requirements.txt") - with open("requirements.txt") as rfile: - packages = rfile.read() - - if os.path.exists("requirements-test.txt"): - if os.path.exists("constraints-test.txt"): - session.install("-r", "requirements-test.txt", "-c", "constraints-test.txt") - else: - session.install("-r", "requirements-test.txt") - with open("requirements-test.txt") as rtfile: - packages += rtfile.read() - - if INSTALL_LIBRARY_FROM_SOURCE: - session.install("-e", _get_repo_root()) - - if post_install: - post_install(session) - - if "pytest-parallel" in packages: - concurrent_args.extend(["--workers", "auto", "--tests-per-worker", "auto"]) - elif "pytest-xdist" in packages: - concurrent_args.extend(["-n", "auto"]) - - session.run( - "pytest", - *(PYTEST_COMMON_ARGS + session.posargs + concurrent_args), - # Pytest will return 5 when no tests are collected. This can happen - # on travis where slow and flaky tests are excluded. - # See http://doc.pytest.org/en/latest/_modules/_pytest/main.html - success_codes=[0, 5], - env=get_pytest_env_vars(), - ) - - -@nox.session(python=ALL_VERSIONS) -def py(session: nox.sessions.Session) -> None: - """Runs py.test for a sample using the specified version of Python.""" - if session.python in TESTED_VERSIONS: - _session_tests(session) - else: - session.skip( - "SKIPPED: {} tests are disabled for this sample.".format(session.python) - ) - - -# -# Readmegen -# - - -def _get_repo_root() -> Optional[str]: - """Returns the root folder of the project.""" - # Get root of this repository. Assume we don't have directories nested deeper than 10 items. - p = Path(os.getcwd()) - for i in range(10): - if p is None: - break - if Path(p / ".git").exists(): - return str(p) - # .git is not available in repos cloned via Cloud Build - # setup.py is always in the library's root, so use that instead - # https://github.com/googleapis/synthtool/issues/792 - if Path(p / "setup.py").exists(): - return str(p) - p = p.parent - raise Exception("Unable to detect repository root.") - - -GENERATED_READMES = sorted([x for x in Path(".").rglob("*.rst.in")]) - - -@nox.session -@nox.parametrize("path", GENERATED_READMES) -def readmegen(session: nox.sessions.Session, path: str) -> None: - """(Re-)generates the readme for a sample.""" - session.install("jinja2", "pyyaml") - dir_ = os.path.dirname(path) - - if os.path.exists(os.path.join(dir_, "requirements.txt")): - session.install("-r", os.path.join(dir_, "requirements.txt")) - - in_file = os.path.join(dir_, "README.rst.in") - session.run( - "python", _get_repo_root() + "/scripts/readme-gen/readme_gen.py", in_file - ) diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/requirements-test.txt b/packages/google-cloud-bigtable/samples/data_client/snippets/requirements-test.txt deleted file mode 100644 index ee4ba018603b..000000000000 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/requirements-test.txt +++ /dev/null @@ -1,2 +0,0 @@ -pytest -pytest-asyncio diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/requirements.txt b/packages/google-cloud-bigtable/samples/data_client/snippets/requirements.txt index 730d25dec63f..47acfcb87fb0 100644 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/requirements.txt +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/requirements.txt @@ -1 +1 @@ -google-cloud-bigtable==2.35.0 +google-cloud-bigtable From e0f8849867ac47c031ed0340a18dde0ab803c6b3 Mon Sep 17 00:00:00 2001 From: Daniel Sanche Date: Wed, 7 Oct 2026 17:56:48 -0700 Subject: [PATCH 23/23] completed migration of legacy client to data client samples --- .../instanceadmin/instanceadmin.py | 5 + .../instanceadmin/test_instanceadmin.py | 41 +-- .../admin_client/metricscaler/__init__.py | 13 + .../admin_client/metricscaler/metricscaler.py | 241 ++++++++++++++++++ .../metricscaler/metricscaler_test.py | 235 +++++++++++++++++ .../metricscaler/requirements.txt | 2 + .../admin_client/tableadmin/tableadmin.py | 12 +- .../samples/data_client/hello/main.py | 58 +++-- .../samples/data_client/quickstart/main.py | 5 +- .../snippets/data_client_snippets.py | 128 +++++++--- .../snippets/data_client_snippets_test.py | 4 + .../data_client/snippets/deletes_snippets.py | 57 ++++- .../snippets/deletes_snippets_test.py | 10 + .../data_client/snippets/filter_snippets.py | 76 +++--- .../data_client_async/hello/async_main.py | 5 +- .../snippets/data_client_snippets_async.py | 108 ++++++-- .../data_client_snippets_async_test.py | 5 + .../snippets/filter_snippets_async.py | 4 + .../snippets/deletes/deletes_snippets.py | 32 +-- .../snippets/filters/filter_snippets.py | 76 +++--- .../snippets/reads/read_snippets.py | 32 +-- .../snippets/writes/write_batch.py | 4 +- .../snippets/writes/write_conditionally.py | 4 +- .../snippets/writes/write_increment.py | 4 +- .../snippets/writes/write_simple.py | 4 +- .../google-cloud-bigtable/samples/utils.py | 31 ++- 26 files changed, 952 insertions(+), 244 deletions(-) create mode 100644 packages/google-cloud-bigtable/samples/admin_client/metricscaler/__init__.py create mode 100644 packages/google-cloud-bigtable/samples/admin_client/metricscaler/metricscaler.py create mode 100644 packages/google-cloud-bigtable/samples/admin_client/metricscaler/metricscaler_test.py create mode 100644 packages/google-cloud-bigtable/samples/admin_client/metricscaler/requirements.txt diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py index c0f5b9546433..964d2d82e923 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py +++ b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/instanceadmin.py @@ -26,6 +26,7 @@ def run_instance_operations(project_id, instance_id, cluster_id): # [START bigtable_check_instance_exists] from google.api_core.exceptions import NotFound + from google.cloud import bigtable_admin client = bigtable_admin.BigtableInstanceAdminClient() @@ -40,6 +41,7 @@ def run_instance_operations(project_id, instance_id, cluster_id): # [START bigtable_create_prod_instance] from google.api_core.exceptions import NotFound + from google.cloud import bigtable_admin client = bigtable_admin.BigtableInstanceAdminClient() @@ -111,6 +113,7 @@ def run_instance_operations(project_id, instance_id, cluster_id): def delete_instance(project_id, instance_id): # [START bigtable_delete_instance] from google.api_core.exceptions import NotFound + from google.cloud import bigtable_admin client = bigtable_admin.BigtableInstanceAdminClient() @@ -128,6 +131,7 @@ def delete_instance(project_id, instance_id): def add_cluster(project_id, instance_id, cluster_id): # [START bigtable_create_cluster] from google.api_core.exceptions import NotFound + from google.cloud import bigtable_admin client = bigtable_admin.BigtableInstanceAdminClient() @@ -171,6 +175,7 @@ def delete_cluster(project_id, instance_id, cluster_id): """ # [START bigtable_delete_cluster] from google.api_core.exceptions import NotFound + from google.cloud import bigtable_admin client = bigtable_admin.BigtableInstanceAdminClient() diff --git a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/test_instanceadmin.py b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/test_instanceadmin.py index f567727261aa..1c5203b1a680 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/test_instanceadmin.py +++ b/packages/google-cloud-bigtable/samples/admin_client/instanceadmin/test_instanceadmin.py @@ -14,6 +14,9 @@ import os import uuid +import backoff +from google.api_core import exceptions + from .instanceadmin import ( add_cluster, delete_cluster, @@ -28,20 +31,24 @@ def test_instance_operations(capsys): - run_instance_operations(PROJECT, INSTANCE_ID, CLUSTER_ID) - out, _ = capsys.readouterr() - assert f"Created instance: {INSTANCE_ID}" in out - assert "Listing instances:" in out - assert "Listing clusters..." in out - - add_cluster(PROJECT, INSTANCE_ID, NEW_CLUSTER_ID) - out, _ = capsys.readouterr() - assert f"Cluster created: {NEW_CLUSTER_ID}" in out - - delete_cluster(PROJECT, INSTANCE_ID, NEW_CLUSTER_ID) - out, _ = capsys.readouterr() - assert f"Cluster deleted: {NEW_CLUSTER_ID}" in out - - delete_instance(PROJECT, INSTANCE_ID) - out, _ = capsys.readouterr() - assert f"Deleted instance: {INSTANCE_ID}" in out + try: + run_instance_operations(PROJECT, INSTANCE_ID, CLUSTER_ID) + out, _ = capsys.readouterr() + assert f"Created instance: {INSTANCE_ID}" in out + assert "Listing instances:" in out + assert "Listing clusters..." in out + + backoff_503 = backoff.on_exception(backoff.expo, exceptions.ServiceUnavailable) + backoff_503(add_cluster)(PROJECT, INSTANCE_ID, NEW_CLUSTER_ID) + out, _ = capsys.readouterr() + assert f"Cluster created: {NEW_CLUSTER_ID}" in out + + delete_cluster(PROJECT, INSTANCE_ID, NEW_CLUSTER_ID) + out, _ = capsys.readouterr() + assert f"Cluster deleted: {NEW_CLUSTER_ID}" in out + + delete_instance(PROJECT, INSTANCE_ID) + out, _ = capsys.readouterr() + assert f"Deleted instance: {INSTANCE_ID}" in out + finally: + delete_instance(PROJECT, INSTANCE_ID) diff --git a/packages/google-cloud-bigtable/samples/admin_client/metricscaler/__init__.py b/packages/google-cloud-bigtable/samples/admin_client/metricscaler/__init__.py new file mode 100644 index 000000000000..58d482ea3866 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/admin_client/metricscaler/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2026 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. diff --git a/packages/google-cloud-bigtable/samples/admin_client/metricscaler/metricscaler.py b/packages/google-cloud-bigtable/samples/admin_client/metricscaler/metricscaler.py new file mode 100644 index 000000000000..252cd3e637b8 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/admin_client/metricscaler/metricscaler.py @@ -0,0 +1,241 @@ +# Copyright 2026 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. + +"""Sample that demonstrates how to use Cloud Monitoring metrics to +programmatically scale a Google Cloud Bigtable cluster.""" + +import argparse +import logging +import os +import time + +from google.cloud.monitoring_v3 import query +from google.protobuf import field_mask_pb2 + +from google.cloud import bigtable_admin, monitoring_v3 + +PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] + +logger = logging.getLogger("bigtable.metricscaler") +logger.addHandler(logging.StreamHandler()) +logger.setLevel(logging.INFO) + + +def get_cpu_load(bigtable_instance, bigtable_cluster): + """Returns the most recent Cloud Bigtable CPU load measurement. + + Returns: + float: The most recent Cloud Bigtable CPU usage metric + """ + # [START bigtable_cpu] + client = monitoring_v3.MetricServiceClient() + cpu_query = query.Query( + client, + project=PROJECT, + metric_type="bigtable.googleapis.com/cluster/cpu_load", + minutes=5, + ) + cpu_query = cpu_query.select_resources( + instance=bigtable_instance, cluster=bigtable_cluster + ) + cpu = next(cpu_query.iter()) + return cpu.points[0].value.double_value + # [END bigtable_cpu] + + +def get_storage_utilization(bigtable_instance, bigtable_cluster): + """Returns the most recent Cloud Bigtable storage utilization measurement. + + Returns: + float: The most recent Cloud Bigtable storage utilization metric + """ + # [START bigtable_metric_scaler_storage_utilization] + client = monitoring_v3.MetricServiceClient() + utilization_query = query.Query( + client, + project=PROJECT, + metric_type="bigtable.googleapis.com/cluster/storage_utilization", + minutes=5, + ) + utilization_query = utilization_query.select_resources( + instance=bigtable_instance, cluster=bigtable_cluster + ) + utilization = next(utilization_query.iter()) + return utilization.points[0].value.double_value + # [END bigtable_metric_scaler_storage_utilization] + + +def scale_bigtable(bigtable_instance, bigtable_cluster, scale_up): + """Scales the number of Cloud Bigtable nodes up or down. + + Edits the number of nodes in the Cloud Bigtable cluster to be increased + or decreased, depending on the `scale_up` boolean argument. Currently + the `incremental` strategy from `strategies.py` is used. + + + Args: + bigtable_instance (str): Cloud Bigtable instance ID to scale + bigtable_cluster (str): Cloud Bigtable cluster ID to scale + scale_up (bool): If true, scale up, otherwise scale down + """ + + # The minimum number of nodes to use. The default minimum is 3. If you have + # a lot of data, the rule of thumb is to not go below 2.5 TB per node for + # SSD clusters, and 8 TB for HDD. The + # "bigtable.googleapis.com/disk/bytes_used" metric is useful in figuring + # out the minimum number of nodes. + min_node_count = 1 + + # The maximum number of nodes to use. The default maximum is 30 nodes per + # zone. If you need more quota, you can request more by following the + # instructions at https://cloud.google.com/bigtable/quota. + max_node_count = 30 + + # The number of nodes to change the cluster by. + size_change_step = 3 + + # [START bigtable_scale] + bigtable_client = bigtable_admin.BigtableInstanceAdminClient() + instance_name = bigtable_client.instance_path(PROJECT, bigtable_instance) + instance = bigtable_client.get_instance(name=instance_name) + + if instance.type_ == bigtable_admin.Instance.Type.DEVELOPMENT: + raise ValueError("Development instances cannot be scaled.") + + cluster_name = bigtable_client.cluster_path( + PROJECT, bigtable_instance, bigtable_cluster + ) + cluster = bigtable_client.get_cluster(name=cluster_name) + + current_node_count = cluster.serve_nodes + update_mask = field_mask_pb2.FieldMask(paths=["serve_nodes"]) + + if scale_up: + if current_node_count < max_node_count: + new_node_count = min(current_node_count + size_change_step, max_node_count) + cluster.serve_nodes = new_node_count + operation = bigtable_client.partial_update_cluster( + cluster=cluster, update_mask=update_mask + ) + response = operation.result(480) + logger.info( + "Scaled up from {} to {} nodes for {}.".format( + current_node_count, new_node_count, response.name + ) + ) + else: + if current_node_count > min_node_count: + new_node_count = max(current_node_count - size_change_step, min_node_count) + cluster.serve_nodes = new_node_count + operation = bigtable_client.partial_update_cluster( + cluster=cluster, update_mask=update_mask + ) + response = operation.result(480) + logger.info( + "Scaled down from {} to {} nodes for {}.".format( + current_node_count, new_node_count, response.name + ) + ) + # [END bigtable_scale] + + +def main( + bigtable_instance, + bigtable_cluster, + high_cpu_threshold, + low_cpu_threshold, + high_storage_threshold, + short_sleep, + long_sleep, +): + """Main loop runner that autoscales Cloud Bigtable. + + Args: + bigtable_instance (str): Cloud Bigtable instance ID to autoscale + high_cpu_threshold (float): If CPU is higher than this, scale up. + low_cpu_threshold (float): If CPU is lower than this, scale down. + high_storage_threshold (float): If storage is higher than this, + scale up. + short_sleep (int): How long to sleep after no operation + long_sleep (int): How long to sleep after the number of nodes is + changed + """ + cluster_cpu = get_cpu_load(bigtable_instance, bigtable_cluster) + cluster_storage = get_storage_utilization(bigtable_instance, bigtable_cluster) + logger.info("Detected cpu of {}".format(cluster_cpu)) + logger.info("Detected storage utilization of {}".format(cluster_storage)) + try: + if cluster_cpu > high_cpu_threshold or cluster_storage > high_storage_threshold: + scale_bigtable(bigtable_instance, bigtable_cluster, True) + time.sleep(long_sleep) + elif cluster_cpu < low_cpu_threshold: + if cluster_storage < high_storage_threshold: + scale_bigtable(bigtable_instance, bigtable_cluster, False) + time.sleep(long_sleep) + else: + logger.info("CPU within threshold, sleeping.") + time.sleep(short_sleep) + except Exception as e: + logger.error("Error during scaling: %s", e) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Scales Cloud Bigtable clusters based on CPU usage." + ) + parser.add_argument( + "bigtable_instance", help="ID of the Cloud Bigtable instance to connect to." + ) + parser.add_argument( + "bigtable_cluster", help="ID of the Cloud Bigtable cluster to connect to." + ) + parser.add_argument( + "--high_cpu_threshold", + help="If Cloud Bigtable CPU usage is above this threshold, scale up", + default=0.6, + ) + parser.add_argument( + "--low_cpu_threshold", + help="If Cloud Bigtable CPU usage is below this threshold, scale down", + default=0.2, + ) + parser.add_argument( + "--high_storage_threshold", + help="If Cloud Bigtable storage utilization is above this threshold, scale up", + default=0.6, + ) + parser.add_argument( + "--short_sleep", + help="How long to sleep in seconds between checking metrics after no " + "scale operation", + default=60, + ) + parser.add_argument( + "--long_sleep", + help="How long to sleep in seconds between checking metrics after a " + "scaling operation", + default=60 * 10, + ) + args = parser.parse_args() + + while True: + main( + args.bigtable_instance, + args.bigtable_cluster, + float(args.high_cpu_threshold), + float(args.low_cpu_threshold), + float(args.high_storage_threshold), + int(args.short_sleep), + int(args.long_sleep), + ) diff --git a/packages/google-cloud-bigtable/samples/admin_client/metricscaler/metricscaler_test.py b/packages/google-cloud-bigtable/samples/admin_client/metricscaler/metricscaler_test.py new file mode 100644 index 000000000000..abb0b108bc4c --- /dev/null +++ b/packages/google-cloud-bigtable/samples/admin_client/metricscaler/metricscaler_test.py @@ -0,0 +1,235 @@ +# Copyright 2026 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. + +"""Unit and system tests for metricscaler.py""" + +import os +import uuid +from unittest.mock import Mock, patch + +import pytest +from google.api_core.exceptions import NotFound +from test_utils.retry import RetryResult + +from google.cloud import bigtable_admin + +from . import metricscaler +from .metricscaler import get_cpu_load, get_storage_utilization, main, scale_bigtable + +PROJECT = os.environ["GOOGLE_CLOUD_PROJECT"] +BIGTABLE_ZONE = os.environ.get("BIGTABLE_ZONE", "us-central1-b") +SIZE_CHANGE_STEP = 3 +INSTANCE_ID_FORMAT = "metric-scale-test-{}" +BIGTABLE_INSTANCE = INSTANCE_ID_FORMAT.format(str(uuid.uuid4())[:10]) +BIGTABLE_DEV_INSTANCE = INSTANCE_ID_FORMAT.format(str(uuid.uuid4())[:10]) + + +# System tests to verify API calls succeed + + +@patch.object(metricscaler, "query") +def test_get_cpu_load(monitoring_v3_query): + iter_mock = monitoring_v3_query.Query().select_resources().iter + iter_mock.return_value = iter([Mock(points=[Mock(value=Mock(double_value=1.0))])]) + assert float(get_cpu_load(BIGTABLE_INSTANCE, BIGTABLE_INSTANCE)) > 0.0 + + +@patch.object(metricscaler, "query") +def test_get_storage_utilization(monitoring_v3_query): + iter_mock = monitoring_v3_query.Query().select_resources().iter + iter_mock.return_value = iter([Mock(points=[Mock(value=Mock(double_value=1.0))])]) + assert float(get_storage_utilization(BIGTABLE_INSTANCE, BIGTABLE_INSTANCE)) > 0.0 + + +@pytest.fixture() +def instance(): + cluster_id = BIGTABLE_INSTANCE + + client = bigtable_admin.BigtableInstanceAdminClient() + project_path = client.common_project_path(PROJECT) + instance_path = client.instance_path(PROJECT, BIGTABLE_INSTANCE) + + cluster = bigtable_admin.Cluster( + location=client.common_location_path(PROJECT, BIGTABLE_ZONE), + serve_nodes=1, + default_storage_type=bigtable_admin.StorageType.SSD, + ) + instance_obj = bigtable_admin.Instance( + display_name=BIGTABLE_INSTANCE, + type_=bigtable_admin.Instance.Type.PRODUCTION, + labels={"prod-label": "prod-label"}, + ) + + try: + client.get_instance(name=instance_path) + except NotFound: + operation = client.create_instance( + parent=project_path, + instance_id=BIGTABLE_INSTANCE, + instance=instance_obj, + clusters={cluster_id: cluster}, + ) + response = operation.result(480) + print(f"Successfully created {response.name}") + + yield + + client.delete_instance(name=instance_path) + + +@pytest.fixture() +def dev_instance(): + cluster_id = BIGTABLE_DEV_INSTANCE + + client = bigtable_admin.BigtableInstanceAdminClient() + project_path = client.common_project_path(PROJECT) + instance_path = client.instance_path(PROJECT, BIGTABLE_DEV_INSTANCE) + + cluster = bigtable_admin.Cluster( + location=client.common_location_path(PROJECT, BIGTABLE_ZONE), + default_storage_type=bigtable_admin.StorageType.SSD, + ) + instance_obj = bigtable_admin.Instance( + display_name=BIGTABLE_DEV_INSTANCE, + type_=bigtable_admin.Instance.Type.DEVELOPMENT, + labels={"dev-label": "dev-label"}, + ) + + try: + client.get_instance(name=instance_path) + except NotFound: + operation = client.create_instance( + parent=project_path, + instance_id=BIGTABLE_DEV_INSTANCE, + instance=instance_obj, + clusters={cluster_id: cluster}, + ) + response = operation.result(480) + print(f"Successfully created {response.name}") + + yield + + client.delete_instance(name=instance_path) + + +class ClusterNodeCountPredicate: + def __init__(self, expected_node_count): + self.expected_node_count = expected_node_count + + def __call__(self, cluster): + expected = self.expected_node_count + print(f"Expected node count: {expected}; found: {cluster.serve_nodes}") + return cluster.serve_nodes == expected + + +def test_scale_bigtable(instance): + bigtable_client = bigtable_admin.BigtableInstanceAdminClient() + cluster_path = bigtable_client.cluster_path( + PROJECT, BIGTABLE_INSTANCE, BIGTABLE_INSTANCE + ) + + def get_cluster(): + return bigtable_client.get_cluster(name=cluster_path) + + _nonzero_node_count = RetryResult( + lambda c: c.serve_nodes > 0, + max_tries=10, + ) + cluster = _nonzero_node_count(get_cluster)() + + original_node_count = cluster.serve_nodes + + scale_bigtable(BIGTABLE_INSTANCE, BIGTABLE_INSTANCE, True) + + scaled_node_count_predicate = ClusterNodeCountPredicate( + original_node_count + SIZE_CHANGE_STEP + ) + scaled_node_count_predicate.__name__ = "scaled_node_count_predicate" + _scaled_node_count = RetryResult( + scaled_node_count_predicate, + max_tries=10, + ) + _scaled_node_count(get_cluster)() + + scale_bigtable(BIGTABLE_INSTANCE, BIGTABLE_INSTANCE, False) + + restored_node_count_predicate = ClusterNodeCountPredicate(original_node_count) + restored_node_count_predicate.__name__ = "restored_node_count_predicate" + _restored_node_count = RetryResult( + restored_node_count_predicate, + max_tries=10, + ) + _restored_node_count(get_cluster)() + + +def test_handle_dev_instance(capsys, dev_instance): + with pytest.raises(ValueError): + scale_bigtable(BIGTABLE_DEV_INSTANCE, BIGTABLE_DEV_INSTANCE, True) + + +@patch("time.sleep") +@patch.object(metricscaler, "get_storage_utilization") +@patch.object(metricscaler, "get_cpu_load") +@patch.object(metricscaler, "scale_bigtable") +def test_main(scale_bigtable, get_cpu_load, get_storage_utilization, sleep): + SHORT_SLEEP = 5 + LONG_SLEEP = 10 + + # Test okay CPU, okay storage utilization + get_cpu_load.return_value = 0.5 + get_storage_utilization.return_value = 0.5 + + main(BIGTABLE_INSTANCE, BIGTABLE_INSTANCE, 0.6, 0.3, 0.6, SHORT_SLEEP, LONG_SLEEP) + scale_bigtable.assert_not_called() + scale_bigtable.reset_mock() + + # Test high CPU, okay storage utilization + get_cpu_load.return_value = 0.7 + get_storage_utilization.return_value = 0.5 + main(BIGTABLE_INSTANCE, BIGTABLE_INSTANCE, 0.6, 0.3, 0.6, SHORT_SLEEP, LONG_SLEEP) + scale_bigtable.assert_called_once_with(BIGTABLE_INSTANCE, BIGTABLE_INSTANCE, True) + scale_bigtable.reset_mock() + + # Test low CPU, okay storage utilization + get_storage_utilization.return_value = 0.5 + get_cpu_load.return_value = 0.2 + main(BIGTABLE_INSTANCE, BIGTABLE_INSTANCE, 0.6, 0.3, 0.6, SHORT_SLEEP, LONG_SLEEP) + scale_bigtable.assert_called_once_with(BIGTABLE_INSTANCE, BIGTABLE_INSTANCE, False) + scale_bigtable.reset_mock() + + # Test okay CPU, high storage utilization + get_cpu_load.return_value = 0.5 + get_storage_utilization.return_value = 0.7 + + main(BIGTABLE_INSTANCE, BIGTABLE_INSTANCE, 0.6, 0.3, 0.6, SHORT_SLEEP, LONG_SLEEP) + scale_bigtable.assert_called_once_with(BIGTABLE_INSTANCE, BIGTABLE_INSTANCE, True) + scale_bigtable.reset_mock() + + # Test high CPU, high storage utilization + get_cpu_load.return_value = 0.7 + get_storage_utilization.return_value = 0.7 + main(BIGTABLE_INSTANCE, BIGTABLE_INSTANCE, 0.6, 0.3, 0.6, SHORT_SLEEP, LONG_SLEEP) + scale_bigtable.assert_called_once_with(BIGTABLE_INSTANCE, BIGTABLE_INSTANCE, True) + scale_bigtable.reset_mock() + + # Test low CPU, high storage utilization + get_cpu_load.return_value = 0.2 + get_storage_utilization.return_value = 0.7 + main(BIGTABLE_INSTANCE, BIGTABLE_INSTANCE, 0.6, 0.3, 0.6, SHORT_SLEEP, LONG_SLEEP) + scale_bigtable.assert_called_once_with(BIGTABLE_INSTANCE, BIGTABLE_INSTANCE, True) + scale_bigtable.reset_mock() + + +if __name__ == "__main__": + test_get_cpu_load() diff --git a/packages/google-cloud-bigtable/samples/admin_client/metricscaler/requirements.txt b/packages/google-cloud-bigtable/samples/admin_client/metricscaler/requirements.txt new file mode 100644 index 000000000000..4a2b04016e67 --- /dev/null +++ b/packages/google-cloud-bigtable/samples/admin_client/metricscaler/requirements.txt @@ -0,0 +1,2 @@ +google-cloud-bigtable +google-cloud-monitoring==2.29.0 diff --git a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py index 497fc705349a..c82a4ace9228 100644 --- a/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py +++ b/packages/google-cloud-bigtable/samples/admin_client/tableadmin/tableadmin.py @@ -43,9 +43,10 @@ def run_table_operations(project_id, instance_id, table_id): # [END bigtable_list_tables] # [START bigtable_create_family_gc_max_age] - from google.cloud import bigtable_admin from google.protobuf import duration_pb2 + from google.cloud import bigtable_admin + client = bigtable_admin.BigtableTableAdminClient() table_path = client.table_path(project_id, instance_id, table_id) @@ -86,9 +87,10 @@ def run_table_operations(project_id, instance_id, table_id): # [END bigtable_create_family_gc_max_versions] # [START bigtable_create_family_gc_union] - from google.cloud import bigtable_admin from google.protobuf import duration_pb2 + from google.cloud import bigtable_admin + client = bigtable_admin.BigtableTableAdminClient() table_path = client.table_path(project_id, instance_id, table_id) @@ -116,9 +118,10 @@ def run_table_operations(project_id, instance_id, table_id): # [END bigtable_create_family_gc_union] # [START bigtable_create_family_gc_intersection] - from google.cloud import bigtable_admin from google.protobuf import duration_pb2 + from google.cloud import bigtable_admin + client = bigtable_admin.BigtableTableAdminClient() table_path = client.table_path(project_id, instance_id, table_id) @@ -146,9 +149,10 @@ def run_table_operations(project_id, instance_id, table_id): # [END bigtable_create_family_gc_intersection] # [START bigtable_create_family_gc_nested] - from google.cloud import bigtable_admin from google.protobuf import duration_pb2 + from google.cloud import bigtable_admin + client = bigtable_admin.BigtableTableAdminClient() table_path = client.table_path(project_id, instance_id, table_id) diff --git a/packages/google-cloud-bigtable/samples/data_client/hello/main.py b/packages/google-cloud-bigtable/samples/data_client/hello/main.py index 5ead6cf22039..64d0ce608277 100644 --- a/packages/google-cloud-bigtable/samples/data_client/hello/main.py +++ b/packages/google-cloud-bigtable/samples/data_client/hello/main.py @@ -26,26 +26,26 @@ import argparse -# [START bigtable_hw_imports_data_client] +# [START bigtable_hw_imports] from google.cloud import bigtable from google.cloud.bigtable.data import row_filters +# [END bigtable_hw_imports] from ...utils import wait_for_table -# [END bigtable_hw_imports_data_client] - # use to ignore warnings row_filters def main(project_id, instance_id, table_id): - # [START bigtable_hw_connect_data_client] + # [START bigtable_hw_connect] client = bigtable.data.BigtableDataClient(project=project_id) table = client.get_table(instance_id, table_id) - # [END bigtable_hw_connect_data_client] + # [END bigtable_hw_connect] - # [START bigtable_hw_create_table_data_client] + # [START bigtable_hw_create_table] from google.api_core.exceptions import AlreadyExists + from google.cloud import bigtable_admin # the data client only supports the data API. Table creation is an admin operation @@ -70,53 +70,66 @@ def main(project_id, instance_id, table_id): ) except AlreadyExists: print("Table {} already exists.".format(table_id)) - # [END bigtable_hw_create_table_data_client] + # [END bigtable_hw_create_table] try: # let table creation complete wait_for_table(table) - # [START bigtable_hw_write_rows_data_client] + # [START bigtable_hw_write_rows] print("Writing some greetings to the table.") greetings = [b"Hello World!", b"Hello Cloud Bigtable!", b"Hello Python!"] mutations = [] column = b"greeting" for i, value in enumerate(greetings): + # Note: This example uses sequential numeric IDs for simplicity, + # but this can result in poor performance in a production + # application. Since rows are stored in sorted order by key, + # sequential keys can result in poor distribution of operations + # across nodes. + # + # We recommend that you use bytestrings directly for row keys + # where possible, rather than encoding strings. + # + # For more information about how to design a Bigtable schema for + # the best performance, see the documentation: + # + # https://cloud.google.com/bigtable/docs/schema-design row_key = f"greeting{i}".encode() row_mutation = bigtable.data.RowMutationEntry( row_key, bigtable.data.SetCell(column_family_id, column, value) ) mutations.append(row_mutation) table.bulk_mutate_rows(mutations) - # [END bigtable_hw_write_rows_data_client] + # [END bigtable_hw_write_rows] - # [START bigtable_hw_create_filter_data_client] + # [START bigtable_hw_create_filter] # Create a filter to only retrieve the most recent version of the cell # for each column across entire row. row_filter = bigtable.data.row_filters.CellsColumnLimitFilter(1) - # [END bigtable_hw_create_filter_data_client] + # [END bigtable_hw_create_filter] - # [START bigtable_hw_get_with_filter_data_client] - # [START bigtable_hw_get_by_key_data_client] + # [START bigtable_hw_get_with_filter] + # [START bigtable_hw_get_by_key] print("Getting a single greeting by row key.") key = "greeting0".encode() row = table.read_row(key, row_filter=row_filter) cell = row.cells[0] print(cell.value.decode("utf-8")) - # [END bigtable_hw_get_by_key_data_client] - # [END bigtable_hw_get_with_filter_data_client] + # [END bigtable_hw_get_by_key] + # [END bigtable_hw_get_with_filter] - # [START bigtable_hw_scan_with_filter_data_client] - # [START bigtable_hw_scan_all_data_client] + # [START bigtable_hw_scan_with_filter] + # [START bigtable_hw_scan_all] print("Scanning for all greetings:") query = bigtable.data.ReadRowsQuery(row_filter=row_filter) - for row in table.read_rows(query): + for row in table.read_rows_stream(query): cell = row.cells[0] print(cell.value.decode("utf-8")) - # [END bigtable_hw_scan_all_data_client] - # [END bigtable_hw_scan_with_filter_data_client] + # [END bigtable_hw_scan_all] + # [END bigtable_hw_scan_with_filter] finally: - # [START bigtable_hw_delete_table_data_client] + # [START bigtable_hw_delete_table] from google.cloud import bigtable_admin # the data client only supports the data API. Table deletion is an admin operation @@ -126,8 +139,9 @@ def main(project_id, instance_id, table_id): print("Deleting the {} table.".format(table_id)) admin_client.delete_table(name=table_path) + table.close() client.close() - # [END bigtable_hw_delete_table_data_client] + # [END bigtable_hw_delete_table] if __name__ == "__main__": diff --git a/packages/google-cloud-bigtable/samples/data_client/quickstart/main.py b/packages/google-cloud-bigtable/samples/data_client/quickstart/main.py index dacbe6c7ae8c..ef9bf85fe0df 100644 --- a/packages/google-cloud-bigtable/samples/data_client/quickstart/main.py +++ b/packages/google-cloud-bigtable/samples/data_client/quickstart/main.py @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -# [START bigtable_quickstart_data_client] +# [START bigtable_quickstart] import argparse from google.cloud.bigtable.data import BigtableDataClient @@ -34,6 +34,7 @@ def main(project_id="project-id", instance_id="instance-id", table_id="my-table" column_id = b"c1" value = row.get_cells(column_family_id, column_id)[0].value.decode("utf-8") + table.close() client.close() print("Row key: {}\nData: {}".format(row_key, value)) @@ -54,4 +55,4 @@ def main(project_id="project-id", instance_id="instance-id", table_id="my-table" args = parser.parse_args() main(args.project_id, args.instance_id, args.table) -# [END bigtable_quickstart_data_client] +# [END bigtable_quickstart] diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py index b4e7b8bb358d..aa7e35694802 100644 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets.py @@ -15,7 +15,7 @@ def write_simple(table): - # [START bigtable_write_simple] + # [START bigtable_writes_simple] from google.cloud.bigtable.data import BigtableDataClient, SetCell def write_simple(project_id, instance_id, table_id): @@ -32,7 +32,7 @@ def write_simple(project_id, instance_id, table_id): table.mutate_row(row_key, wifi_mutation) table.mutate_row(row_key, os_mutation) - # [END bigtable_write_simple] + # [END bigtable_writes_simple] write_simple(table.client.project, table.instance_id, table.table_id) @@ -76,7 +76,7 @@ def write_batch(project_id, instance_id, table_id): def write_increment(table): - # [START bigtable_write_increment] + # [START bigtable_writes_increment] from google.cloud.bigtable.data import BigtableDataClient from google.cloud.bigtable.data.read_modify_write_rules import IncrementRule @@ -96,7 +96,7 @@ def write_increment(project_id, instance_id, table_id): cell = result_row[0] print(f"{cell.row_key} value: {int(cell)}") - # [END bigtable_write_increment] + # [END bigtable_writes_increment] write_increment(table.client.project, table.instance_id, table.table_id) @@ -133,7 +133,7 @@ def write_conditional(project_id, instance_id, table_id): def write_aggregate(table): - # [START bigtable_write_aggregate] + # [START bigtable_writes_aggregate] import time from google.cloud.bigtable.data import BigtableDataClient @@ -143,32 +143,34 @@ def write_aggregate(table): def write_aggregate(project_id, instance_id, table_id): """Increments a value in a Bigtable table using AddToCell mutation.""" with BigtableDataClient(project=project_id) as client: - table = client.get_table(instance_id, table_id) - row_key = "unique_device_ids_1" - try: - with table.mutations_batcher() as batcher: - # The AddToCell mutation increments the value of a cell. - # The `counters` family must be set up to be an aggregate - # family with an int64 input type. - reading = AddToCell( - family="counters", - qualifier="odometer", - value=32304, - # Convert nanoseconds to microseconds - timestamp_micros=time.time_ns() // 1000, - ) - batcher.append(RowMutationEntry(row_key.encode("utf-8"), [reading])) - except MutationsExceptionGroup as e: - # MutationsExceptionGroup contains a FailedMutationEntryError for - # each mutation that failed. - for sub_exception in e.exceptions: - failed_entry: RowMutationEntry = sub_exception.entry - cause: Exception = sub_exception.__cause__ - print( - f"Failed mutation for row {failed_entry.row_key!r} with error: {cause!r}" - ) - - # [END bigtable_write_aggregate] + with client.get_table(instance_id, table_id) as table: + row_key = "unique_device_ids_1" + try: + with table.mutations_batcher() as batcher: + # The AddToCell mutation increments the value of a cell. + # The `counters` family must be set up to be an aggregate + # family with an int64 input type. + reading = AddToCell( + family="counters", + qualifier="odometer", + value=32304, + # Convert nanoseconds to microseconds + timestamp_micros=time.time_ns() // 1000, + ) + batcher.append( + RowMutationEntry(row_key.encode("utf-8"), [reading]) + ) + except MutationsExceptionGroup as e: + # MutationsExceptionGroup contains a FailedMutationEntryError for + # each mutation that failed. + for sub_exception in e.exceptions: + failed_entry: RowMutationEntry = sub_exception.entry + cause: Exception = sub_exception.__cause__ + print( + f"Failed mutation for row {failed_entry.row_key!r} with error: {cause!r}" + ) + + # [END bigtable_writes_aggregate] write_aggregate(table.client.project, table.instance_id, table.table_id) @@ -214,7 +216,7 @@ def read_rows(project_id, instance_id, table_id): query = ReadRowsQuery( row_keys=[b"phone#4c410523#20190501", b"phone#4c410523#20190502"] ) - for row in table.read_rows(query): + for row in table.read_rows_stream(query): print(row) # [END bigtable_reads_rows] @@ -238,13 +240,43 @@ def read_row_range(project_id, instance_id, table_id): ) query = ReadRowsQuery(row_ranges=[row_range]) - for row in table.read_rows(query): + for row in table.read_rows_stream(query): print(row) # [END bigtable_reads_row_range] read_row_range(table.client.project, table.instance_id, table.table_id) +def read_row_ranges(table): + # [START bigtable_reads_row_ranges] + from google.cloud.bigtable.data import ( + BigtableDataClient, + ReadRowsQuery, + RowRange, + ) + + def read_row_ranges(project_id, instance_id, table_id): + with BigtableDataClient(project=project_id) as client: + with client.get_table(instance_id, table_id) as table: + row_ranges = [ + RowRange( + start_key=b"phone#4c410523#20190501", + end_key=b"phone#4c410523#201906201", + ), + RowRange( + start_key=b"phone#5c10102#20190501", + end_key=b"phone#5c10102#201906201", + ), + ] + query = ReadRowsQuery(row_ranges=row_ranges) + + for row in table.read_rows_stream(query): + print(row) + + # [END bigtable_reads_row_ranges] + read_row_ranges(table.client.project, table.instance_id, table.table_id) + + def read_with_prefix(table): # [START bigtable_reads_prefix] from google.cloud.bigtable.data import ( @@ -261,7 +293,7 @@ def read_prefix(project_id, instance_id, table_id): prefix_range = RowRange(start_key=prefix, end_key=end_key) query = ReadRowsQuery(row_ranges=[prefix_range]) - for row in table.read_rows(query): + for row in table.read_rows_stream(query): print(row) # [END bigtable_reads_prefix] @@ -282,7 +314,7 @@ def read_with_filter(project_id, instance_id, table_id): row_filter = row_filters.ValueRegexFilter(b"PQ2A.*$") query = ReadRowsQuery(row_filter=row_filter) - for row in table.read_rows(query): + for row in table.read_rows_stream(query): print(row) # [END bigtable_reads_filter] @@ -311,3 +343,29 @@ def execute_query(project_id, instance_id, table_id): # [END bigtable_execute_query] execute_query(table.client.project, table.instance_id, table.table_id) + + +# [START bigtable_reads_print] +def print_row(row): + from google.cloud._helpers import _datetime_from_microseconds + + print("Reading data for {}:".format(row.row_key.decode("utf-8"))) + last_family = None + for cell in row.cells: + if last_family != cell.family: + print("Column Family {}".format(cell.family)) + last_family = cell.family + + labels = " [{}]".format(",".join(cell.labels)) if len(cell.labels) else "" + print( + "\t{}: {} @{}{}".format( + cell.qualifier.decode("utf-8"), + cell.value.decode("utf-8"), + _datetime_from_microseconds(cell.timestamp_micros), + labels, + ) + ) + print("") + + +# [END bigtable_reads_print] diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_test.py b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_test.py index fbdc1a69f6a7..54eea31c5d78 100644 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_test.py +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/data_client_snippets_test.py @@ -93,6 +93,10 @@ def test_read_row_range(table): data_snippets.read_row_range(table) +def test_read_row_ranges(table): + data_snippets.read_row_ranges(table) + + def test_read_with_prefix(table): data_snippets.read_with_prefix(table) diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets.py b/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets.py index 6955e1119832..c069252c8afd 100644 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets.py +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets.py @@ -14,7 +14,7 @@ # limitations under the License. -# [START bigtable_delete_from_column_data_client] +# [START bigtable_delete_from_column] def delete_from_column(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -33,10 +33,10 @@ def delete_from_column(project_id, instance_id, table_id): client.close() -# [END bigtable_delete_from_column_data_client] +# [END bigtable_delete_from_column] -# [START bigtable_delete_from_column_family_data_client] +# [START bigtable_delete_from_column_family] def delete_from_column_family(project_id, instance_id, table_id): from google.cloud.bigtable.data import BigtableDataClient, DeleteAllFromFamily @@ -49,10 +49,10 @@ def delete_from_column_family(project_id, instance_id, table_id): client.close() -# [END bigtable_delete_from_column_family_data_client] +# [END bigtable_delete_from_column_family] -# [START bigtable_delete_from_row_data_client] +# [START bigtable_delete_from_row] def delete_from_row(project_id, instance_id, table_id): from google.cloud.bigtable.data import BigtableDataClient, DeleteAllFromRow @@ -65,10 +65,10 @@ def delete_from_row(project_id, instance_id, table_id): client.close() -# [END bigtable_delete_from_row_data_client] +# [END bigtable_delete_from_row] -# [START bigtable_streaming_and_batching_data_client] +# [START bigtable_streaming_and_batching] def streaming_and_batching(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -81,7 +81,7 @@ def streaming_and_batching(project_id, instance_id, table_id): table = client.get_table(instance_id, table_id) with table.mutations_batcher() as batcher: - for row in table.read_rows(ReadRowsQuery(limit=10)): + for row in table.read_rows_stream(ReadRowsQuery(limit=10)): batcher.append( RowMutationEntry( row.row_key, @@ -95,10 +95,10 @@ def streaming_and_batching(project_id, instance_id, table_id): client.close() -# [END bigtable_streaming_and_batching_data_client] +# [END bigtable_streaming_and_batching] -# [START bigtable_check_and_mutate_data_client] +# [START bigtable_check_and_mutate] def check_and_mutate(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -121,4 +121,39 @@ def check_and_mutate(project_id, instance_id, table_id): client.close() -# [END bigtable_check_and_mutate_data_client] +# [END bigtable_check_and_mutate] + + +# [START bigtable_drop_row_range] +def drop_row_range(project_id, instance_id, table_id): + from google.cloud import bigtable_admin + + client = bigtable_admin.BigtableTableAdminClient() + table_path = client.table_path(project_id, instance_id, table_id) + row_key_prefix = b"phone#4c410523" + client.drop_row_range( + request={ + "name": table_path, + "row_key_prefix": row_key_prefix, + }, + timeout=200, + ) + + +# [END bigtable_drop_row_range] + + +# [START bigtable_delete_column_family] +def delete_column_family(project_id, instance_id, table_id): + from google.cloud import bigtable_admin + + client = bigtable_admin.BigtableTableAdminClient() + table_path = client.table_path(project_id, instance_id, table_id) + column_family_id = "stats_summary" + modification = bigtable_admin.ModifyColumnFamiliesRequest.Modification( + id=column_family_id, drop=True + ) + client.modify_column_families(name=table_path, modifications=[modification]) + + +# [END bigtable_delete_column_family] diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets_test.py b/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets_test.py index ebd193135d52..54b69321cce7 100644 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets_test.py +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/deletes_snippets_test.py @@ -257,3 +257,13 @@ def test_streaming_and_batching(capsys, table_id): def test_check_and_mutate(capsys, table_id): deletes_snippets.check_and_mutate(PROJECT, BIGTABLE_INSTANCE, table_id) assert_output_match(capsys, "") + + +def test_drop_row_range(capsys, table_id): + deletes_snippets.drop_row_range(PROJECT, BIGTABLE_INSTANCE, table_id) + assert_output_match(capsys, "") + + +def test_delete_column_family(capsys, table_id): + deletes_snippets.delete_column_family(PROJECT, BIGTABLE_INSTANCE, table_id) + assert_output_match(capsys, "") diff --git a/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets.py b/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets.py index 9f00201ae25f..2fd7909f3357 100644 --- a/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets.py +++ b/packages/google-cloud-bigtable/samples/data_client/snippets/filter_snippets.py @@ -12,7 +12,7 @@ # limitations under the License. -# [START bigtable_filters_limit_row_sample_data_client] +# [START bigtable_filters_limit_row_sample] def filter_limit_row_sample(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -28,8 +28,8 @@ def filter_limit_row_sample(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_row_sample_data_client] -# [START bigtable_filters_limit_row_regex_data_client] +# [END bigtable_filters_limit_row_sample] +# [START bigtable_filters_limit_row_regex] def filter_limit_row_regex(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -47,8 +47,8 @@ def filter_limit_row_regex(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_row_regex_data_client] -# [START bigtable_filters_limit_cells_per_col_data_client] +# [END bigtable_filters_limit_row_regex] +# [START bigtable_filters_limit_cells_per_col] def filter_limit_cells_per_col(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -64,8 +64,8 @@ def filter_limit_cells_per_col(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_cells_per_col_data_client] -# [START bigtable_filters_limit_cells_per_row_data_client] +# [END bigtable_filters_limit_cells_per_col] +# [START bigtable_filters_limit_cells_per_row] def filter_limit_cells_per_row(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -81,8 +81,8 @@ def filter_limit_cells_per_row(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_cells_per_row_data_client] -# [START bigtable_filters_limit_cells_per_row_offset_data_client] +# [END bigtable_filters_limit_cells_per_row] +# [START bigtable_filters_limit_cells_per_row_offset] def filter_limit_cells_per_row_offset(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -98,8 +98,8 @@ def filter_limit_cells_per_row_offset(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_cells_per_row_offset_data_client] -# [START bigtable_filters_limit_col_family_regex_data_client] +# [END bigtable_filters_limit_cells_per_row_offset] +# [START bigtable_filters_limit_col_family_regex] def filter_limit_col_family_regex(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -117,8 +117,8 @@ def filter_limit_col_family_regex(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_col_family_regex_data_client] -# [START bigtable_filters_limit_col_qualifier_regex_data_client] +# [END bigtable_filters_limit_col_family_regex] +# [START bigtable_filters_limit_col_qualifier_regex] def filter_limit_col_qualifier_regex(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -138,8 +138,8 @@ def filter_limit_col_qualifier_regex(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_col_qualifier_regex_data_client] -# [START bigtable_filters_limit_col_range_data_client] +# [END bigtable_filters_limit_col_qualifier_regex] +# [START bigtable_filters_limit_col_range] def filter_limit_col_range(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -159,8 +159,8 @@ def filter_limit_col_range(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_col_range_data_client] -# [START bigtable_filters_limit_value_range_data_client] +# [END bigtable_filters_limit_col_range] +# [START bigtable_filters_limit_value_range] def filter_limit_value_range(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -178,8 +178,8 @@ def filter_limit_value_range(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_value_range_data_client] -# [START bigtable_filters_limit_value_regex_data_client] +# [END bigtable_filters_limit_value_range] +# [START bigtable_filters_limit_value_regex] def filter_limit_value_regex(project_id, instance_id, table_id): @@ -199,8 +199,8 @@ def filter_limit_value_regex(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_value_regex_data_client] -# [START bigtable_filters_limit_timestamp_range_data_client] +# [END bigtable_filters_limit_value_regex] +# [START bigtable_filters_limit_timestamp_range] def filter_limit_timestamp_range(project_id, instance_id, table_id): import datetime @@ -220,8 +220,8 @@ def filter_limit_timestamp_range(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_timestamp_range_data_client] -# [START bigtable_filters_limit_block_all_data_client] +# [END bigtable_filters_limit_timestamp_range] +# [START bigtable_filters_limit_block_all] def filter_limit_block_all(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -237,8 +237,8 @@ def filter_limit_block_all(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_block_all_data_client] -# [START bigtable_filters_limit_pass_all_data_client] +# [END bigtable_filters_limit_block_all] +# [START bigtable_filters_limit_pass_all] def filter_limit_pass_all(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -254,8 +254,8 @@ def filter_limit_pass_all(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_pass_all_data_client] -# [START bigtable_filters_modify_strip_value_data_client] +# [END bigtable_filters_limit_pass_all] +# [START bigtable_filters_modify_strip_value] def filter_modify_strip_value(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -271,8 +271,8 @@ def filter_modify_strip_value(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_modify_strip_value_data_client] -# [START bigtable_filters_modify_apply_label_data_client] +# [END bigtable_filters_modify_strip_value] +# [START bigtable_filters_modify_apply_label] def filter_modify_apply_label(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -288,8 +288,8 @@ def filter_modify_apply_label(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_modify_apply_label_data_client] -# [START bigtable_filters_composing_chain_data_client] +# [END bigtable_filters_modify_apply_label] +# [START bigtable_filters_composing_chain] def filter_composing_chain(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -312,8 +312,8 @@ def filter_composing_chain(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_composing_chain_data_client] -# [START bigtable_filters_composing_interleave_data_client] +# [END bigtable_filters_composing_chain] +# [START bigtable_filters_composing_interleave] def filter_composing_interleave(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -336,8 +336,8 @@ def filter_composing_interleave(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_composing_interleave_data_client] -# [START bigtable_filters_composing_condition_data_client] +# [END bigtable_filters_composing_interleave] +# [START bigtable_filters_composing_condition] def filter_composing_condition(project_id, instance_id, table_id): from google.cloud.bigtable.data import ( BigtableDataClient, @@ -364,9 +364,10 @@ def filter_composing_condition(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_composing_condition_data_client] +# [END bigtable_filters_composing_condition] +# [START bigtable_filters_print] def print_row(row): from google.cloud._helpers import _datetime_from_microseconds @@ -387,3 +388,6 @@ def print_row(row): ) ) print("") + + +# [END bigtable_filters_print] diff --git a/packages/google-cloud-bigtable/samples/data_client_async/hello/async_main.py b/packages/google-cloud-bigtable/samples/data_client_async/hello/async_main.py index 31a524d9264d..f6ac5f1b6d83 100644 --- a/packages/google-cloud-bigtable/samples/data_client_async/hello/async_main.py +++ b/packages/google-cloud-bigtable/samples/data_client_async/hello/async_main.py @@ -31,9 +31,8 @@ from google.cloud import bigtable from google.cloud.bigtable.data import row_filters -from ...utils import wait_for_table - # [END bigtable_async_hw_imports] +from ...utils import wait_for_table # use to ignore warnings row_filters @@ -47,6 +46,7 @@ async def main(project_id, instance_id, table_id): # [START bigtable_async_hw_create_table] from google.api_core.exceptions import AlreadyExists + from google.cloud import bigtable_admin # the async client only supports the data API. Table creation is an admin operation @@ -140,6 +140,7 @@ async def main(project_id, instance_id, table_id): print("Deleting the {} table.".format(table_id)) await admin_client.delete_table(name=table_path) + await table.close() await client.close() # [END bigtable_async_hw_delete_table] diff --git a/packages/google-cloud-bigtable/samples/data_client_async/snippets/data_client_snippets_async.py b/packages/google-cloud-bigtable/samples/data_client_async/snippets/data_client_snippets_async.py index 2d5a7e39521a..15a4e562614d 100644 --- a/packages/google-cloud-bigtable/samples/data_client_async/snippets/data_client_snippets_async.py +++ b/packages/google-cloud-bigtable/samples/data_client_async/snippets/data_client_snippets_async.py @@ -143,32 +143,32 @@ async def write_aggregate(table): async def write_aggregate(project_id, instance_id, table_id): """Increments a value in a Bigtable table using AddToCell mutation.""" async with BigtableDataClientAsync(project=project_id) as client: - table = client.get_table(instance_id, table_id) - row_key = "unique_device_ids_1" - try: - async with table.mutations_batcher() as batcher: - # The AddToCell mutation increments the value of a cell. - # The `counters` family must be set up to be an aggregate - # family with an int64 input type. - reading = AddToCell( - family="counters", - qualifier="odometer", - value=32304, - # Convert nanoseconds to microseconds - timestamp_micros=time.time_ns() // 1000, - ) - await batcher.append( - RowMutationEntry(row_key.encode("utf-8"), [reading]) - ) - except MutationsExceptionGroup as e: - # MutationsExceptionGroup contains a FailedMutationEntryError for - # each mutation that failed. - for sub_exception in e.exceptions: - failed_entry: RowMutationEntry = sub_exception.entry - cause: Exception = sub_exception.__cause__ - print( - f"Failed mutation for row {failed_entry.row_key!r} with error: {cause!r}" - ) + async with client.get_table(instance_id, table_id) as table: + row_key = "unique_device_ids_1" + try: + async with table.mutations_batcher() as batcher: + # The AddToCell mutation increments the value of a cell. + # The `counters` family must be set up to be an aggregate + # family with an int64 input type. + reading = AddToCell( + family="counters", + qualifier="odometer", + value=32304, + # Convert nanoseconds to microseconds + timestamp_micros=time.time_ns() // 1000, + ) + await batcher.append( + RowMutationEntry(row_key.encode("utf-8"), [reading]) + ) + except MutationsExceptionGroup as e: + # MutationsExceptionGroup contains a FailedMutationEntryError for + # each mutation that failed. + for sub_exception in e.exceptions: + failed_entry: RowMutationEntry = sub_exception.entry + cause: Exception = sub_exception.__cause__ + print( + f"Failed mutation for row {failed_entry.row_key!r} with error: {cause!r}" + ) # [END bigtable_async_write_aggregate] await write_aggregate(table.client.project, table.instance_id, table.table_id) @@ -247,6 +247,36 @@ async def read_row_range(project_id, instance_id, table_id): await read_row_range(table.client.project, table.instance_id, table.table_id) +async def read_row_ranges(table): + # [START bigtable_async_reads_row_ranges] + from google.cloud.bigtable.data import ( + BigtableDataClientAsync, + ReadRowsQuery, + RowRange, + ) + + async def read_row_ranges(project_id, instance_id, table_id): + async with BigtableDataClientAsync(project=project_id) as client: + async with client.get_table(instance_id, table_id) as table: + row_ranges = [ + RowRange( + start_key=b"phone#4c410523#20190501", + end_key=b"phone#4c410523#201906201", + ), + RowRange( + start_key=b"phone#5c10102#20190501", + end_key=b"phone#5c10102#201906201", + ), + ] + query = ReadRowsQuery(row_ranges=row_ranges) + + async for row in await table.read_rows_stream(query): + print(row) + + # [END bigtable_async_reads_row_ranges] + await read_row_ranges(table.client.project, table.instance_id, table.table_id) + + async def read_with_prefix(table): # [START bigtable_async_reads_prefix] from google.cloud.bigtable.data import ( @@ -313,3 +343,29 @@ async def execute_query(project_id, instance_id, table_id): # [END bigtable_async_execute_query] await execute_query(table.client.project, table.instance_id, table.table_id) + + +# [START bigtable_async_reads_print] +def print_row(row): + from google.cloud._helpers import _datetime_from_microseconds + + print("Reading data for {}:".format(row.row_key.decode("utf-8"))) + last_family = None + for cell in row.cells: + if last_family != cell.family: + print("Column Family {}".format(cell.family)) + last_family = cell.family + + labels = " [{}]".format(",".join(cell.labels)) if len(cell.labels) else "" + print( + "\t{}: {} @{}{}".format( + cell.qualifier.decode("utf-8"), + cell.value.decode("utf-8"), + _datetime_from_microseconds(cell.timestamp_micros), + labels, + ) + ) + print("") + + +# [END bigtable_async_reads_print] diff --git a/packages/google-cloud-bigtable/samples/data_client_async/snippets/data_client_snippets_async_test.py b/packages/google-cloud-bigtable/samples/data_client_async/snippets/data_client_snippets_async_test.py index 6742d2260a83..d7e4d46b2402 100644 --- a/packages/google-cloud-bigtable/samples/data_client_async/snippets/data_client_snippets_async_test.py +++ b/packages/google-cloud-bigtable/samples/data_client_async/snippets/data_client_snippets_async_test.py @@ -102,6 +102,11 @@ async def test_read_row_range(table): await data_snippets.read_row_range(table) +@pytest.mark.asyncio +async def test_read_row_ranges(table): + await data_snippets.read_row_ranges(table) + + @pytest.mark.asyncio async def test_read_with_prefix(table): await data_snippets.read_with_prefix(table) diff --git a/packages/google-cloud-bigtable/samples/data_client_async/snippets/filter_snippets_async.py b/packages/google-cloud-bigtable/samples/data_client_async/snippets/filter_snippets_async.py index 899d4c5c78e9..d2e7da1bb57c 100644 --- a/packages/google-cloud-bigtable/samples/data_client_async/snippets/filter_snippets_async.py +++ b/packages/google-cloud-bigtable/samples/data_client_async/snippets/filter_snippets_async.py @@ -367,6 +367,7 @@ async def filter_composing_condition(project_id, instance_id, table_id): # [END bigtable_filters_composing_condition_asyncio] +# [START bigtable_filters_print_asyncio] def print_row(row): from google.cloud._helpers import _datetime_from_microseconds @@ -387,3 +388,6 @@ def print_row(row): ) ) print("") + + +# [END bigtable_filters_print_asyncio] diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/deletes_snippets.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/deletes_snippets.py index 09f467577732..7637dbc35faf 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/deletes_snippets.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/snippets/deletes/deletes_snippets.py @@ -14,7 +14,7 @@ # limitations under the License. -# [START bigtable_delete_from_column] +# [START bigtable_delete_from_column_legacy] def delete_from_column(project_id, instance_id, table_id): from google.cloud.bigtable import Client @@ -26,10 +26,10 @@ def delete_from_column(project_id, instance_id, table_id): row.commit() -# [END bigtable_delete_from_column] +# [END bigtable_delete_from_column_legacy] -# [START bigtable_delete_from_column_family] +# [START bigtable_delete_from_column_family_legacy] def delete_from_column_family(project_id, instance_id, table_id): from google.cloud.bigtable import Client @@ -41,10 +41,10 @@ def delete_from_column_family(project_id, instance_id, table_id): row.commit() -# [END bigtable_delete_from_column_family] +# [END bigtable_delete_from_column_family_legacy] -# [START bigtable_delete_from_row] +# [START bigtable_delete_from_row_legacy] def delete_from_row(project_id, instance_id, table_id): from google.cloud.bigtable import Client @@ -56,10 +56,10 @@ def delete_from_row(project_id, instance_id, table_id): row.commit() -# [END bigtable_delete_from_row] +# [END bigtable_delete_from_row_legacy] -# [START bigtable_streaming_and_batching] +# [START bigtable_streaming_and_batching_legacy] def streaming_and_batching(project_id, instance_id, table_id): from google.cloud.bigtable import Client @@ -75,10 +75,10 @@ def streaming_and_batching(project_id, instance_id, table_id): batcher.mutate_rows(rows) -# [END bigtable_streaming_and_batching] +# [END bigtable_streaming_and_batching_legacy] -# [START bigtable_check_and_mutate] +# [START bigtable_check_and_mutate_legacy] def check_and_mutate(project_id, instance_id, table_id): from google.cloud.bigtable import Client @@ -91,10 +91,10 @@ def check_and_mutate(project_id, instance_id, table_id): row.commit() -# [END bigtable_check_and_mutate] +# [END bigtable_check_and_mutate_legacy] -# [START bigtable_drop_row_range] +# [START bigtable_drop_row_range_legacy] def drop_row_range(project_id, instance_id, table_id): from google.cloud.bigtable import Client @@ -105,10 +105,10 @@ def drop_row_range(project_id, instance_id, table_id): table.drop_by_prefix(row_key_prefix, timeout=200) -# [END bigtable_drop_row_range] +# [END bigtable_drop_row_range_legacy] -# [START bigtable_delete_column_family] +# [START bigtable_delete_column_family_legacy] def delete_column_family(project_id, instance_id, table_id): from google.cloud.bigtable import Client @@ -120,10 +120,10 @@ def delete_column_family(project_id, instance_id, table_id): column_family_obj.delete() -# [END bigtable_delete_column_family] +# [END bigtable_delete_column_family_legacy] -# [START bigtable_delete_table] +# [START bigtable_delete_table_legacy] def delete_table(project_id, instance_id, table_id): from google.cloud.bigtable import Client @@ -133,4 +133,4 @@ def delete_table(project_id, instance_id, table_id): table.delete() -# [END bigtable_delete_table] +# [END bigtable_delete_table_legacy] diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/filter_snippets.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/filter_snippets.py index f2a1a0fd0a06..911c64f97922 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/filter_snippets.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/snippets/filters/filter_snippets.py @@ -14,7 +14,7 @@ # limitations under the License. -# [START bigtable_filters_limit_row_sample] +# [START bigtable_filters_limit_row_sample_legacy] def filter_limit_row_sample(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -28,8 +28,8 @@ def filter_limit_row_sample(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_row_sample] -# [START bigtable_filters_limit_row_regex] +# [END bigtable_filters_limit_row_sample_legacy] +# [START bigtable_filters_limit_row_regex_legacy] def filter_limit_row_regex(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -45,8 +45,8 @@ def filter_limit_row_regex(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_row_regex] -# [START bigtable_filters_limit_cells_per_col] +# [END bigtable_filters_limit_row_regex_legacy] +# [START bigtable_filters_limit_cells_per_col_legacy] def filter_limit_cells_per_col(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -60,8 +60,8 @@ def filter_limit_cells_per_col(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_cells_per_col] -# [START bigtable_filters_limit_cells_per_row] +# [END bigtable_filters_limit_cells_per_col_legacy] +# [START bigtable_filters_limit_cells_per_row_legacy] def filter_limit_cells_per_row(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -75,8 +75,8 @@ def filter_limit_cells_per_row(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_cells_per_row] -# [START bigtable_filters_limit_cells_per_row_offset] +# [END bigtable_filters_limit_cells_per_row_legacy] +# [START bigtable_filters_limit_cells_per_row_offset_legacy] def filter_limit_cells_per_row_offset(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -90,8 +90,8 @@ def filter_limit_cells_per_row_offset(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_cells_per_row_offset] -# [START bigtable_filters_limit_col_family_regex] +# [END bigtable_filters_limit_cells_per_row_offset_legacy] +# [START bigtable_filters_limit_col_family_regex_legacy] def filter_limit_col_family_regex(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -107,8 +107,8 @@ def filter_limit_col_family_regex(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_col_family_regex] -# [START bigtable_filters_limit_col_qualifier_regex] +# [END bigtable_filters_limit_col_family_regex_legacy] +# [START bigtable_filters_limit_col_qualifier_regex_legacy] def filter_limit_col_qualifier_regex(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -124,8 +124,8 @@ def filter_limit_col_qualifier_regex(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_col_qualifier_regex] -# [START bigtable_filters_limit_col_range] +# [END bigtable_filters_limit_col_qualifier_regex_legacy] +# [START bigtable_filters_limit_col_range_legacy] def filter_limit_col_range(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -143,8 +143,8 @@ def filter_limit_col_range(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_col_range] -# [START bigtable_filters_limit_value_range] +# [END bigtable_filters_limit_col_range_legacy] +# [START bigtable_filters_limit_value_range_legacy] def filter_limit_value_range(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -161,8 +161,8 @@ def filter_limit_value_range(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_value_range] -# [START bigtable_filters_limit_value_regex] +# [END bigtable_filters_limit_value_range_legacy] +# [START bigtable_filters_limit_value_regex_legacy] def filter_limit_value_regex(project_id, instance_id, table_id): @@ -180,8 +180,8 @@ def filter_limit_value_regex(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_value_regex] -# [START bigtable_filters_limit_timestamp_range] +# [END bigtable_filters_limit_value_regex_legacy] +# [START bigtable_filters_limit_timestamp_range_legacy] def filter_limit_timestamp_range(project_id, instance_id, table_id): import datetime @@ -201,8 +201,8 @@ def filter_limit_timestamp_range(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_timestamp_range] -# [START bigtable_filters_limit_block_all] +# [END bigtable_filters_limit_timestamp_range_legacy] +# [START bigtable_filters_limit_block_all_legacy] def filter_limit_block_all(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -216,8 +216,8 @@ def filter_limit_block_all(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_block_all] -# [START bigtable_filters_limit_pass_all] +# [END bigtable_filters_limit_block_all_legacy] +# [START bigtable_filters_limit_pass_all_legacy] def filter_limit_pass_all(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -231,8 +231,8 @@ def filter_limit_pass_all(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_limit_pass_all] -# [START bigtable_filters_modify_strip_value] +# [END bigtable_filters_limit_pass_all_legacy] +# [START bigtable_filters_modify_strip_value_legacy] def filter_modify_strip_value(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -246,8 +246,8 @@ def filter_modify_strip_value(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_modify_strip_value] -# [START bigtable_filters_modify_apply_label] +# [END bigtable_filters_modify_strip_value_legacy] +# [START bigtable_filters_modify_apply_label_legacy] def filter_modify_apply_label(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -261,8 +261,8 @@ def filter_modify_apply_label(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_modify_apply_label] -# [START bigtable_filters_composing_chain] +# [END bigtable_filters_modify_apply_label_legacy] +# [START bigtable_filters_composing_chain_legacy] def filter_composing_chain(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -283,8 +283,8 @@ def filter_composing_chain(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_composing_chain] -# [START bigtable_filters_composing_interleave] +# [END bigtable_filters_composing_chain_legacy] +# [START bigtable_filters_composing_interleave_legacy] def filter_composing_interleave(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -305,8 +305,8 @@ def filter_composing_interleave(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_composing_interleave] -# [START bigtable_filters_composing_condition] +# [END bigtable_filters_composing_interleave_legacy] +# [START bigtable_filters_composing_condition_legacy] def filter_composing_condition(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -331,10 +331,10 @@ def filter_composing_condition(project_id, instance_id, table_id): print_row(row) -# [END bigtable_filters_composing_condition] +# [END bigtable_filters_composing_condition_legacy] -# [START bigtable_filters_print] +# [START bigtable_filters_print_legacy] def print_row(row): print("Reading data for {}:".format(row.row_key.decode("utf-8"))) for cf, cols in sorted(row.cells.items()): @@ -355,4 +355,4 @@ def print_row(row): print("") -# [END bigtable_filters_print] +# [END bigtable_filters_print_legacy] diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/read_snippets.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/read_snippets.py index 1d4ee3d8e650..bb14dfbafd5b 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/read_snippets.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/snippets/reads/read_snippets.py @@ -14,7 +14,7 @@ # limitations under the License. -# [START bigtable_reads_row] +# [START bigtable_reads_row_legacy] def read_row(project_id, instance_id, table_id): from google.cloud import bigtable @@ -28,10 +28,10 @@ def read_row(project_id, instance_id, table_id): print_row(row) -# [END bigtable_reads_row] +# [END bigtable_reads_row_legacy] -# [START bigtable_reads_row_partial] +# [START bigtable_reads_row_partial_legacy] def read_row_partial(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -47,8 +47,8 @@ def read_row_partial(project_id, instance_id, table_id): print_row(row) -# [END bigtable_reads_row_partial] -# [START bigtable_reads_rows] +# [END bigtable_reads_row_partial_legacy] +# [START bigtable_reads_rows_legacy] def read_rows(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable.row_set import RowSet @@ -66,8 +66,8 @@ def read_rows(project_id, instance_id, table_id): print_row(row) -# [END bigtable_reads_rows] -# [START bigtable_reads_row_range] +# [END bigtable_reads_rows_legacy] +# [START bigtable_reads_row_range_legacy] def read_row_range(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable.row_set import RowSet @@ -86,8 +86,8 @@ def read_row_range(project_id, instance_id, table_id): print_row(row) -# [END bigtable_reads_row_range] -# [START bigtable_reads_row_ranges] +# [END bigtable_reads_row_range_legacy] +# [START bigtable_reads_row_ranges_legacy] def read_row_ranges(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable.row_set import RowSet @@ -109,8 +109,8 @@ def read_row_ranges(project_id, instance_id, table_id): print_row(row) -# [END bigtable_reads_row_ranges] -# [START bigtable_reads_prefix] +# [END bigtable_reads_row_ranges_legacy] +# [START bigtable_reads_prefix_legacy] def read_prefix(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable.row_set import RowSet @@ -129,8 +129,8 @@ def read_prefix(project_id, instance_id, table_id): print_row(row) -# [END bigtable_reads_prefix] -# [START bigtable_reads_filter] +# [END bigtable_reads_prefix_legacy] +# [START bigtable_reads_filter_legacy] def read_filter(project_id, instance_id, table_id): from google.cloud import bigtable from google.cloud.bigtable import row_filters @@ -144,10 +144,10 @@ def read_filter(project_id, instance_id, table_id): print_row(row) -# [END bigtable_reads_filter] +# [END bigtable_reads_filter_legacy] -# [START bigtable_reads_print] +# [START bigtable_reads_print_legacy] def print_row(row): print("Reading data for {}:".format(row.row_key.decode("utf-8"))) for cf, cols in sorted(row.cells.items()): @@ -168,4 +168,4 @@ def print_row(row): print("") -# [END bigtable_reads_print] +# [END bigtable_reads_print_legacy] diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_batch.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_batch.py index a583bb7134e1..a703c9ed67af 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_batch.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_batch.py @@ -12,7 +12,7 @@ # 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. -# [START bigtable_writes_batch] +# [START bigtable_writes_batch_legacy] from datetime import datetime, timezone from google.cloud import bigtable @@ -43,4 +43,4 @@ def write_batch(project_id, instance_id, table_id): print("Successfully wrote 2 rows.") -# [END bigtable_writes_batch] +# [END bigtable_writes_batch_legacy] diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_conditionally.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_conditionally.py index b6f05fba77f4..b4b5194fb785 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_conditionally.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_conditionally.py @@ -12,7 +12,7 @@ # 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. -# [START bigtable_writes_conditional] +# [START bigtable_writes_conditional_legacy] from datetime import datetime, timezone from google.cloud import bigtable @@ -43,4 +43,4 @@ def write_conditional(project_id, instance_id, table_id): print("Successfully updated row's os_name.") -# [END bigtable_writes_conditional] +# [END bigtable_writes_conditional_legacy] diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_increment.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_increment.py index ac8e2d16af34..3b282d1bf962 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_increment.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_increment.py @@ -12,7 +12,7 @@ # 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. -# [START bigtable_writes_increment] +# [START bigtable_writes_increment_legacy] from google.cloud import bigtable @@ -33,4 +33,4 @@ def write_increment(project_id, instance_id, table_id): print("Successfully updated row {}.".format(row_key)) -# [END bigtable_writes_increment] +# [END bigtable_writes_increment_legacy] diff --git a/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_simple.py b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_simple.py index fb7074bc526e..46313a675dba 100644 --- a/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_simple.py +++ b/packages/google-cloud-bigtable/samples/legacy_client/snippets/writes/write_simple.py @@ -13,7 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -# [START bigtable_writes_simple] +# [START bigtable_writes_simple_legacy] from datetime import datetime, timezone from google.cloud import bigtable @@ -39,4 +39,4 @@ def write_simple(project_id, instance_id, table_id): print("Successfully wrote row {}.".format(row_key)) -# [END bigtable_writes_simple] +# [END bigtable_writes_simple_legacy] diff --git a/packages/google-cloud-bigtable/samples/utils.py b/packages/google-cloud-bigtable/samples/utils.py index e50b63fc77ea..62cf1049d401 100644 --- a/packages/google-cloud-bigtable/samples/utils.py +++ b/packages/google-cloud-bigtable/samples/utils.py @@ -44,11 +44,12 @@ def __enter__(self): return self._table def __exit__(self, *args): - if self._table.exists(): + admin_client = bigtable_admin.BigtableTableAdminClient() + try: if self._verbose: print(f"deleting table: {self._table.table_id}") - delete_retry(self._table.delete()) - else: + delete_retry(admin_client.delete_table)(name=self._table.name) + except exceptions.NotFound: if self._verbose: print(f"table {self._table.table_id} not found") @@ -57,12 +58,18 @@ def create_table(project, instance_id, table_id, column_families={}): """ Creates a new table, and blocks until it reaches a ready state """ + admin_client = bigtable_admin.BigtableTableAdminClient() + instance_path = admin_client.instance_path(project, instance_id) + table_path = admin_client.table_path(project, instance_id, table_id) + + try: + admin_client.delete_table(name=table_path) + except exceptions.NotFound: + pass + client = bigtable.Client(project=project, admin=True) instance = client.instance(instance_id) - table = instance.table(table_id) - if table.exists(): - table.delete() # convert column families to pb if needed pb_families = { @@ -72,16 +79,15 @@ def create_table(project, instance_id, table_id, column_families={}): for (id, rule) in column_families.items() } - # create table using gapic layer - instance._client.table_admin_client.create_table( + admin_client.create_table( request={ - "parent": instance.name, + "parent": instance_path, "table_id": table_id, "table": {"column_families": pb_families}, } ) - wait_for_table(table) + wait_for_table(table_path) return table @@ -108,5 +114,8 @@ def wait_for_table(table): table_path = table.table_name if hasattr(table, "table_name") else str(table) admin_client = bigtable_admin.BigtableTableAdminClient() admin_client.get_table( - name=table_path, view=bigtable_admin.Table.View.NAME_ONLY + request={ + "name": table_path, + "view": bigtable_admin.Table.View.NAME_ONLY, + } )