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

Commit 40c8579

Browse files
committed
chore: resolve rebase conflicts from main and stabilize async tests
1 parent 6b27ddd commit 40c8579

21 files changed

+148
-156
lines changed

google/cloud/spanner_dbapi/batch_dml_executor.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ def run_batch_dml(cursor: "Cursor", statements: List[Statement]):
9797
many_result_set.add_iter(res)
9898
cursor._row_count = sum([max(val, 0) for val in res])
9999
else:
100+
retry_count = 0
100101
while True:
101102
try:
102103
transaction = connection.transaction_checkout()
@@ -108,6 +109,9 @@ def run_batch_dml(cursor: "Cursor", statements: List[Statement]):
108109
if not transaction._transaction_id:
109110
# This should normally not happen,
110111
# but we safeguard against it just to be sure.
112+
if retry_count > 0:
113+
raise OperationalError(status.message)
114+
retry_count += 1
111115
transaction._reset_and_begin()
112116
continue
113117
raise OperationalError(status.message)

google/cloud/spanner_dbapi/cursor.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,18 @@ def executemany(self, operation, seq_of_params):
439439

440440
self._result_set = many_result_set
441441
self._itr = many_result_set
442+
except (AlreadyExists, FailedPrecondition, OutOfRange) as e:
443+
exception = IntegrityError(getattr(e, "details", e))
444+
exception.__cause__ = e
445+
raise exception
446+
except InvalidArgument as e:
447+
exception = ProgrammingError(getattr(e, "details", e))
448+
exception.__cause__ = e
449+
raise exception
450+
except InternalServerError as e:
451+
exception = OperationalError(getattr(e, "details", e))
452+
exception.__cause__ = e
453+
raise exception
442454
except Exception as e:
443455
exception = e
444456
raise

google/cloud/spanner_v1/_async/batch.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
# limitations under the License.
1414

1515
"""Context manager for Cloud Spanner batched writes."""
16+
1617
__CROSS_SYNC_OUTPUT__ = "google.cloud.spanner_v1.batch"
1718
import functools
1819
import time
@@ -30,7 +31,6 @@
3031
_validate_client_context,
3132
_check_rst_stream_error,
3233
_make_list_value_pbs,
33-
3434
_merge_Transaction_Options,
3535
_metadata_with_leader_aware_routing,
3636
_metadata_with_prefix,
@@ -441,8 +441,6 @@ def wrapped_method():
441441
)
442442
return batch_write_method()
443443

