From a903e1bc9cbced11f1b397ec0f66f258afc6aa5d Mon Sep 17 00:00:00 2001 From: Astha Mohta Date: Tue, 4 Oct 2022 14:34:32 +0530 Subject: [PATCH 01/16] chore: auto-release --- .github/release-please.yml | 1 + .github/release-trigger.yml | 1 + 2 files changed, 2 insertions(+) create mode 100644 .github/release-trigger.yml diff --git a/.github/release-please.yml b/.github/release-please.yml index 4507ad05..466597e5 100644 --- a/.github/release-please.yml +++ b/.github/release-please.yml @@ -1 +1,2 @@ releaseType: python +handleGHRelease: true diff --git a/.github/release-trigger.yml b/.github/release-trigger.yml new file mode 100644 index 00000000..d4ca9418 --- /dev/null +++ b/.github/release-trigger.yml @@ -0,0 +1 @@ +enabled: true From 3d1386d359ccceaf57eb7f5d3bcc967dc0f8b77b Mon Sep 17 00:00:00 2001 From: Astha Mohta Date: Thu, 2 Mar 2023 22:10:58 +0530 Subject: [PATCH 02/16] lar --- .../sqlalchemy_spanner/sqlalchemy_spanner.py | 9 ++++- test/test_suite_13.py | 13 +++++++ test/test_suite_14.py | 35 ++++++++++++++----- 3 files changed, 47 insertions(+), 10 deletions(-) diff --git a/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py b/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py index f72d95a1..6b14b59f 100644 --- a/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py +++ b/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py @@ -582,9 +582,16 @@ def create_connect_args(self, url): url.database, ) dist = pkg_resources.get_distribution("sqlalchemy-spanner") + options = {"user_agent": f"gl-{dist.project_name}/{dist.version}"} + options.update(url.query) + if "route_to_leader_enabled" in options: + if options["route_to_leader_enabled"].lower() == "false": + options["route_to_leader_enabled"] = False + else: + options["route_to_leader_enabled"] = True return ( [match.group("instance"), match.group("database"), match.group("project")], - {"user_agent": f"gl-{dist.project_name}/{dist.version}"}, + options, ) @engine_to_connection diff --git a/test/test_suite_13.py b/test/test_suite_13.py index 879e7964..39a7bc43 100644 --- a/test/test_suite_13.py +++ b/test/test_suite_13.py @@ -1593,6 +1593,19 @@ def test_user_agent(self): ) +class RouteToLeaderEnabledTest(SpannerSpecificTestBase): + """Check that SQLAlchemy dialect passes correct route_to_leader_enabled to Client.""" + + def test_route_to_leader(self): + engine = create_engine( + "spanner:///projects/project-id/instances/instance-id/databases/database-id?route_to_leader_enabled=False" + ) + with engine.connect() as connection: + assert ( + connection.connection.instance._client.route_to_leader_enabled == False + ) + + class ExecutionOptionsReadOnlyTest(fixtures.TestBase): """ Check that `execution_options()` method correctly diff --git a/test/test_suite_14.py b/test/test_suite_14.py index 8965eebc..89ca6567 100644 --- a/test/test_suite_14.py +++ b/test/test_suite_14.py @@ -68,15 +68,15 @@ from google.cloud import spanner_dbapi -from sqlalchemy.testing.suite.test_cte import * # noqa: F401, F403 -from sqlalchemy.testing.suite.test_ddl import * # noqa: F401, F403 -from sqlalchemy.testing.suite.test_dialect import * # noqa: F401, F403 -from sqlalchemy.testing.suite.test_insert import * # noqa: F401, F403 -from sqlalchemy.testing.suite.test_reflection import * # noqa: F401, F403 -from sqlalchemy.testing.suite.test_results import * # noqa: F401, F403 -from sqlalchemy.testing.suite.test_select import * # noqa: F401, F403 -from sqlalchemy.testing.suite.test_sequence import * # noqa: F401, F403 -from sqlalchemy.testing.suite.test_update_delete import * # noqa: F401, F403 +# from sqlalchemy.testing.suite.test_cte import * # noqa: F401, F403 +# from sqlalchemy.testing.suite.test_ddl import * # noqa: F401, F403 +# from sqlalchemy.testing.suite.test_dialect import * # noqa: F401, F403 +# from sqlalchemy.testing.suite.test_insert import * # noqa: F401, F403 +# from sqlalchemy.testing.suite.test_reflection import * # noqa: F401, F403 +# from sqlalchemy.testing.suite.test_results import * # noqa: F401, F403 +# from sqlalchemy.testing.suite.test_select import * # noqa: F401, F403 +# from sqlalchemy.testing.suite.test_sequence import * # noqa: F401, F403 +# from sqlalchemy.testing.suite.test_update_delete import * # noqa: F401, F403 from sqlalchemy.testing.suite.test_cte import CTETest as _CTETest from sqlalchemy.testing.suite.test_ddl import TableDDLTest as _TableDDLTest from sqlalchemy.testing.suite.test_ddl import ( @@ -1767,6 +1767,23 @@ def test_user_agent(self): ) +class RouteToLeaderEnabledTest(fixtures.TestBase): + """Check that SQLAlchemy dialect passes correct route_to_leader_enabled to Client.""" + + def setUp(self): + self._engine = create_engine( + "spanner:///projects/appdev-soda-spanner-staging/instances/?route_to_leader_enabled=False" + "sqlalchemy-dialect-test/databases/compliance-test" + ) + self._metadata = MetaData(bind=self._engine) + + def test_route_to_leader_enabled(self): + with self._engine.connect() as connection: + assert ( + connection.connection.instance._client.route_to_leader_enabled == False + ) + + class SimpleUpdateDeleteTest(_SimpleUpdateDeleteTest): """ SPANNER OVERRIDE: From 01e8ba645b1919f45b3dfbfcdd144fb6cffa0b01 Mon Sep 17 00:00:00 2001 From: Astha Mohta Date: Thu, 2 Mar 2023 22:14:17 +0530 Subject: [PATCH 03/16] docs --- google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py b/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py index 6b14b59f..d3d495cd 100644 --- a/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py +++ b/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py @@ -573,6 +573,9 @@ def create_connect_args(self, url): The given URL follows the style: `spanner:///projects/{project-id}/instances/{instance-id}/databases/{database-id}` + + If you want to diable route to leader add the following at the end of the url: + `spanner:///projects/{project-id}/instances/{instance-id}/databases/{database-id}?route_to_leader_enabled=False` """ match = re.match( ( From 0de9463791fb851eac64f042c18ece78db28a8f8 Mon Sep 17 00:00:00 2001 From: Astha Mohta Date: Thu, 2 Mar 2023 22:15:49 +0530 Subject: [PATCH 04/16] changes --- test/test_suite_14.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/test_suite_14.py b/test/test_suite_14.py index 89ca6567..faa88ee9 100644 --- a/test/test_suite_14.py +++ b/test/test_suite_14.py @@ -68,15 +68,15 @@ from google.cloud import spanner_dbapi -# from sqlalchemy.testing.suite.test_cte import * # noqa: F401, F403 -# from sqlalchemy.testing.suite.test_ddl import * # noqa: F401, F403 -# from sqlalchemy.testing.suite.test_dialect import * # noqa: F401, F403 -# from sqlalchemy.testing.suite.test_insert import * # noqa: F401, F403 -# from sqlalchemy.testing.suite.test_reflection import * # noqa: F401, F403 -# from sqlalchemy.testing.suite.test_results import * # noqa: F401, F403 -# from sqlalchemy.testing.suite.test_select import * # noqa: F401, F403 -# from sqlalchemy.testing.suite.test_sequence import * # noqa: F401, F403 -# from sqlalchemy.testing.suite.test_update_delete import * # noqa: F401, F403 +from sqlalchemy.testing.suite.test_cte import * # noqa: F401, F403 +from sqlalchemy.testing.suite.test_ddl import * # noqa: F401, F403 +from sqlalchemy.testing.suite.test_dialect import * # noqa: F401, F403 +from sqlalchemy.testing.suite.test_insert import * # noqa: F401, F403 +from sqlalchemy.testing.suite.test_reflection import * # noqa: F401, F403 +from sqlalchemy.testing.suite.test_results import * # noqa: F401, F403 +from sqlalchemy.testing.suite.test_select import * # noqa: F401, F403 +from sqlalchemy.testing.suite.test_sequence import * # noqa: F401, F403 +from sqlalchemy.testing.suite.test_update_delete import * # noqa: F401, F403 from sqlalchemy.testing.suite.test_cte import CTETest as _CTETest from sqlalchemy.testing.suite.test_ddl import TableDDLTest as _TableDDLTest from sqlalchemy.testing.suite.test_ddl import ( From 3191555b9330a012ece628e9b849272f868de5b7 Mon Sep 17 00:00:00 2001 From: Astha Mohta Date: Thu, 2 Mar 2023 23:13:24 +0530 Subject: [PATCH 05/16] lint --- test/test_suite_13.py | 10 +++++++--- test/test_suite_14.py | 10 +++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/test/test_suite_13.py b/test/test_suite_13.py index 39a7bc43..31854529 100644 --- a/test/test_suite_13.py +++ b/test/test_suite_13.py @@ -1594,15 +1594,19 @@ def test_user_agent(self): class RouteToLeaderEnabledTest(SpannerSpecificTestBase): - """Check that SQLAlchemy dialect passes correct route_to_leader_enabled to Client.""" + """ + Check that SQLAlchemy dialect passes correct + route_to_leader_enabled to Client. + """ def test_route_to_leader(self): engine = create_engine( - "spanner:///projects/project-id/instances/instance-id/databases/database-id?route_to_leader_enabled=False" + "spanner:///projects/project-id/instances/instance-id/databases/database-id" + "?route_to_leader_enabled=False" ) with engine.connect() as connection: assert ( - connection.connection.instance._client.route_to_leader_enabled == False + connection.connection.instance._client.route_to_leader_enabled is False ) diff --git a/test/test_suite_14.py b/test/test_suite_14.py index faa88ee9..7b0c2fbd 100644 --- a/test/test_suite_14.py +++ b/test/test_suite_14.py @@ -1768,11 +1768,15 @@ def test_user_agent(self): class RouteToLeaderEnabledTest(fixtures.TestBase): - """Check that SQLAlchemy dialect passes correct route_to_leader_enabled to Client.""" + """ + Check that SQLAlchemy dialect passes correct + route_to_leader_enabled to Client. + """ def setUp(self): self._engine = create_engine( - "spanner:///projects/appdev-soda-spanner-staging/instances/?route_to_leader_enabled=False" + "spanner:///projects/appdev-soda-spanner-staging/instances/" + "?route_to_leader_enabled=False" "sqlalchemy-dialect-test/databases/compliance-test" ) self._metadata = MetaData(bind=self._engine) @@ -1780,7 +1784,7 @@ def setUp(self): def test_route_to_leader_enabled(self): with self._engine.connect() as connection: assert ( - connection.connection.instance._client.route_to_leader_enabled == False + connection.connection.instance._client.route_to_leader_enabled is False ) From d21ff6b0608b0acaf60419d4236f0f7552bff3d5 Mon Sep 17 00:00:00 2001 From: Astha Mohta Date: Thu, 2 Mar 2023 23:48:58 +0530 Subject: [PATCH 06/16] fix --- test/test_suite_14.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/test/test_suite_14.py b/test/test_suite_14.py index 7b0c2fbd..9d8110da 100644 --- a/test/test_suite_14.py +++ b/test/test_suite_14.py @@ -53,7 +53,7 @@ from sqlalchemy import LargeBinary from sqlalchemy import String from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import relation +from sqlalchemy.orm import relationship from sqlalchemy.orm import Session from sqlalchemy.types import Integer from sqlalchemy.types import Numeric @@ -1671,7 +1671,7 @@ class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True) name = Column(String(50)) - addresses = relation("Address", backref="user") + addresses = relationship("Address", backref="user") class Address(Base): __tablename__ = "addresses" @@ -1776,10 +1776,9 @@ class RouteToLeaderEnabledTest(fixtures.TestBase): def setUp(self): self._engine = create_engine( "spanner:///projects/appdev-soda-spanner-staging/instances/" - "?route_to_leader_enabled=False" "sqlalchemy-dialect-test/databases/compliance-test" + "?route_to_leader_enabled=False" ) - self._metadata = MetaData(bind=self._engine) def test_route_to_leader_enabled(self): with self._engine.connect() as connection: From 994f292daffeb1de9ba6c6320de1b8e52c90ca27 Mon Sep 17 00:00:00 2001 From: Astha Mohta Date: Fri, 3 Mar 2023 00:03:13 +0530 Subject: [PATCH 07/16] change --- noxfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/noxfile.py b/noxfile.py index acc9c1ba..400fa0ab 100644 --- a/noxfile.py +++ b/noxfile.py @@ -192,7 +192,7 @@ def compliance_test_14(session): session.install("-e", ".[tracing]") session.run("python", "create_test_database.py") - session.install("sqlalchemy>=1.4") + session.install("sqlalchemy>=1.4,<2.0") session.run( "py.test", From cef0ae90141feeddec71f443c9686d22c5898709 Mon Sep 17 00:00:00 2001 From: Astha Mohta Date: Fri, 3 Mar 2023 00:04:09 +0530 Subject: [PATCH 08/16] change --- test/test_suite_14.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test_suite_14.py b/test/test_suite_14.py index 9d8110da..cb4dd67d 100644 --- a/test/test_suite_14.py +++ b/test/test_suite_14.py @@ -53,7 +53,7 @@ from sqlalchemy import LargeBinary from sqlalchemy import String from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import relationship +from sqlalchemy.orm import relation from sqlalchemy.orm import Session from sqlalchemy.types import Integer from sqlalchemy.types import Numeric @@ -1671,7 +1671,7 @@ class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True) name = Column(String(50)) - addresses = relationship("Address", backref="user") + addresses = relation("Address", backref="user") class Address(Base): __tablename__ = "addresses" From 2809f305eb5bd866ffaf787068437f20a76a58b7 Mon Sep 17 00:00:00 2001 From: Astha Mohta <35952883+asthamohta@users.noreply.github.com> Date: Fri, 3 Mar 2023 02:47:24 +0530 Subject: [PATCH 09/16] Update sqlalchemy_spanner.py --- google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py b/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py index d3d495cd..249278a6 100644 --- a/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py +++ b/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py @@ -574,7 +574,7 @@ def create_connect_args(self, url): The given URL follows the style: `spanner:///projects/{project-id}/instances/{instance-id}/databases/{database-id}` - If you want to diable route to leader add the following at the end of the url: + If you want to disble route to leader add the following at the end of the url: `spanner:///projects/{project-id}/instances/{instance-id}/databases/{database-id}?route_to_leader_enabled=False` """ match = re.match( From d39261eeb9792f332437e48223018f108dcdf908 Mon Sep 17 00:00:00 2001 From: Astha Mohta <35952883+asthamohta@users.noreply.github.com> Date: Fri, 3 Mar 2023 02:48:19 +0530 Subject: [PATCH 10/16] Update sqlalchemy_spanner.py --- google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py b/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py index 249278a6..eda1c7a4 100644 --- a/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py +++ b/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py @@ -574,7 +574,7 @@ def create_connect_args(self, url): The given URL follows the style: `spanner:///projects/{project-id}/instances/{instance-id}/databases/{database-id}` - If you want to disble route to leader add the following at the end of the url: + If you want to disble route to leader add it to the url as following: `spanner:///projects/{project-id}/instances/{instance-id}/databases/{database-id}?route_to_leader_enabled=False` """ match = re.match( From f7c79b3474dead370c6e66958e33a36698f91f51 Mon Sep 17 00:00:00 2001 From: Astha Mohta <35952883+asthamohta@users.noreply.github.com> Date: Tue, 21 Mar 2023 10:48:50 +0530 Subject: [PATCH 11/16] Update noxfile.py --- noxfile.py | 1 + 1 file changed, 1 insertion(+) diff --git a/noxfile.py b/noxfile.py index 597ccb2a..74059744 100644 --- a/noxfile.py +++ b/noxfile.py @@ -193,6 +193,7 @@ def compliance_test_14(session): session.install("-e", ".[tracing]") session.run("pip", "install", "sqlalchemy>=1.4,<2.0", "--force-reinstall") session.run("python", "create_test_database.py") + session.run( "py.test", "--cov=google.cloud.sqlalchemy_spanner", From 7e898005e61736f0fe92e845580e9e4a66ba8b9e Mon Sep 17 00:00:00 2001 From: Astha Mohta Date: Wed, 9 Aug 2023 13:18:07 +0530 Subject: [PATCH 12/16] change --- .../sqlalchemy_spanner/sqlalchemy_spanner.py | 20 ++++++------------- test/test_suite_13.py | 5 +++-- test/test_suite_14.py | 16 +++++++-------- test/test_suite_20.py | 20 +++++++++++++++++++ 4 files changed, 37 insertions(+), 24 deletions(-) diff --git a/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py b/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py index 813759a1..90431429 100644 --- a/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py +++ b/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -import pkg_resources import re from alembic.ddl.base import ( @@ -304,7 +303,7 @@ def render_literal_value(self, value, type_): generate a SQL statement. """ raw = ["\\", "'", '"', "\n", "\t", "\r"] - if type(value) == str and any(single in value for single in raw): + if isinstance(value, str) and any(single in value for single in raw): value = 'r"""{}"""'.format(value) return value else: @@ -646,11 +645,13 @@ def create_connect_args(self, url): The given URL follows the style: `spanner:///projects/{project-id}/instances/{instance-id}/databases/{database-id}` - or `spanner:///projects/{project-id}/instances/{instance-id}`. For the latter, + or `spanner:///projects/{project-id}/instances/{instance-id}`. For the latter, database operations will be not be possible and if required a new engine with database-id set will need to be created. - If you want to disble route to leader add it to the url as following: - `spanner:///projects/{project-id}/instances/{instance-id}/databases/{database-id}?route_to_leader_enabled=False` + If you want to disble route to leader, pass options as following: + engine = create_engine( + "spanner+spanner:///projects/project-id/instances/instance-id/databases/database-id", + connect_args={'route_to_leader_enabled': False}) """ match = re.match( ( @@ -659,17 +660,8 @@ def create_connect_args(self, url): ), url.database, ) - dist = pkg_resources.get_distribution("sqlalchemy-spanner") - options = {"user_agent": f"gl-{dist.project_name}/{dist.version}"} - options.update(url.query) - if "route_to_leader_enabled" in options: - if options["route_to_leader_enabled"].lower() == "false": - options["route_to_leader_enabled"] = False - else: - options["route_to_leader_enabled"] = True return ( [match.group("instance"), match.group("database"), match.group("project")], - options, ) @engine_to_connection diff --git a/test/test_suite_13.py b/test/test_suite_13.py index 4212549a..6c430798 100644 --- a/test/test_suite_13.py +++ b/test/test_suite_13.py @@ -1658,8 +1658,9 @@ class RouteToLeaderEnabledTest(SpannerSpecificTestBase): def test_route_to_leader(self): engine = create_engine( - "spanner:///projects/project-id/instances/instance-id/databases/database-id" - "?route_to_leader_enabled=False" + "spanner:///projects/project-id/instances/instance-id/" + + "databases/database-id", + connect_args={"route_to_leader_enabled": False}, ) with engine.connect() as connection: assert ( diff --git a/test/test_suite_14.py b/test/test_suite_14.py index b74dc0a2..bc239776 100644 --- a/test/test_suite_14.py +++ b/test/test_suite_14.py @@ -1919,19 +1919,19 @@ def test_user_agent(self): class RouteToLeaderEnabledTest(fixtures.TestBase): """ + SPANNER TEST: + Check that SQLAlchemy dialect passes correct route_to_leader_enabled to Client. """ - def setUp(self): - self._engine = create_engine( - "spanner:///projects/appdev-soda-spanner-staging/instances/" - "sqlalchemy-dialect-test/databases/compliance-test" - "?route_to_leader_enabled=False" + def test_route_to_leader(self): + engine = create_engine( + "spanner:///projects/project-id/instances/instance-id/" + + "databases/database-id", + connect_args={"route_to_leader_enabled": False}, ) - - def test_route_to_leader_enabled(self): - with self._engine.connect() as connection: + with engine.connect() as connection: assert ( connection.connection.instance._client.route_to_leader_enabled is False ) diff --git a/test/test_suite_20.py b/test/test_suite_20.py index b4bf26fa..6c5789bd 100644 --- a/test/test_suite_20.py +++ b/test/test_suite_20.py @@ -3041,3 +3041,23 @@ def test_create_engine_wo_database(self): engine = create_engine(get_db_url().split("/database")[0]) with engine.connect() as connection: assert connection.connection.database is None + + +class RouteToLeaderEnabledTest(fixtures.TestBase): + """ + SPANNER TEST: + + Check that SQLAlchemy dialect passes correct + route_to_leader_enabled to Client. + """ + + def test_route_to_leader(self): + engine = create_engine( + "spanner:///projects/project-id/instances/instance-id/" + + "databases/database-id", + connect_args={"route_to_leader_enabled": False}, + ) + with engine.connect() as connection: + assert ( + connection.connection.instance._client.route_to_leader_enabled is False + ) From 17efd051a21c764b3080acee075908a994cb8971 Mon Sep 17 00:00:00 2001 From: Astha Mohta Date: Wed, 9 Aug 2023 13:22:31 +0530 Subject: [PATCH 13/16] change --- test/test_suite_13.py | 3 +-- test/test_suite_14.py | 3 +-- test/test_suite_20.py | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/test/test_suite_13.py b/test/test_suite_13.py index 6c430798..444a6106 100644 --- a/test/test_suite_13.py +++ b/test/test_suite_13.py @@ -1658,8 +1658,7 @@ class RouteToLeaderEnabledTest(SpannerSpecificTestBase): def test_route_to_leader(self): engine = create_engine( - "spanner:///projects/project-id/instances/instance-id/" - + "databases/database-id", + "spanner:///projects/project-id/instances/instance-id/databases/database-id", connect_args={"route_to_leader_enabled": False}, ) with engine.connect() as connection: diff --git a/test/test_suite_14.py b/test/test_suite_14.py index bc239776..649a841d 100644 --- a/test/test_suite_14.py +++ b/test/test_suite_14.py @@ -1927,8 +1927,7 @@ class RouteToLeaderEnabledTest(fixtures.TestBase): def test_route_to_leader(self): engine = create_engine( - "spanner:///projects/project-id/instances/instance-id/" - + "databases/database-id", + "spanner:///projects/project-id/instances/instance-id/databases/database-id", connect_args={"route_to_leader_enabled": False}, ) with engine.connect() as connection: diff --git a/test/test_suite_20.py b/test/test_suite_20.py index 6c5789bd..871891e1 100644 --- a/test/test_suite_20.py +++ b/test/test_suite_20.py @@ -3053,8 +3053,7 @@ class RouteToLeaderEnabledTest(fixtures.TestBase): def test_route_to_leader(self): engine = create_engine( - "spanner:///projects/project-id/instances/instance-id/" - + "databases/database-id", + "spanner:///projects/project-id/instances/instance-id/databases/database-id", connect_args={"route_to_leader_enabled": False}, ) with engine.connect() as connection: From c9c7e9091c44a6deee4d66c4521b9fb874822342 Mon Sep 17 00:00:00 2001 From: Astha Mohta Date: Wed, 9 Aug 2023 13:23:42 +0530 Subject: [PATCH 14/16] change --- google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py b/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py index 90431429..dbccb2ec 100644 --- a/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py +++ b/google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import pkg_resources import re from alembic.ddl.base import ( @@ -660,8 +661,10 @@ def create_connect_args(self, url): ), url.database, ) + dist = pkg_resources.get_distribution("sqlalchemy-spanner") return ( [match.group("instance"), match.group("database"), match.group("project")], + {"user_agent": f"gl-{dist.project_name}/{dist.version}"}, ) @engine_to_connection From 421cec4dd3a0e3dfef9e3f7ffe4275a0f8ab22ec Mon Sep 17 00:00:00 2001 From: Astha Mohta Date: Wed, 9 Aug 2023 14:54:47 +0530 Subject: [PATCH 15/16] change --- test/test_suite_13.py | 3 ++- test/test_suite_14.py | 3 ++- test/test_suite_20.py | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/test/test_suite_13.py b/test/test_suite_13.py index 444a6106..6c430798 100644 --- a/test/test_suite_13.py +++ b/test/test_suite_13.py @@ -1658,7 +1658,8 @@ class RouteToLeaderEnabledTest(SpannerSpecificTestBase): def test_route_to_leader(self): engine = create_engine( - "spanner:///projects/project-id/instances/instance-id/databases/database-id", + "spanner:///projects/project-id/instances/instance-id/" + + "databases/database-id", connect_args={"route_to_leader_enabled": False}, ) with engine.connect() as connection: diff --git a/test/test_suite_14.py b/test/test_suite_14.py index 649a841d..bc239776 100644 --- a/test/test_suite_14.py +++ b/test/test_suite_14.py @@ -1927,7 +1927,8 @@ class RouteToLeaderEnabledTest(fixtures.TestBase): def test_route_to_leader(self): engine = create_engine( - "spanner:///projects/project-id/instances/instance-id/databases/database-id", + "spanner:///projects/project-id/instances/instance-id/" + + "databases/database-id", connect_args={"route_to_leader_enabled": False}, ) with engine.connect() as connection: diff --git a/test/test_suite_20.py b/test/test_suite_20.py index 871891e1..6c5789bd 100644 --- a/test/test_suite_20.py +++ b/test/test_suite_20.py @@ -3053,7 +3053,8 @@ class RouteToLeaderEnabledTest(fixtures.TestBase): def test_route_to_leader(self): engine = create_engine( - "spanner:///projects/project-id/instances/instance-id/databases/database-id", + "spanner:///projects/project-id/instances/instance-id/" + + "databases/database-id", connect_args={"route_to_leader_enabled": False}, ) with engine.connect() as connection: From d10b5585c372efa3a9d448a12fa71e6d992b498b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?= Date: Mon, 4 Nov 2024 17:22:38 +0100 Subject: [PATCH 16/16] test: add more tests --- test/test_suite_20.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/test/test_suite_20.py b/test/test_suite_20.py index 607b0866..bcf81c09 100644 --- a/test/test_suite_20.py +++ b/test/test_suite_20.py @@ -3121,7 +3121,7 @@ class RouteToLeaderEnabledTest(fixtures.TestBase): route_to_leader_enabled to Client. """ - def test_route_to_leader(self): + def test_route_to_leader_disabled(self): engine = create_engine( "spanner:///projects/project-id/instances/instance-id/" + "databases/database-id", @@ -3132,6 +3132,28 @@ def test_route_to_leader(self): connection.connection.instance._client.route_to_leader_enabled is False ) + def test_route_to_leader_enabled(self): + engine = create_engine( + "spanner:///projects/project-id/instances/instance-id/" + + "databases/database-id", + connect_args={"route_to_leader_enabled": True}, + ) + with engine.connect() as connection: + assert ( + connection.connection.instance._client.route_to_leader_enabled is True + ) + + def test_route_to_leader_default(self): + engine = create_engine( + "spanner:///projects/project-id/instances/instance-id/" + + "databases/database-id" + ) + with engine.connect() as connection: + assert ( + connection.connection.instance._client.route_to_leader_enabled is True + ) + + class ReturningTest(fixtures.TestBase): def setUp(self): self._engine = create_engine(get_db_url())