Skip to content
This repository was archived by the owner on Mar 31, 2026. It is now read-only.

Commit ffa81ea

Browse files
committed
review comments and tests
1 parent 04dc582 commit ffa81ea

File tree

4 files changed

+42
-23
lines changed

4 files changed

+42
-23
lines changed

google/cloud/spanner_v1/client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ class Client(ClientWithProject):
165165
:type default_transaction_options: :class:`~google.cloud.spanner_v1.TransactionOptions`
166166
or :class:`dict`
167167
:param default_transaction_options: (Optional) Default options to use for all read/write transactions.
168+
Any fields other than `isolation_level` will be ignored.
168169
169170
:raises: :class:`ValueError <exceptions.ValueError>` if both ``read_only``
170171
and ``admin`` are :data:`True`
@@ -503,5 +504,6 @@ def default_transaction_options(self, default_transaction_options):
503504
:type default_transaction_options: :class:`~google.cloud.spanner_v1.TransactionOptions`
504505
or :class:`dict`
505506
:param default_transaction_options: Default options to use for all read/write transactions.
507+
Any fields other than `isolation_level` will be ignored.
506508
"""
507509
self._default_transaction_options = default_transaction_options

google/cloud/spanner_v1/database.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -823,16 +823,7 @@ def batch(
823823

824824
# Set isolation level
825825
if isolation_level is None:
826-
isolation_level = (
827-
self.default_transaction_options.get(
828-
"isolation_level",
829-
TransactionOptions.IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED,
830-
)
831-
if isinstance(self.default_transaction_options, dict)
832-
else self.default_transaction_options.isolation_level
833-
if isinstance(self.default_transaction_options, TransactionOptions)
834-
else TransactionOptions.IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED
835-
)
826+
isolation_level = self.get_default_isolation_level()
836827
return BatchCheckout(
837828
self,
838829
request_options,
@@ -1153,6 +1144,23 @@ def set_iam_policy(self, policy):
11531144
response = api.set_iam_policy(request=request, metadata=metadata)
11541145
return response
11551146

1147+
def get_default_isolation_level(self):
1148+
"""
1149+
Returns the isolation level set in default transaction options when creating
1150+
the SpannerClient.
1151+
"""
1152+
if isinstance(self.default_transaction_options, dict):
1153+
return self.default_transaction_options.get(
1154+
"isolation_level",
1155+
TransactionOptions.IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED,
1156+
)
1157+
1158+
return getattr(
1159+
self.default_transaction_options,
1160+
"isolation_level",
1161+
TransactionOptions.IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED,
1162+
)
1163+
11561164
@property
11571165
def observability_options(self):
11581166
"""

google/cloud/spanner_v1/session.py

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -467,18 +467,7 @@ def run_in_transaction(self, func, *args, **kw):
467467
isolation_level = kw.pop("isolation_level", None)
468468

469469
if isolation_level is None:
470-
isolation_level = (
471-
self._database.default_transaction_options.get(
472-
"isolation_level",
473-
TransactionOptions.IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED,
474-
)
475-
if isinstance(self._database.default_transaction_options, dict)
476-
else self._database.default_transaction_options.isolation_level
477-
if isinstance(
478-
self._database.default_transaction_options, TransactionOptions
479-
)
480-
else TransactionOptions.IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED
481-
)
470+
isolation_level = self._database.get_default_isolation_level()
482471
attempts = 0
483472

484473
observability_options = getattr(self._database, "observability_options", None)

tests/unit/test_session.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,31 @@ def _make_database(
9494
database.database_role = database_role
9595
database._route_to_leader_enabled = True
9696
database.default_transaction_options = default_transaction_options
97+
98+
# Define side_effect function to use injected default_transaction_options
99+
def get_default_isolation_level_side_effect():
100+
if isinstance(database.default_transaction_options, dict):
101+
return database.default_transaction_options.get(
102+
"isolation_level",
103+
TransactionOptions.IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED,
104+
)
105+
106+
return getattr(
107+
database.default_transaction_options,
108+
"isolation_level",
109+
TransactionOptions.IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED,
110+
)
111+
112+
# Mock get_default_isolation_level method
113+
database.get_default_isolation_level = mock.Mock(
114+
side_effect=get_default_isolation_level_side_effect
115+
)
116+
97117
return database
98118

99119
@staticmethod
100120
def _make_session_pb(name, labels=None, database_role=None):
101-
return Session(name=name, labels=labels, creator_role=database_role)
121+
return SessionRequestProto(name=name, labels=labels, creator_role=database_role)
102122

103123
def _make_spanner_api(self):
104124
return mock.Mock(autospec=SpannerClient, instance=True)

0 commit comments

Comments
 (0)