444-
from google.cloud.spanner_v1._async._helpers import _retry
445-
446444
response = await _retry(
447445
wrapped_method,
448446
allowed_exceptions={

google/cloud/spanner_v1/_async/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
* a :class:`~google.cloud.spanner_v1.instance.Instance` owns a
2424
:class:`~google.cloud.spanner_v1.database.Database`
2525
"""
26+
2627
__CROSS_SYNC_OUTPUT__ = "google.cloud.spanner_v1.client"
2728
import logging
2829
import os
@@ -69,7 +70,6 @@
6970
from google.cloud.spanner_v1._async.instance import Instance
7071
from google.cloud.spanner_v1._helpers import (
7172
AtomicCounter,
72-
_create_experimental_host_transport,
7373
_merge_query_options,
7474
_metadata_with_prefix,
7575
_validate_client_context,

google/cloud/spanner_v1/_async/database.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
# limitations under the License.
1414

1515
"""User-friendly container for Cloud Spanner Database."""
16+
1617
__CROSS_SYNC_OUTPUT__ = "google.cloud.spanner_v1.database"
1718
import copy
1819
import functools
@@ -230,11 +231,7 @@ def __init__(
230231
self._experimental_host = (
231232
self._instance.experimental_host if self._instance else None
232233
)
233-
is_experimental_host = self._experimental_host is not None
234-
235-
self._sessions_manager = DatabaseSessionsManager(
236-
self, pool
237-
)
234+
self._sessions_manager = DatabaseSessionsManager(self, pool)
238235

239236
@property
240237
def _resource_info(self):
@@ -1522,7 +1519,9 @@ async def __aenter__(self):
15221519
event_attributes={"id": self._session.session_id},
15231520
)
15241521

1525-
batch = self._batch = Batch(session=self._session, client_context=self._client_context)
1522+
batch = self._batch = Batch(
1523+
session=self._session, client_context=self._client_context
1524+
)
15261525
if self._request_options.transaction_tag:
15271526
batch.transaction_tag = self._request_options.transaction_tag
15281527

@@ -1588,7 +1587,9 @@ async def __aenter__(self):
15881587
transaction_type
15891588
)
15901589

1591-
return MutationGroups(session=self._session, client_context=self._client_context)
1590+
return MutationGroups(
1591+
session=self._session, client_context=self._client_context
1592+
)
15921593

15931594
@CrossSync.convert(sync_name="__exit__")
15941595
async def __aexit__(self, exc_type, exc_val, exc_tb):
@@ -1711,7 +1712,9 @@ def from_dict(cls, database, mapping):
17111712
instance._session_id = session._session_id = mapping["session_id"]
17121713
instance._client_context = mapping.get("client_context")
17131714

1714-
snapshot = instance._snapshot = session.snapshot(client_context=instance._client_context)
1715+
snapshot = instance._snapshot = session.snapshot(
1716+
client_context=instance._client_context
1717+
)
17151718
instance._transaction_id = snapshot._transaction_id = mapping["transaction_id"]
17161719

17171720
return instance

google/cloud/spanner_v1/_async/instance.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,12 @@
3434
from google.cloud.spanner_admin_database_v1.types import backup, spanner_database_admin
3535
from google.cloud.spanner_admin_instance_v1 import Instance as InstancePB
3636
from google.cloud.spanner_v1._async.database import Database
37-
from google.cloud.spanner_v1.testing.database_test import TestDatabase
37+
38+
if CrossSync.is_async:
39+
from google.cloud.spanner_v1._async.testing.database_test import TestDatabase
40+
else:
41+
from google.cloud.spanner_v1.testing.database_test import TestDatabase
42+
3843
from google.cloud.spanner_v1._helpers import _metadata_with_prefix
3944
from google.cloud.spanner_v1.backup import Backup
4045

@@ -524,7 +529,9 @@ async def database(
524529
enable_drop_protection=enable_drop_protection,
525530
)
526531

527-
await db._pool.bind(db)
532+
res = db._pool.bind(db)
533+
if res is not None:
534+
await res
528535
return db
529536

530537
@CrossSync.convert

google/cloud/spanner_v1/_async/transaction.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@
1313
# limitations under the License.
1414

1515
"""Spanner read-write transaction support."""
16+
1617
__CROSS_SYNC_OUTPUT__ = "google.cloud.spanner_v1.transaction"
1718

1819
from dataclasses import dataclass, field
1920
import functools
2021
from typing import Any, Optional
2122

2223
from google.cloud.spanner_v1._helpers import (
24+
AtomicCounter,
2325
_make_value_pb,
2426
_merge_query_options,
2527
_metadata_with_prefix,
@@ -35,18 +37,8 @@
3537
from google.protobuf.struct_pb2 import Struct
3638

3739
from google.cloud.aio._cross_sync import CrossSync
38-
from google.cloud.spanner_v1._async._helpers import _retry
3940
from google.cloud.spanner_v1._async.batch import _BatchBase
4041
from google.cloud.spanner_v1._async.snapshot import _SnapshotBase
41-
from google.cloud.spanner_v1._helpers import (
42-
AtomicCounter,
43-
_check_rst_stream_error,
44-
_make_value_pb,
45-
_merge_query_options,
46-
_merge_Transaction_Options,
47-
_metadata_with_leader_aware_routing,
48-
_metadata_with_prefix,
49-
)
5042
from google.cloud.spanner_v1._opentelemetry_tracing import add_span_event, trace_call
5143
from google.cloud.spanner_v1.metrics.metrics_capture import MetricsCapture
5244
from google.cloud.spanner_v1.types.commit_response import CommitResponse

google/cloud/spanner_v1/_helpers.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@
3232
from google.rpc.error_details_pb2 import RetryInfo
3333

3434
from google.cloud._helpers import _date_from_iso8601_date
35-
from google.cloud.spanner_v1.types import ExecuteSqlRequest
36-
from google.cloud.spanner_v1.types import TransactionOptions
3735
from google.cloud.spanner_v1.types import ClientContext
3836
from google.cloud.spanner_v1.types import RequestOptions
3937
from google.cloud.spanner_v1.data_types import JsonObject, Interval

google/cloud/spanner_v1/batch.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import time
2121
from typing import List, Optional
2222
from google.api_core.exceptions import InternalServerError
23-
from google.cloud.spanner_v1._helpers import _retry_on_aborted_exception
23+
from google.cloud.spanner_v1._helpers import _retry, _retry_on_aborted_exception
2424
from google.cloud.spanner_v1._helpers import (
2525
AtomicCounter,
2626
_merge_client_context,
@@ -382,8 +382,6 @@ def wrapped_method():
382382
)
383383
return batch_write_method()
384384

385-
from google.cloud.spanner_v1._helpers import _retry
386-
387385
response = _retry(
388386
wrapped_method,
389387
allowed_exceptions={InternalServerError: _check_rst_stream_error},

google/cloud/spanner_v1/database.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,6 @@ def __init__(
204204
self._experimental_host = (
205205
self._instance.experimental_host if self._instance else None
206206
)
207-
is_experimental_host = self._experimental_host is not None
208207
self._sessions_manager = DatabaseSessionsManager(self, pool)
209208

210209
@property

0 commit comments

Comments
 (0)