3131from google .auth .credentials import AnonymousCredentials
3232import google .api_core .client_options
3333from google .cloud .client import ClientWithProject
34+ from typing import Optional
3435
3536
3637from google .cloud .spanner_admin_database_v1 import DatabaseAdminClient
4546from google .cloud .spanner_admin_instance_v1 import ListInstancesRequest
4647from google .cloud .spanner_v1 import __version__
4748from google .cloud .spanner_v1 import ExecuteSqlRequest
49+ from google .cloud .spanner_v1 import DefaultTransactionOptions
4850from google .cloud .spanner_v1 ._helpers import _merge_query_options
4951from google .cloud .spanner_v1 ._helpers import _metadata_with_prefix
5052from google .cloud .spanner_v1 .instance import Instance
@@ -165,6 +167,10 @@ class Client(ClientWithProject):
165167 or you can use the environment variable `SPANNER_ENABLE_END_TO_END_TRACING=<boolean>`
166168 to control it.
167169
170+ :type default_transaction_options: :class:`~google.cloud.spanner_v1.DefaultTransactionOptions`
171+ or :class:`dict`
172+ :param default_transaction_options: (Optional) Default options to use for all transactions.
173+
168174 :raises: :class:`ValueError <exceptions.ValueError>` if both ``read_only``
169175 and ``admin`` are :data:`True`
170176 """
@@ -186,6 +192,7 @@ def __init__(
186192 route_to_leader_enabled = True ,
187193 directed_read_options = None ,
188194 observability_options = None ,
195+ default_transaction_options : Optional [DefaultTransactionOptions ] = None ,
189196 ):
190197 self ._emulator_host = _get_spanner_emulator_host ()
191198
@@ -247,6 +254,13 @@ def __init__(
247254 self ._route_to_leader_enabled = route_to_leader_enabled
248255 self ._directed_read_options = directed_read_options
249256 self ._observability_options = observability_options
257+ if default_transaction_options is None :
258+ default_transaction_options = DefaultTransactionOptions ()
259+ elif not isinstance (default_transaction_options , DefaultTransactionOptions ):
260+ raise TypeError (
261+ "default_transaction_options must be an instance of DefaultTransactionOptions"
262+ )
263+ self ._default_transaction_options = default_transaction_options
250264
251265 @property
252266 def credentials (self ):
@@ -337,6 +351,17 @@ def observability_options(self):
337351 """
338352 return self ._observability_options
339353
354+ @property
355+ def default_transaction_options (self ):
356+ """Getter for default_transaction_options.
357+
358+ :rtype:
359+ :class:`~google.cloud.spanner_v1.DefaultTransactionOptions`
360+ or :class:`dict`
361+ :returns: The default transaction options that are used by this client for all transactions.
362+ """
363+ return self ._default_transaction_options
364+
340365 @property
341366 def directed_read_options (self ):
342367 """Getter for directed_read_options.
@@ -482,3 +507,21 @@ def directed_read_options(self, directed_read_options):
482507 or regions should be used for non-transactional reads or queries.
483508 """
484509 self ._directed_read_options = directed_read_options
510+
511+ @default_transaction_options .setter
512+ def default_transaction_options (
513+ self , default_transaction_options : DefaultTransactionOptions
514+ ):
515+ """Sets default_transaction_options for the client
516+ :type default_transaction_options: :class:`~google.cloud.spanner_v1.DefaultTransactionOptions`
517+ or :class:`dict`
518+ :param default_transaction_options: Default options to use for transactions.
519+ """
520+ if default_transaction_options is None :
521+ default_transaction_options = DefaultTransactionOptions ()
522+ elif not isinstance (default_transaction_options , DefaultTransactionOptions ):
523+ raise TypeError (
524+ "default_transaction_options must be an instance of DefaultTransactionOptions"
525+ )
526+
527+ self ._default_transaction_options = default_transaction_options
0 commit comments