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

Commit 482e659

Browse files
committed
review comments and tests
1 parent b4d878e commit 482e659

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
@@ -140,6 +140,7 @@ class Client(ClientWithProject):
140140
:type default_transaction_options: :class:`~google.cloud.spanner_v1.TransactionOptions`
141141
or :class:`dict`
142142
:param default_transaction_options: (Optional) Default options to use for all read/write transactions.
143+
Any fields other than `isolation_level` will be ignored.
143144
144145
:raises: :class:`ValueError <exceptions.ValueError>` if both ``read_only``
145146
and ``admin`` are :data:`True`
@@ -459,5 +460,6 @@ def default_transaction_options(self, default_transaction_options):
459460
:type default_transaction_options: :class:`~google.cloud.spanner_v1.TransactionOptions`
460461
or :class:`dict`
461462
:param default_transaction_options: Default options to use for all read/write transactions.
463+
Any fields other than `isolation_level` will be ignored.
462464
"""
463465
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
@@ -822,16 +822,7 @@ def batch(
822822

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

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

google/cloud/spanner_v1/session.py

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

467467
if isolation_level is None:
468-
isolation_level = (
469-
self._database.default_transaction_options.get(
470-
"isolation_level",
471-
TransactionOptions.IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED,
472-
)
473-
if isinstance(self._database.default_transaction_options, dict)
474-
else self._database.default_transaction_options.isolation_level
475-
if isinstance(
476-
self._database.default_transaction_options, TransactionOptions
477-
)
478-
else TransactionOptions.IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED
479-
)
468+
isolation_level = self._database.get_default_isolation_level()
480469
attempts = 0
481470

482471
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)