From 2c34d2873ef5f599a2cc3656a3bfbb3ad2c293e0 Mon Sep 17 00:00:00 2001 From: larkee Date: Fri, 1 Oct 2021 08:32:17 +1000 Subject: [PATCH 1/4] samples: add tagging samples --- samples/samples/snippets.py | 67 ++++++++++++++++++++++++++++++++ samples/samples/snippets_test.py | 15 +++++++ 2 files changed, 82 insertions(+) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 163fdf85d8..118c1e5166 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -2043,6 +2043,73 @@ def create_client_with_query_options(instance_id, database_id): # [END spanner_create_client_with_query_options] +def set_transaction_tag(instance_id, database_id): + """Executes a transaction with a transaction tag.""" + # [START spanner_set_transaction_tag] + # instance_id = "your-spanner-instance" + # database_id = "your-spanner-db-id" + spanner_client = spanner.Client() + instance = spanner_client.instance(instance_id) + database = instance.database(database_id) + + def update_venues(transaction): + # Sets the request tag to "app=concert,env=dev,action=update". + # This request tag will only be set on this request. + transaction.execute_update( + "UPDATE Venues SET Capacity = Capacity/4 WHERE OutdoorVenue false", + request_options={"request_tag": "app=concert,env=dev,action=update"} + ) + print("Venue capacities updated.") + + # Sets the request tag to "app=concert,env=dev,action=insert". + # This request tag will only be set on this request. + transaction.execute_update( + "INSERT INTO Venues (VenueId, VenueName, Capacity, OutdoorVenue) " + "VALUES (@venueId, @venueName, @capacity, @outdoorVenue)", + params={ + "venueId": 81, + "venueName": "Venue 81", + "capacity": 1440, + "outdoorVenue": True + }, + param_types={ + "venueId": param_types.INT64, + "venueName": param_types.STRING, + "capacity": param_types.INT64, + "outdoorVenue": param_types.BOOL + }, + request_options={"request_tag": "app=concert,env=dev,action=insert"} + ) + print("New venue inserted.") + + database.run_in_transaction( + update_venues, transaction_tag="app=concert,env=dev" + ) + + # [END spanner_set_transaction_tag] + + +def set_request_tag(instance_id, database_id): + """Executes a snapshot read with a request tag.""" + # [START spanner_set_request_tag] + # instance_id = "your-spanner-instance" + # database_id = "your-spanner-db-id" + spanner_client = spanner.Client() + instance = spanner_client.instance(instance_id) + database = instance.database(database_id) + + with database.snapshot() as snapshot: + results = snapshot.execute_sql( + "SELECT SingerId, AlbumId, AlbumTitle FROM Albums", + request_options={"request_tag": "app=concert,env=dev,action=select"} + ) + + for row in results: + print(u"SingerId: {}, AlbumId: {}, AlbumTitle: {}".format(*row)) + + # [END spanner_set_request_tag] + + if __name__ == "__main__": # noqa: C901 parser = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter diff --git a/samples/samples/snippets_test.py b/samples/samples/snippets_test.py index 94fa361a17..f5244d99f1 100644 --- a/samples/samples/snippets_test.py +++ b/samples/samples/snippets_test.py @@ -614,3 +614,18 @@ def test_create_client_with_query_options(capsys, instance_id, sample_database): assert "VenueId: 4, VenueName: Venue 4, LastUpdateTime:" in out assert "VenueId: 19, VenueName: Venue 19, LastUpdateTime:" in out assert "VenueId: 42, VenueName: Venue 42, LastUpdateTime:" in out + + +@pytest.mark.dependency(depends=["insert_datatypes_data"]) +def test_set_transaction_tag(capsys, instance_id, sample_database): + snippets.set_transaction_tag(instance_id, sample_database.database_id) + out, _ = capsys.readouterr() + assert "Venue capacities updated." in out + assert "New venue inserted." in out + + +@pytest.mark.dependency(depends=["insert_data"]) +def test_set_request_tag(capsys, instance_id, sample_database): + snippets.set_request_tag(instance_id, sample_database.database_id) + out, _ = capsys.readouterr() + assert "SingerId: 1, AlbumId: 1, AlbumTitle: Total Junk" in out From 6e47aa9d82365a8f2593b995d1b0338b54ad5ac7 Mon Sep 17 00:00:00 2001 From: larkee Date: Wed, 6 Oct 2021 16:44:27 +1100 Subject: [PATCH 2/4] samples: fix SQL statements --- samples/samples/snippets.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 118c1e5166..c3952ed313 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -2056,7 +2056,7 @@ def update_venues(transaction): # Sets the request tag to "app=concert,env=dev,action=update". # This request tag will only be set on this request. transaction.execute_update( - "UPDATE Venues SET Capacity = Capacity/4 WHERE OutdoorVenue false", + "UPDATE Venues SET Capacity = Capacity/4 WHERE OutdoorVenue = false", request_options={"request_tag": "app=concert,env=dev,action=update"} ) print("Venue capacities updated.") @@ -2064,8 +2064,8 @@ def update_venues(transaction): # Sets the request tag to "app=concert,env=dev,action=insert". # This request tag will only be set on this request. transaction.execute_update( - "INSERT INTO Venues (VenueId, VenueName, Capacity, OutdoorVenue) " - "VALUES (@venueId, @venueName, @capacity, @outdoorVenue)", + "INSERT INTO Venues (VenueId, VenueName, Capacity, OutdoorVenue, LastUpdateTime) " + "VALUES (@venueId, @venueName, @capacity, @outdoorVenue, PENDING_COMMIT_TIMESTAMP())", params={ "venueId": 81, "venueName": "Venue 81", From 591de7b55a65308216b38b0337c1a774c1126172 Mon Sep 17 00:00:00 2001 From: larkee Date: Wed, 6 Oct 2021 19:29:42 +1100 Subject: [PATCH 3/4] samples: cast float to int --- samples/samples/snippets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index c3952ed313..f8c4fa0d81 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -2056,7 +2056,7 @@ def update_venues(transaction): # Sets the request tag to "app=concert,env=dev,action=update". # This request tag will only be set on this request. transaction.execute_update( - "UPDATE Venues SET Capacity = Capacity/4 WHERE OutdoorVenue = false", + "UPDATE Venues SET Capacity = CAST(Capacity/4 AS INT664) WHERE OutdoorVenue = false", request_options={"request_tag": "app=concert,env=dev,action=update"} ) print("Venue capacities updated.") From 1726ee6908ff2dc34dcb61e5547040b498abca07 Mon Sep 17 00:00:00 2001 From: larkee Date: Wed, 6 Oct 2021 21:05:27 +1100 Subject: [PATCH 4/4] samples: fix typo --- samples/samples/snippets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index f8c4fa0d81..5a3ac6df24 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -2056,7 +2056,7 @@ def update_venues(transaction): # Sets the request tag to "app=concert,env=dev,action=update". # This request tag will only be set on this request. transaction.execute_update( - "UPDATE Venues SET Capacity = CAST(Capacity/4 AS INT664) WHERE OutdoorVenue = false", + "UPDATE Venues SET Capacity = CAST(Capacity/4 AS INT64) WHERE OutdoorVenue = false", request_options={"request_tag": "app=concert,env=dev,action=update"} ) print("Venue capacities updated.")