diff --git a/samples/samples/__init__.py b/samples/samples/__init__.py new file mode 100644 index 0000000000..6b607710ed --- /dev/null +++ b/samples/samples/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2020 Google LLC +# +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file or at +# https://developers.google.com/open-source/licenses/bsd diff --git a/samples/samples/autocommit.py b/samples/samples/autocommit.py new file mode 100644 index 0000000000..e28cd22f83 --- /dev/null +++ b/samples/samples/autocommit.py @@ -0,0 +1,68 @@ +# Copyright 2020 Google LLC +# +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file or at +# https://developers.google.com/open-source/licenses/bsd + +import argparse + +from google.cloud import spanner_dbapi +from google.cloud.spanner_dbapi import connect + + +def enable_autocommit_mode(instance_id, database_id): + """Enables autocommit mode.""" + # [START spanner_enable_autocommit_mode] + connection = connect(instance_id, database_id) + connection.autocommit = True + print("Autocommit mode is enabled.") + + cursor = connection.cursor() + + cursor.execute( + """CREATE TABLE Singers ( + SingerId INT64 NOT NULL, + FirstName STRING(1024), + LastName STRING(1024), + SingerInfo BYTES(MAX) + ) PRIMARY KEY (SingerId)""" + ) + + cursor.execute( + """INSERT INTO Singers (SingerId, FirstName, LastName) VALUES + (12, 'Melissa', 'Garcia'), + (13, 'Russell', 'Morales'), + (14, 'Jacqueline', 'Long'), + (15, 'Dylan', 'Shaw')""" + ) + + cursor.execute("""SELECT * FROM Singers WHERE SingerId = 13""") + + print( + "SingerId: {}, AlbumId: {}, AlbumTitle: {}".format(*cursor.fetchone()) + ) + + connection.close() + # [END spanner_enable_autocommit_mode] + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + parser.add_argument("instance_id", help="Your Cloud Spanner instance ID.") + parser.add_argument( + "--database-id", + help="Your Cloud Spanner database ID.", + default="example_db", + ) + subparsers = parser.add_subparsers(dest="command") + subparsers.add_parser( + "enable_autocommit_mode", help=enable_autocommit_mode.__doc__ + ) + args = parser.parse_args() + if args.command == "enable_autocommit_mode": + enable_autocommit_mode(args.instance_id, args.database_id) + else: + print(f"Command {args.command} did not match expected commands.") diff --git a/samples/samples/test_autocommit.py b/samples/samples/test_autocommit.py new file mode 100644 index 0000000000..6f17e3ca92 --- /dev/null +++ b/samples/samples/test_autocommit.py @@ -0,0 +1,57 @@ +# Copyright 2020 Google LLC +# +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file or at +# https://developers.google.com/open-source/licenses/bsd + +import uuid + +from google.api_core.exceptions import DeadlineExceeded +from google.cloud import spanner +import pytest + +from . import autocommit + + +def unique_instance_id(): + """Creates a unique id for the database.""" + return f"test-instance-{uuid.uuid4().hex[:10]}" + + +def unique_database_id(): + """Creates a unique id for the database.""" + return f"test-db-{uuid.uuid4().hex[:10]}" + + +INSTANCE_ID = unique_instance_id() +DATABASE_ID = unique_database_id() + + +@pytest.fixture(scope="module") +def spanner_instance(): + spanner_client = spanner.Client() + config_name = ( + f"{spanner_client.project_name}/instanceConfigs/regional-us-central1" + ) + + instance = spanner_client.instance(INSTANCE_ID, config_name) + op = instance.create() + op.result(120) # block until completion + yield instance + instance.delete() + + +@pytest.fixture(scope="module") +def database(spanner_instance): + """Creates a temporary database that is removed after testing.""" + db = spanner_instance.database(DATABASE_ID) + db.create() + yield db + db.drop() + + +def test_enable_autocommit_mode(capsys, database): + autocommit.enable_autocommit_mode(INSTANCE_ID, DATABASE_ID) + out, _ = capsys.readouterr() + assert "Autocommit mode is enabled." in out + assert "SingerId: 13, AlbumId: Russell, AlbumTitle: Morales" in out diff --git a/tests/system/test_system.py b/tests/system/test_system.py index f3ee345e15..b7dc47a010 100644 --- a/tests/system/test_system.py +++ b/tests/system/test_system.py @@ -4,8 +4,9 @@ # license that can be found in the LICENSE file or at # https://developers.google.com/open-source/licenses/bsd -import unittest import os +import unittest +import uuid from google.api_core import exceptions @@ -104,7 +105,7 @@ def tearDownModule(): class TestTransactionsManagement(unittest.TestCase): """Transactions management support tests.""" - DATABASE_NAME = "db-api-transactions-management" + DATABASE_NAME = f"db-api-transactions-mgmt-{uuid.uuid4().hex[:5]}" @classmethod def setUpClass(cls):