From f46f3236157439bbb2b9f01a84566363b8a699c6 Mon Sep 17 00:00:00 2001 From: rahul yadav Date: Mon, 4 Mar 2024 15:11:43 +0530 Subject: [PATCH 1/3] docs: use autogenerated methods the fetch names from admin samples --- samples/samples/backup_sample.py | 141 ++++++++++------ samples/samples/pg_snippets.py | 73 ++++---- samples/samples/snippets.py | 275 ++++++++++++++++++------------- 3 files changed, 296 insertions(+), 193 deletions(-) diff --git a/samples/samples/backup_sample.py b/samples/samples/backup_sample.py index d72dde87a6..2b6413dcac 100644 --- a/samples/samples/backup_sample.py +++ b/samples/samples/backup_sample.py @@ -35,23 +35,25 @@ def create_backup(instance_id, database_id, backup_id, version_time): backup as backup_pb spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + instance_admin_api = spanner_client.instance_admin_api + database_admin_api = spanner_client.database_admin_api # Create a backup expire_time = datetime.utcnow() + timedelta(days=14) request = backup_pb.CreateBackupRequest( - parent=instance.name, + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), backup_id=backup_id, backup=backup_pb.Backup( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), expire_time=expire_time, version_time=version_time, ), ) - operation = spanner_client.database_admin_api.create_backup(request) + operation = database_admin_api.create_backup(request) # Wait for backup operation to complete. backup = operation.result(2100) @@ -81,8 +83,8 @@ def create_backup_with_encryption_key( backup as backup_pb spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + instance_admin_api = spanner_client.instance_admin_api + database_admin_api = spanner_client.database_admin_api # Create a backup expire_time = datetime.utcnow() + timedelta(days=14) @@ -91,15 +93,17 @@ def create_backup_with_encryption_key( "kms_key_name": kms_key_name, } request = backup_pb.CreateBackupRequest( - parent=instance.name, + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), backup_id=backup_id, backup=backup_pb.Backup( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), expire_time=expire_time, ), encryption_config=encryption_config, ) - operation = spanner_client.database_admin_api.create_backup(request) + operation = database_admin_api.create_backup(request) # Wait for backup operation to complete. backup = operation.result(2100) @@ -124,13 +128,16 @@ def restore_database(instance_id, new_database_id, backup_id): from google.cloud.spanner_admin_database_v1 import RestoreDatabaseRequest spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) + instance_admin_api = spanner_client.instance_admin_api # Start restoring an existing backup to a new database. request = RestoreDatabaseRequest( - parent=instance.name, + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), database_id=new_database_id, - backup="{}/backups/{}".format(instance.name, backup_id), + backup="{}/backups/{}".format( + instance_admin_api.instance_path(spanner_client.project, instance_id), + backup_id, + ), ) operation = spanner_client.database_admin_api.restore_database(request) @@ -161,7 +168,7 @@ def restore_database_with_encryption_key( RestoreDatabaseEncryptionConfig, RestoreDatabaseRequest) spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) + instance_admin_api = spanner_client.instance_admin_api # Start restoring an existing backup to a new database. encryption_config = { @@ -170,9 +177,12 @@ def restore_database_with_encryption_key( } request = RestoreDatabaseRequest( - parent=instance.name, + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), database_id=new_database_id, - backup="{}/backups/{}".format(instance.name, backup_id), + backup="{}/backups/{}".format( + instance_admin_api.instance_path(spanner_client.project, instance_id), + backup_id, + ), encryption_config=encryption_config, ) operation = spanner_client.database_admin_api.restore_database(request) @@ -201,43 +211,53 @@ def cancel_backup(instance_id, database_id, backup_id): backup as backup_pb spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + instance_admin_api = spanner_client.instance_admin_api + database_admin_api = spanner_client.database_admin_api expire_time = datetime.utcnow() + timedelta(days=30) # Create a backup. request = backup_pb.CreateBackupRequest( - parent=instance.name, + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), backup_id=backup_id, backup=backup_pb.Backup( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), expire_time=expire_time, ), ) - operation = spanner_client.database_admin_api.create_backup(request) + operation = database_admin_api.create_backup(request) # Cancel backup creation. operation.cancel() - # Cancel operations are best effort so either it will complete or + # Cancel operations are the best effort so either it will complete or # be cancelled. while not operation.done(): time.sleep(300) # 5 mins try: - spanner_client.database_admin_api.get_backup( + database_admin_api.get_backup( backup_pb.GetBackupRequest( - name="{}/backups/{}".format(instance.name, backup_id) + name="{}/backups/{}".format( + instance_admin_api.instance_path( + spanner_client.project, instance_id + ), + backup_id, + ) ) ) except NotFound: print("Backup creation was successfully cancelled.") return print("Backup was created before the cancel completed.") - spanner_client.database_admin_api.delete_backup( + database_admin_api.delete_backup( backup_pb.DeleteBackupRequest( - name="{}/backups/{}".format(instance.name, backup_id) + name="{}/backups/{}".format( + instance_admin_api.instance_path(spanner_client.project, instance_id), + backup_id, + ) ) ) print("Backup deleted.") @@ -252,7 +272,7 @@ def list_backup_operations(instance_id, database_id, backup_id): backup as backup_pb spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) + instance_admin_api = spanner_client.instance_admin_api # List the CreateBackup operations. filter_ = ( @@ -261,7 +281,8 @@ def list_backup_operations(instance_id, database_id, backup_id): "AND (metadata.database:{})" ).format(database_id) request = backup_pb.ListBackupOperationsRequest( - parent=instance.name, filter=filter_ + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + filter=filter_, ) operations = spanner_client.database_admin_api.list_backup_operations(request) for op in operations: @@ -280,7 +301,8 @@ def list_backup_operations(instance_id, database_id, backup_id): "AND (metadata.source_backup:{})" ).format(backup_id) request = backup_pb.ListBackupOperationsRequest( - parent=instance.name, filter=filter_ + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + filter=filter_, ) operations = spanner_client.database_admin_api.list_backup_operations(request) for op in operations: @@ -305,7 +327,7 @@ def list_database_operations(instance_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) + instance_admin_api = spanner_client.instance_admin_api # List the progress of restore. filter_ = ( @@ -313,7 +335,8 @@ def list_database_operations(instance_id): "google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata)" ) request = spanner_database_admin.ListDatabaseOperationsRequest( - parent=instance.name, filter=filter_ + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + filter=filter_, ) operations = spanner_client.database_admin_api.list_database_operations(request) for op in operations: @@ -336,11 +359,14 @@ def list_backups(instance_id, database_id, backup_id): backup as backup_pb spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) + instance_admin_api = spanner_client.instance_admin_api # List all backups. print("All backups:") - request = backup_pb.ListBackupsRequest(parent=instance.name, filter="") + request = backup_pb.ListBackupsRequest( + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + filter="", + ) operations = spanner_client.database_admin_api.list_backups(request) for backup in operations: print(backup.name) @@ -348,7 +374,8 @@ def list_backups(instance_id, database_id, backup_id): # List all backups that contain a name. print('All backups with backup name containing "{}":'.format(backup_id)) request = backup_pb.ListBackupsRequest( - parent=instance.name, filter="name:{}".format(backup_id) + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + filter="name:{}".format(backup_id), ) operations = spanner_client.database_admin_api.list_backups(request) for backup in operations: @@ -357,7 +384,8 @@ def list_backups(instance_id, database_id, backup_id): # List all backups for a database that contains a name. print('All backups with database name containing "{}":'.format(database_id)) request = backup_pb.ListBackupsRequest( - parent=instance.name, filter="database:{}".format(database_id) + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + filter="database:{}".format(database_id), ) operations = spanner_client.database_admin_api.list_backups(request) for backup in operations: @@ -371,7 +399,7 @@ def list_backups(instance_id, database_id, backup_id): ) ) request = backup_pb.ListBackupsRequest( - parent=instance.name, + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), filter='expire_time < "{}-{}-{}T{}:{}:{}Z"'.format(*expire_time.timetuple()), ) operations = spanner_client.database_admin_api.list_backups(request) @@ -381,7 +409,8 @@ def list_backups(instance_id, database_id, backup_id): # List all backups with a size greater than some bytes. print("All backups with backup size more than 100 bytes:") request = backup_pb.ListBackupsRequest( - parent=instance.name, filter="size_bytes > 100" + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + filter="size_bytes > 100", ) operations = spanner_client.database_admin_api.list_backups(request) for backup in operations: @@ -395,7 +424,7 @@ def list_backups(instance_id, database_id, backup_id): ) ) request = backup_pb.ListBackupsRequest( - parent=instance.name, + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), filter='create_time >= "{}-{}-{}T{}:{}:{}Z" AND state:READY'.format( *create_time.timetuple() ), @@ -408,7 +437,10 @@ def list_backups(instance_id, database_id, backup_id): # If there are multiple pages, additional ``ListBackup`` # requests will be made as needed while iterating. paged_backups = set() - request = backup_pb.ListBackupsRequest(parent=instance.name, page_size=2) + request = backup_pb.ListBackupsRequest( + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + page_size=2, + ) operations = spanner_client.database_admin_api.list_backups(request) for backup in operations: paged_backups.add(backup.name) @@ -425,10 +457,13 @@ def delete_backup(instance_id, backup_id): backup as backup_pb spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) + instance_admin_api = spanner_client.instance_admin_api backup = spanner_client.database_admin_api.get_backup( backup_pb.GetBackupRequest( - name="{}/backups/{}".format(instance.name, backup_id) + name="{}/backups/{}".format( + instance_admin_api.instance_path(spanner_client.project, instance_id), + backup_id, + ) ) ) @@ -437,7 +472,12 @@ def delete_backup(instance_id, backup_id): time.sleep(30) backup = spanner_client.database_admin_api.get_backup( backup_pb.GetBackupRequest( - name="{}/backups/{}".format(instance.name, backup_id) + name="{}/backups/{}".format( + instance_admin_api.instance_path( + spanner_client.project, instance_id + ), + backup_id, + ) ) ) @@ -465,11 +505,14 @@ def update_backup(instance_id, backup_id): backup as backup_pb spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) + instance_admin_api = spanner_client.instance_admin_api backup = spanner_client.database_admin_api.get_backup( backup_pb.GetBackupRequest( - name="{}/backups/{}".format(instance.name, backup_id) + name="{}/backups/{}".format( + instance_admin_api.instance_path(spanner_client.project, instance_id), + backup_id, + ) ) ) @@ -503,7 +546,7 @@ def create_database_with_version_retention_period( spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) + instance_admin_api = spanner_client.instance_admin_api ddl_statements = [ "CREATE TABLE Singers (" + " SingerId INT64 NOT NULL," @@ -524,7 +567,9 @@ def create_database_with_version_retention_period( ] operation = spanner_client.database_admin_api.create_database( request=spanner_database_admin.CreateDatabaseRequest( - parent=instance.name, + parent=instance_admin_api.instance_path( + spanner_client.project, instance_id + ), create_statement="CREATE DATABASE `{}`".format(database_id), extra_statements=ddl_statements, ) @@ -553,12 +598,12 @@ def copy_backup(instance_id, backup_id, source_backup_path): backup as backup_pb spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) + instance_admin_api = spanner_client.instance_admin_api # Create a backup object and wait for copy backup operation to complete. expire_time = datetime.utcnow() + timedelta(days=14) request = backup_pb.CopyBackupRequest( - parent=instance.name, + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), backup_id=backup_id, source_backup=source_backup_path, expire_time=expire_time, diff --git a/samples/samples/pg_snippets.py b/samples/samples/pg_snippets.py index fe5ebab02c..61f7a09608 100644 --- a/samples/samples/pg_snippets.py +++ b/samples/samples/pg_snippets.py @@ -73,10 +73,10 @@ def create_database(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) + instance_admin_api = spanner_client.instance_admin_api request = spanner_database_admin.CreateDatabaseRequest( - parent=instance.name, + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), create_statement=f'CREATE DATABASE "{database_id}"', database_dialect=DatabaseDialect.POSTGRESQL, ) @@ -244,14 +244,15 @@ def add_column(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=["ALTER TABLE Albums ADD COLUMN MarketingBudget BIGINT"], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -444,18 +445,19 @@ def add_storing_index(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ "CREATE INDEX AlbumsByAlbumTitle2 ON Albums(AlbumTitle)" "INCLUDE (MarketingBudget)" ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -1093,11 +1095,12 @@ def create_table_with_datatypes(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ """CREATE TABLE Venues ( VenueId BIGINT NOT NULL, @@ -1111,7 +1114,7 @@ def create_table_with_datatypes(instance_id, database_id): PRIMARY KEY (VenueId))""" ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -1477,15 +1480,16 @@ def add_jsonb_column(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=["ALTER TABLE Venues ADD COLUMN VenueDetails JSONB"], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -1593,11 +1597,12 @@ def create_sequence(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ "CREATE SEQUENCE Seq BIT_REVERSED_POSITIVE", """CREATE TABLE Customers ( @@ -1607,7 +1612,7 @@ def create_sequence(instance_id, database_id): )""", ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -1633,6 +1638,9 @@ def insert_customers(transaction): ) ) + instance = spanner_client.instance(instance_id) + database = instance.database(database_id) + database.run_in_transaction(insert_customers) @@ -1647,14 +1655,15 @@ def alter_sequence(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=["ALTER SEQUENCE Seq SKIP RANGE 1000 5000000"], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -1681,6 +1690,9 @@ def insert_customers(transaction): ) ) + instance = spanner_client.instance(instance_id) + database = instance.database(database_id) + database.run_in_transaction(insert_customers) @@ -1695,17 +1707,18 @@ def drop_sequence(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ "ALTER TABLE Customers ALTER COLUMN CustomerId DROP DEFAULT", "DROP SEQUENCE Seq", ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 3cef929309..96d753829e 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -164,9 +164,11 @@ def list_databases(instance_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) + instance_admin_api = spanner_client.instance_admin_api - request = spanner_database_admin.ListDatabasesRequest(parent=instance.name) + request = spanner_database_admin.ListDatabasesRequest( + parent=instance_admin_api.instance_path(spanner_client.project, instance_id) + ) for database in spanner_client.database_admin_api.list_databases(request=request): print( @@ -186,10 +188,10 @@ def create_database(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) + instance_admin_api = spanner_client.instance_admin_api request = spanner_database_admin.CreateDatabaseRequest( - parent=instance.name, + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), create_statement=f"CREATE DATABASE `{database_id}`", extra_statements=[ """CREATE TABLE Singers ( @@ -215,7 +217,12 @@ def create_database(instance_id, database_id): print("Waiting for operation to complete...") database = operation.result(OPERATION_TIMEOUT_SECONDS) - print("Created database {} on instance {}".format(database.name, instance.name)) + print( + "Created database {} on instance {}".format( + database.name, + instance_admin_api.instance_path(spanner_client.project, instance_id), + ) + ) # [END spanner_create_database] @@ -228,11 +235,14 @@ def update_database(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) + instance_admin_api = spanner_client.instance_admin_api request = spanner_database_admin.UpdateDatabaseRequest( database=spanner_database_admin.Database( - name="{}/databases/{}".format(instance.name, database_id), + name="{}/databases/{}".format( + instance_admin_api.instance_path(spanner_client.project, instance_id), + database_id, + ), enable_drop_protection=True, ), update_mask={"paths": ["enable_drop_protection"]}, @@ -240,12 +250,18 @@ def update_database(instance_id, database_id): operation = spanner_client.database_admin_api.update_database(request=request) print( "Waiting for update operation for {}/databases/{} to complete...".format( - instance.name, database_id + instance_admin_api.instance_path(spanner_client.project, instance_id), + database_id, ) ) operation.result(OPERATION_TIMEOUT_SECONDS) - print("Updated database {}/databases/{}.".format(instance.name, database_id)) + print( + "Updated database {}/databases/{}.".format( + instance_admin_api.instance_path(spanner_client.project, instance_id), + database_id, + ) + ) # [END spanner_update_database] @@ -259,10 +275,10 @@ def create_database_with_encryption_key(instance_id, database_id, kms_key_name): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) + instance_admin_api = spanner_client.instance_admin_api request = spanner_database_admin.CreateDatabaseRequest( - parent=instance.name, + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), create_statement=f"CREATE DATABASE `{database_id}`", extra_statements=[ """CREATE TABLE Singers ( @@ -303,32 +319,29 @@ def create_database_with_default_leader(instance_id, database_id, default_leader spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) + instance_admin_api = spanner_client.instance_admin_api - operation = spanner_client.database_admin_api.create_database( - request=spanner_database_admin.CreateDatabaseRequest( - parent=instance.name, - create_statement=f"CREATE DATABASE `{database_id}`", - extra_statements=[ - """CREATE TABLE Singers ( - SingerId INT64 NOT NULL, - FirstName STRING(1024), - LastName STRING(1024), - SingerInfo BYTES(MAX) - ) PRIMARY KEY (SingerId)""", - """CREATE TABLE Albums ( - SingerId INT64 NOT NULL, - AlbumId INT64 NOT NULL, - AlbumTitle STRING(MAX) - ) PRIMARY KEY (SingerId, AlbumId), - INTERLEAVE IN PARENT Singers ON DELETE CASCADE""", - "ALTER DATABASE {}" - " SET OPTIONS (default_leader = '{}')".format( - database_id, default_leader - ), - ], - ) + request = spanner_database_admin.CreateDatabaseRequest( + parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + create_statement=f"CREATE DATABASE `{database_id}`", + extra_statements=[ + """CREATE TABLE Singers ( + SingerId INT64 NOT NULL, + FirstName STRING(1024), + LastName STRING(1024), + SingerInfo BYTES(MAX) + ) PRIMARY KEY (SingerId)""", + """CREATE TABLE Albums ( + SingerId INT64 NOT NULL, + AlbumId INT64 NOT NULL, + AlbumTitle STRING(MAX) + ) PRIMARY KEY (SingerId, AlbumId), + INTERLEAVE IN PARENT Singers ON DELETE CASCADE""", + "ALTER DATABASE {}" + " SET OPTIONS (default_leader = '{}')".format(database_id, default_leader), + ], ) + operation = spanner_client.database_admin_api.create_database(request=request) print("Waiting for operation to complete...") database = operation.result(OPERATION_TIMEOUT_SECONDS) @@ -350,17 +363,18 @@ def update_database_with_default_leader(instance_id, database_id, default_leader spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ "ALTER DATABASE {}" " SET OPTIONS (default_leader = '{}')".format(database_id, default_leader) ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) operation.result(OPERATION_TIMEOUT_SECONDS) @@ -376,9 +390,12 @@ def update_database_with_default_leader(instance_id, database_id, default_leader def get_database_ddl(instance_id, database_id): """Gets the database DDL statements.""" spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) - ddl = spanner_client.database_admin_api.get_database_ddl(database=database.name) + database_admin_api = spanner_client.database_admin_api + ddl = database_admin_api.get_database_ddl( + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ) + ) print("Retrieved database DDL for {}".format(database_id)) for statement in ddl.statements: print(statement) @@ -639,15 +656,16 @@ def add_index(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=["CREATE INDEX AlbumsByAlbumTitle ON Albums(AlbumTitle)"], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -742,18 +760,19 @@ def add_storing_index(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ "CREATE INDEX AlbumsByAlbumTitle2 ON Albums(AlbumTitle)" "STORING (MarketingBudget)" ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -805,17 +824,18 @@ def add_column(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ "ALTER TABLE Albums ADD COLUMN MarketingBudget INT64", ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -967,11 +987,12 @@ def create_table_with_timestamp(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ """CREATE TABLE Performances ( SingerId INT64 NOT NULL, @@ -985,7 +1006,7 @@ def create_table_with_timestamp(instance_id, database_id): ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -1034,19 +1055,19 @@ def add_timestamp_column(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ "ALTER TABLE Albums ADD COLUMN LastUpdateTime TIMESTAMP " "OPTIONS(allow_commit_timestamp=true)" ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -1138,15 +1159,16 @@ def add_numeric_column(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=["ALTER TABLE Venues ADD COLUMN Revenue NUMERIC"], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -1205,15 +1227,16 @@ def add_json_column(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=["ALTER TABLE Venues ADD COLUMN VenueDetails JSON"], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -1915,11 +1938,12 @@ def create_table_with_datatypes(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ """CREATE TABLE Venues ( VenueId INT64 NOT NULL, @@ -1935,7 +1959,7 @@ def create_table_with_datatypes(instance_id, database_id): ) PRIMARY KEY (VenueId)""" ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -2509,14 +2533,15 @@ def add_and_drop_database_roles(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api role_parent = "new_parent" role_child = "new_child" request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ "CREATE ROLE {}".format(role_parent), "GRANT SELECT ON TABLE Singers TO ROLE {}".format(role_parent), @@ -2524,7 +2549,7 @@ def add_and_drop_database_roles(instance_id, database_id): "GRANT ROLE {} TO ROLE {}".format(role_parent, role_child), ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) operation.result(OPERATION_TIMEOUT_SECONDS) print( @@ -2532,13 +2557,15 @@ def add_and_drop_database_roles(instance_id, database_id): ) request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ "REVOKE ROLE {} FROM ROLE {}".format(role_parent, role_child), "DROP ROLE {}".format(role_child), ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) operation.result(OPERATION_TIMEOUT_SECONDS) print("Revoked privileges and dropped role {}".format(role_child)) @@ -2573,10 +2600,13 @@ def list_database_roles(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api - request = spanner_database_admin.ListDatabaseRolesRequest(parent=database.name) + request = spanner_database_admin.ListDatabaseRolesRequest( + parent=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ) + ) # List database roles. print("Database Roles are:") for role in spanner_client.database_admin_api.list_database_roles(request): @@ -2603,18 +2633,19 @@ def enable_fine_grained_access( from google.type import expr_pb2 spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api # The policy in the response from getDatabaseIAMPolicy might use the policy version # that you specified, or it might use a lower policy version. For example, if you # specify version 3, but the policy has no conditional role bindings, the response # uses version 1. Valid values are 0, 1, and 3. request = iam_policy_pb2.GetIamPolicyRequest( - resource=database.name, + resource=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), options=options_pb2.GetPolicyOptions(requested_policy_version=3), ) - policy = spanner_client.database_admin_api.get_iam_policy(request=request) + policy = database_admin_api.get_iam_policy(request=request) if policy.version < 3: policy.version = 3 @@ -2630,12 +2661,14 @@ def enable_fine_grained_access( policy.version = 3 policy.bindings.append(new_binding) set_request = iam_policy_pb2.SetIamPolicyRequest( - resource=database.name, + resource=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), policy=policy, ) - spanner_client.database_admin_api.set_iam_policy(set_request) + database_admin_api.set_iam_policy(set_request) - new_policy = spanner_client.database_admin_api.get_iam_policy(request=request) + new_policy = database_admin_api.get_iam_policy(request=request) print( f"Enabled fine-grained access in IAM. New policy has version {new_policy.version}" ) @@ -2650,11 +2683,12 @@ def create_table_with_foreign_key_delete_cascade(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ """CREATE TABLE Customers ( CustomerId INT64 NOT NULL, @@ -2673,7 +2707,7 @@ def create_table_with_foreign_key_delete_cascade(instance_id, database_id): ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -2697,11 +2731,12 @@ def alter_table_with_foreign_key_delete_cascade(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ """ALTER TABLE ShoppingCarts ADD CONSTRAINT FKShoppingCartsCustomerName @@ -2711,7 +2746,7 @@ def alter_table_with_foreign_key_delete_cascade(instance_id, database_id): ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -2735,18 +2770,19 @@ def drop_foreign_key_constraint_delete_cascade(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ """ALTER TABLE ShoppingCarts DROP CONSTRAINT FKShoppingCartsCustomerName""" ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -2770,11 +2806,12 @@ def create_sequence(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ "CREATE SEQUENCE Seq OPTIONS (sequence_kind = 'bit_reversed_positive')", """CREATE TABLE Customers ( @@ -2784,7 +2821,7 @@ def create_sequence(instance_id, database_id): ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -2811,6 +2848,9 @@ def insert_customers(transaction): ) ) + instance = spanner_client.instance(instance_id) + database = instance.database(database_id) + database.run_in_transaction(insert_customers) @@ -2825,17 +2865,18 @@ def alter_sequence(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ "ALTER SEQUENCE Seq SET OPTIONS (skip_range_min = 1000, skip_range_max = 5000000)", ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) @@ -2862,6 +2903,9 @@ def insert_customers(transaction): ) ) + instance = spanner_client.instance(instance_id) + database = instance.database(database_id) + database.run_in_transaction(insert_customers) @@ -2876,18 +2920,19 @@ def drop_sequence(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance = spanner_client.instance(instance_id) - database = instance.database(database_id) + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseDdlRequest( - database=database.name, + database=database_admin_api.database_path( + spanner_client.project, instance_id, database_id + ), statements=[ "ALTER TABLE Customers ALTER COLUMN CustomerId DROP DEFAULT", "DROP SEQUENCE Seq", ], ) - operation = spanner_client.database_admin_api.update_database_ddl(request) + operation = database_admin_api.update_database_ddl(request) print("Waiting for operation to complete...") operation.result(OPERATION_TIMEOUT_SECONDS) From 9ee3911a0e5b15202b3742707f4625dce3a720ed Mon Sep 17 00:00:00 2001 From: rahul yadav Date: Mon, 4 Mar 2024 15:40:05 +0530 Subject: [PATCH 2/3] use database_admin_api for instance_path --- samples/samples/backup_sample.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/samples/samples/backup_sample.py b/samples/samples/backup_sample.py index 2b6413dcac..40aed8e17f 100644 --- a/samples/samples/backup_sample.py +++ b/samples/samples/backup_sample.py @@ -35,14 +35,13 @@ def create_backup(instance_id, database_id, backup_id, version_time): backup as backup_pb spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api database_admin_api = spanner_client.database_admin_api # Create a backup expire_time = datetime.utcnow() + timedelta(days=14) request = backup_pb.CreateBackupRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), backup_id=backup_id, backup=backup_pb.Backup( database=database_admin_api.database_path( @@ -83,7 +82,6 @@ def create_backup_with_encryption_key( backup as backup_pb spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api database_admin_api = spanner_client.database_admin_api # Create a backup @@ -93,7 +91,7 @@ def create_backup_with_encryption_key( "kms_key_name": kms_key_name, } request = backup_pb.CreateBackupRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), backup_id=backup_id, backup=backup_pb.Backup( database=database_admin_api.database_path( @@ -211,14 +209,13 @@ def cancel_backup(instance_id, database_id, backup_id): backup as backup_pb spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api database_admin_api = spanner_client.database_admin_api expire_time = datetime.utcnow() + timedelta(days=30) # Create a backup. request = backup_pb.CreateBackupRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), backup_id=backup_id, backup=backup_pb.Backup( database=database_admin_api.database_path( @@ -241,7 +238,7 @@ def cancel_backup(instance_id, database_id, backup_id): database_admin_api.get_backup( backup_pb.GetBackupRequest( name="{}/backups/{}".format( - instance_admin_api.instance_path( + database_admin_api.instance_path( spanner_client.project, instance_id ), backup_id, @@ -255,7 +252,7 @@ def cancel_backup(instance_id, database_id, backup_id): database_admin_api.delete_backup( backup_pb.DeleteBackupRequest( name="{}/backups/{}".format( - instance_admin_api.instance_path(spanner_client.project, instance_id), + database_admin_api.instance_path(spanner_client.project, instance_id), backup_id, ) ) From 472310899b7e01707b4cebccc3dcc4ae9fd5aefe Mon Sep 17 00:00:00 2001 From: rahul yadav Date: Mon, 4 Mar 2024 16:17:34 +0530 Subject: [PATCH 3/3] incorporate changes --- samples/samples/backup_sample.py | 139 ++++++++++++++----------------- samples/samples/pg_snippets.py | 6 +- samples/samples/snippets.py | 41 +++++---- 3 files changed, 86 insertions(+), 100 deletions(-) diff --git a/samples/samples/backup_sample.py b/samples/samples/backup_sample.py index 40aed8e17f..d3c2c667c5 100644 --- a/samples/samples/backup_sample.py +++ b/samples/samples/backup_sample.py @@ -126,18 +126,17 @@ def restore_database(instance_id, new_database_id, backup_id): from google.cloud.spanner_admin_database_v1 import RestoreDatabaseRequest spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api + database_admin_api = spanner_client.database_admin_api # Start restoring an existing backup to a new database. request = RestoreDatabaseRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), database_id=new_database_id, - backup="{}/backups/{}".format( - instance_admin_api.instance_path(spanner_client.project, instance_id), - backup_id, + backup=database_admin_api.backup_path( + spanner_client.project, instance_id, backup_id ), ) - operation = spanner_client.database_admin_api.restore_database(request) + operation = database_admin_api.restore_database(request) # Wait for restore operation to complete. db = operation.result(1600) @@ -166,7 +165,7 @@ def restore_database_with_encryption_key( RestoreDatabaseEncryptionConfig, RestoreDatabaseRequest) spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api + database_admin_api = spanner_client.database_admin_api # Start restoring an existing backup to a new database. encryption_config = { @@ -175,15 +174,14 @@ def restore_database_with_encryption_key( } request = RestoreDatabaseRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), database_id=new_database_id, - backup="{}/backups/{}".format( - instance_admin_api.instance_path(spanner_client.project, instance_id), - backup_id, + backup=database_admin_api.backup_path( + spanner_client.project, instance_id, backup_id ), encryption_config=encryption_config, ) - operation = spanner_client.database_admin_api.restore_database(request) + operation = database_admin_api.restore_database(request) # Wait for restore operation to complete. db = operation.result(1600) @@ -237,12 +235,9 @@ def cancel_backup(instance_id, database_id, backup_id): try: database_admin_api.get_backup( backup_pb.GetBackupRequest( - name="{}/backups/{}".format( - database_admin_api.instance_path( - spanner_client.project, instance_id - ), - backup_id, - ) + name=database_admin_api.backup_path( + spanner_client.project, instance_id, backup_id + ), ) ) except NotFound: @@ -251,10 +246,9 @@ def cancel_backup(instance_id, database_id, backup_id): print("Backup was created before the cancel completed.") database_admin_api.delete_backup( backup_pb.DeleteBackupRequest( - name="{}/backups/{}".format( - database_admin_api.instance_path(spanner_client.project, instance_id), - backup_id, - ) + name=database_admin_api.backup_path( + spanner_client.project, instance_id, backup_id + ), ) ) print("Backup deleted.") @@ -269,7 +263,7 @@ def list_backup_operations(instance_id, database_id, backup_id): backup as backup_pb spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api + database_admin_api = spanner_client.database_admin_api # List the CreateBackup operations. filter_ = ( @@ -278,10 +272,10 @@ def list_backup_operations(instance_id, database_id, backup_id): "AND (metadata.database:{})" ).format(database_id) request = backup_pb.ListBackupOperationsRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), filter=filter_, ) - operations = spanner_client.database_admin_api.list_backup_operations(request) + operations = database_admin_api.list_backup_operations(request) for op in operations: metadata = protobuf_helpers.from_any_pb( backup_pb.CreateBackupMetadata, op.metadata @@ -298,10 +292,10 @@ def list_backup_operations(instance_id, database_id, backup_id): "AND (metadata.source_backup:{})" ).format(backup_id) request = backup_pb.ListBackupOperationsRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), filter=filter_, ) - operations = spanner_client.database_admin_api.list_backup_operations(request) + operations = database_admin_api.list_backup_operations(request) for op in operations: metadata = protobuf_helpers.from_any_pb( backup_pb.CopyBackupMetadata, op.metadata @@ -324,7 +318,7 @@ def list_database_operations(instance_id): spanner_database_admin spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api + database_admin_api = spanner_client.database_admin_api # List the progress of restore. filter_ = ( @@ -332,10 +326,10 @@ def list_database_operations(instance_id): "google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata)" ) request = spanner_database_admin.ListDatabaseOperationsRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), filter=filter_, ) - operations = spanner_client.database_admin_api.list_database_operations(request) + operations = database_admin_api.list_database_operations(request) for op in operations: metadata = protobuf_helpers.from_any_pb( spanner_database_admin.OptimizeRestoredDatabaseMetadata, op.metadata @@ -356,35 +350,35 @@ def list_backups(instance_id, database_id, backup_id): backup as backup_pb spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api + database_admin_api = spanner_client.database_admin_api # List all backups. print("All backups:") request = backup_pb.ListBackupsRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), filter="", ) - operations = spanner_client.database_admin_api.list_backups(request) + operations = database_admin_api.list_backups(request) for backup in operations: print(backup.name) # List all backups that contain a name. print('All backups with backup name containing "{}":'.format(backup_id)) request = backup_pb.ListBackupsRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), filter="name:{}".format(backup_id), ) - operations = spanner_client.database_admin_api.list_backups(request) + operations = database_admin_api.list_backups(request) for backup in operations: print(backup.name) # List all backups for a database that contains a name. print('All backups with database name containing "{}":'.format(database_id)) request = backup_pb.ListBackupsRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), filter="database:{}".format(database_id), ) - operations = spanner_client.database_admin_api.list_backups(request) + operations = database_admin_api.list_backups(request) for backup in operations: print(backup.name) @@ -396,20 +390,20 @@ def list_backups(instance_id, database_id, backup_id): ) ) request = backup_pb.ListBackupsRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), filter='expire_time < "{}-{}-{}T{}:{}:{}Z"'.format(*expire_time.timetuple()), ) - operations = spanner_client.database_admin_api.list_backups(request) + operations = database_admin_api.list_backups(request) for backup in operations: print(backup.name) # List all backups with a size greater than some bytes. print("All backups with backup size more than 100 bytes:") request = backup_pb.ListBackupsRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), filter="size_bytes > 100", ) - operations = spanner_client.database_admin_api.list_backups(request) + operations = database_admin_api.list_backups(request) for backup in operations: print(backup.name) @@ -421,12 +415,12 @@ def list_backups(instance_id, database_id, backup_id): ) ) request = backup_pb.ListBackupsRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), filter='create_time >= "{}-{}-{}T{}:{}:{}Z" AND state:READY'.format( *create_time.timetuple() ), ) - operations = spanner_client.database_admin_api.list_backups(request) + operations = database_admin_api.list_backups(request) for backup in operations: print(backup.name) @@ -435,10 +429,10 @@ def list_backups(instance_id, database_id, backup_id): # requests will be made as needed while iterating. paged_backups = set() request = backup_pb.ListBackupsRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), page_size=2, ) - operations = spanner_client.database_admin_api.list_backups(request) + operations = database_admin_api.list_backups(request) for backup in operations: paged_backups.add(backup.name) for backup in paged_backups: @@ -454,38 +448,32 @@ def delete_backup(instance_id, backup_id): backup as backup_pb spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api - backup = spanner_client.database_admin_api.get_backup( + database_admin_api = spanner_client.database_admin_api + backup = database_admin_api.get_backup( backup_pb.GetBackupRequest( - name="{}/backups/{}".format( - instance_admin_api.instance_path(spanner_client.project, instance_id), - backup_id, - ) + name=database_admin_api.backup_path( + spanner_client.project, instance_id, backup_id + ), ) ) # Wait for databases that reference this backup to finish optimizing. while backup.referencing_databases: time.sleep(30) - backup = spanner_client.database_admin_api.get_backup( + backup = database_admin_api.get_backup( backup_pb.GetBackupRequest( - name="{}/backups/{}".format( - instance_admin_api.instance_path( - spanner_client.project, instance_id - ), - backup_id, - ) + name=database_admin_api.backup_path( + spanner_client.project, instance_id, backup_id + ), ) ) # Delete the backup. - spanner_client.database_admin_api.delete_backup( - backup_pb.DeleteBackupRequest(name=backup.name) - ) + database_admin_api.delete_backup(backup_pb.DeleteBackupRequest(name=backup.name)) # Verify that the backup is deleted. try: - backup = spanner_client.database_admin_api.get_backup( + backup = database_admin_api.get_backup( backup_pb.GetBackupRequest(name=backup.name) ) except NotFound: @@ -502,14 +490,13 @@ def update_backup(instance_id, backup_id): backup as backup_pb spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api + database_admin_api = spanner_client.database_admin_api - backup = spanner_client.database_admin_api.get_backup( + backup = database_admin_api.get_backup( backup_pb.GetBackupRequest( - name="{}/backups/{}".format( - instance_admin_api.instance_path(spanner_client.project, instance_id), - backup_id, - ) + name=database_admin_api.backup_path( + spanner_client.project, instance_id, backup_id + ), ) ) @@ -517,7 +504,7 @@ def update_backup(instance_id, backup_id): old_expire_time = backup.expire_time # New expire time should be less than the max expire time new_expire_time = min(backup.max_expire_time, old_expire_time + timedelta(days=30)) - spanner_client.database_admin_api.update_backup( + database_admin_api.update_backup( backup_pb.UpdateBackupRequest( backup=backup_pb.Backup(name=backup.name, expire_time=new_expire_time), update_mask={"paths": ["expire_time"]}, @@ -543,7 +530,7 @@ def create_database_with_version_retention_period( spanner_database_admin spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api + database_admin_api = spanner_client.database_admin_api ddl_statements = [ "CREATE TABLE Singers (" + " SingerId INT64 NOT NULL," @@ -562,9 +549,9 @@ def create_database_with_version_retention_period( database_id, retention_period ), ] - operation = spanner_client.database_admin_api.create_database( + operation = database_admin_api.create_database( request=spanner_database_admin.CreateDatabaseRequest( - parent=instance_admin_api.instance_path( + parent=database_admin_api.instance_path( spanner_client.project, instance_id ), create_statement="CREATE DATABASE `{}`".format(database_id), @@ -579,7 +566,7 @@ def create_database_with_version_retention_period( ) ) - spanner_client.database_admin_api.drop_database( + database_admin_api.drop_database( spanner_database_admin.DropDatabaseRequest(database=db.name) ) @@ -595,18 +582,18 @@ def copy_backup(instance_id, backup_id, source_backup_path): backup as backup_pb spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api + database_admin_api = spanner_client.database_admin_api # Create a backup object and wait for copy backup operation to complete. expire_time = datetime.utcnow() + timedelta(days=14) request = backup_pb.CopyBackupRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), backup_id=backup_id, source_backup=source_backup_path, expire_time=expire_time, ) - operation = spanner_client.database_admin_api.copy_backup(request) + operation = database_admin_api.copy_backup(request) # Wait for backup operation to complete. copy_backup = operation.result(2100) diff --git a/samples/samples/pg_snippets.py b/samples/samples/pg_snippets.py index 61f7a09608..ad8744794a 100644 --- a/samples/samples/pg_snippets.py +++ b/samples/samples/pg_snippets.py @@ -73,15 +73,15 @@ def create_database(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.CreateDatabaseRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), create_statement=f'CREATE DATABASE "{database_id}"', database_dialect=DatabaseDialect.POSTGRESQL, ) - operation = spanner_client.database_admin_api.create_database(request=request) + operation = database_admin_api.create_database(request=request) print("Waiting for operation to complete...") database = operation.result(OPERATION_TIMEOUT_SECONDS) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 96d753829e..5cd1cc8e8b 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -164,13 +164,13 @@ def list_databases(instance_id): spanner_database_admin spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.ListDatabasesRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id) + parent=database_admin_api.instance_path(spanner_client.project, instance_id) ) - for database in spanner_client.database_admin_api.list_databases(request=request): + for database in database_admin_api.list_databases(request=request): print( "Database {} has default leader {}".format( database.name, database.default_leader @@ -188,10 +188,10 @@ def create_database(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.CreateDatabaseRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), create_statement=f"CREATE DATABASE `{database_id}`", extra_statements=[ """CREATE TABLE Singers ( @@ -212,7 +212,7 @@ def create_database(instance_id, database_id): ], ) - operation = spanner_client.database_admin_api.create_database(request=request) + operation = database_admin_api.create_database(request=request) print("Waiting for operation to complete...") database = operation.result(OPERATION_TIMEOUT_SECONDS) @@ -220,7 +220,7 @@ def create_database(instance_id, database_id): print( "Created database {} on instance {}".format( database.name, - instance_admin_api.instance_path(spanner_client.project, instance_id), + database_admin_api.instance_path(spanner_client.project, instance_id), ) ) @@ -235,22 +235,21 @@ def update_database(instance_id, database_id): spanner_database_admin spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.UpdateDatabaseRequest( database=spanner_database_admin.Database( - name="{}/databases/{}".format( - instance_admin_api.instance_path(spanner_client.project, instance_id), - database_id, + name=database_admin_api.database_path( + spanner_client.project, instance_id, database_id ), enable_drop_protection=True, ), update_mask={"paths": ["enable_drop_protection"]}, ) - operation = spanner_client.database_admin_api.update_database(request=request) + operation = database_admin_api.update_database(request=request) print( "Waiting for update operation for {}/databases/{} to complete...".format( - instance_admin_api.instance_path(spanner_client.project, instance_id), + database_admin_api.instance_path(spanner_client.project, instance_id), database_id, ) ) @@ -258,7 +257,7 @@ def update_database(instance_id, database_id): print( "Updated database {}/databases/{}.".format( - instance_admin_api.instance_path(spanner_client.project, instance_id), + database_admin_api.instance_path(spanner_client.project, instance_id), database_id, ) ) @@ -275,10 +274,10 @@ def create_database_with_encryption_key(instance_id, database_id, kms_key_name): spanner_database_admin spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.CreateDatabaseRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), create_statement=f"CREATE DATABASE `{database_id}`", extra_statements=[ """CREATE TABLE Singers ( @@ -297,7 +296,7 @@ def create_database_with_encryption_key(instance_id, database_id, kms_key_name): encryption_config=EncryptionConfig(kms_key_name=kms_key_name), ) - operation = spanner_client.database_admin_api.create_database(request=request) + operation = database_admin_api.create_database(request=request) print("Waiting for operation to complete...") database = operation.result(OPERATION_TIMEOUT_SECONDS) @@ -319,10 +318,10 @@ def create_database_with_default_leader(instance_id, database_id, default_leader spanner_database_admin spanner_client = spanner.Client() - instance_admin_api = spanner_client.instance_admin_api + database_admin_api = spanner_client.database_admin_api request = spanner_database_admin.CreateDatabaseRequest( - parent=instance_admin_api.instance_path(spanner_client.project, instance_id), + parent=database_admin_api.instance_path(spanner_client.project, instance_id), create_statement=f"CREATE DATABASE `{database_id}`", extra_statements=[ """CREATE TABLE Singers ( @@ -341,7 +340,7 @@ def create_database_with_default_leader(instance_id, database_id, default_leader " SET OPTIONS (default_leader = '{}')".format(database_id, default_leader), ], ) - operation = spanner_client.database_admin_api.create_database(request=request) + operation = database_admin_api.create_database(request=request) print("Waiting for operation to complete...") database = operation.result(OPERATION_TIMEOUT_SECONDS) @@ -2609,7 +2608,7 @@ def list_database_roles(instance_id, database_id): ) # List database roles. print("Database Roles are:") - for role in spanner_client.database_admin_api.list_database_roles(request): + for role in database_admin_api.list_database_roles(request): print(role.name.split("/")[-1]) # [END spanner_list_database_roles]