Skip to content

Commit ff0dc5b

Browse files
authored
Merge branch 'main' into migration.python-bigquery-dataframes.migration.2026-03-31_18-48-47.migrate
2 parents 45cd714 + 14abfd5 commit ff0dc5b

File tree

970 files changed

+484735
-3
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

970 files changed

+484735
-3
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
on:
2+
pull_request:
3+
paths:
4+
- 'packages/google-cloud-bigtable/**'
5+
- '.github/workflows/bigtable-conformance.yaml'
6+
push:
7+
branches:
8+
- main
9+
paths:
10+
- 'packages/google-cloud-bigtable/**'
11+
- '.github/workflows/bigtable-conformance.yaml'
12+
13+
defaults:
14+
run:
15+
working-directory: packages/google-cloud-bigtable
16+
17+
name: Conformance
18+
jobs:
19+
check_changes:
20+
runs-on: ubuntu-latest
21+
outputs:
22+
run_bigtable: ${{ steps.filter.outputs.bigtable }}
23+
steps:
24+
- uses: actions/checkout@v4
25+
- uses: dorny/paths-filter@v3
26+
id: filter
27+
with:
28+
filters: |
29+
bigtable:
30+
- 'packages/google-cloud-bigtable/**'
31+
- '.github/workflows/bigtable-conformance.yaml'
32+
33+
system-tests:
34+
needs: check_changes
35+
if: ${{ needs.check_changes.outputs.run_bigtable == 'true' }}
36+
runs-on: ubuntu-latest
37+
strategy:
38+
matrix:
39+
test-version: [ "v0.0.4" ]
40+
py-version: [ 3.13 ]
41+
client-type: [ "async", "sync"]
42+
# None of the clients currently support reverse scans, execute query plan refresh, retry info, or routing cookie
43+
include:
44+
- client-type: "async"
45+
test_args: "-skip \"PlanRefresh|_Reverse|_WithRetryInfo|_WithRoutingCookie\""
46+
- client-type: "sync"
47+
test_args: "-skip \"PlanRefresh|_Reverse|_WithRetryInfo|_WithRoutingCookie|_Generic_MultiStream\""
48+
fail-fast: false
49+
name: "${{ matrix.client-type }} client / python ${{ matrix.py-version }} / test tag ${{ matrix.test-version }}"
50+
steps:
51+
- uses: actions/checkout@v4
52+
name: "Checkout google-cloud-python"
53+
- uses: actions/checkout@v4
54+
name: "Checkout conformance tests"
55+
with:
56+
repository: googleapis/cloud-bigtable-clients-test
57+
ref: ${{ matrix.test-version }}
58+
path: packages/google-cloud-bigtable/cloud-bigtable-clients-test
59+
- uses: actions/setup-python@v5
60+
with:
61+
python-version: ${{ matrix.py-version }}
62+
- uses: actions/setup-go@v5
63+
with:
64+
go-version: '>=1.20.2'
65+
- run: pip install -e .
66+
name: "Install google-cloud-bigtable from HEAD"
67+
- run: go version
68+
- run: scripts/conformance.sh
69+
name: "Run tests"
70+
env:
71+
CLIENT_TYPE: ${{ matrix.client-type }}
72+
PYTHONUNBUFFERED: 1
73+
TEST_ARGS: ${{ matrix.test_args }}
74+
PROXY_PORT: 9999

.librarian/config.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,18 @@ libraries:
1616
# Allow releases for google-cloud-storage once this bug is fixed.
1717
- id: "google-cloud-storage"
1818
release_blocked: true
19+
<<<<<<< migration.python-bigquery-dataframes.migration.2026-03-31_18-48-47.migrate
1920
# TODO(https://github.com/googleapis/google-cloud-python/issues/16489):
2021
# Allow releases for bigframes once this bug above is fixed.
2122
- id: "bigframes"
2223
release_blocked: true
24+
=======
25+
# TODO(https://github.com/googleapis/google-cloud-python/issues/16490):
26+
# Allow generation for google-cloud-spanner once this bug is fixed.
27+
- id: "google-cloud-spanner"
28+
generate_blocked: true
29+
# TODO(https://github.com/googleapis/google-cloud-python/issues/16494):
30+
# Allow generation for google-cloud-bigtable once this bug is fixed.
31+
- id: "google-cloud-bigtable"
32+
generate_blocked: true
33+
>>>>>>> main
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
# Copyright 2026 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
description: Integrate Google Cloud Spanner customizations for MetricsInterceptor and gRPC options
15+
# TODO(Fill in issue number below to add more context)
16+
url: https://github.com/googleapis/gapic-generator-python/issues/123
17+
replacements:
18+
- paths: [
19+
"packages/google-cloud-spanner/google/cloud/spanner_v1/services/spanner/transports/base.py",
20+
"packages/google-cloud-spanner/google/cloud/spanner_v1/services/spanner/transports/grpc.py",
21+
"packages/google-cloud-spanner/google/cloud/spanner_v1/services/spanner/transports/grpc_asyncio.py",
22+
"packages/google-cloud-spanner/google/cloud/spanner_v1/services/spanner/transports/rest.py",
23+
"packages/google-cloud-spanner/google/cloud/spanner_v1/services/spanner/transports/rest_base.py",
24+
"packages/google-cloud-spanner/google/cloud/spanner_v1/services/spanner/client.py",
25+
]
26+
before: |
27+
from google.cloud.spanner_v1.types import transaction
28+
after: |
29+
from google.cloud.spanner_v1.types import transaction
30+
from google.cloud.spanner_v1.metrics.metrics_interceptor import MetricsInterceptor
31+
count: 6
32+
33+
- paths: [
34+
"packages/google-cloud-spanner/google/cloud/spanner_v1/services/spanner/transports/base.py",
35+
"packages/google-cloud-spanner/google/cloud/spanner_v1/services/spanner/transports/grpc.py",
36+
"packages/google-cloud-spanner/google/cloud/spanner_v1/services/spanner/transports/grpc_asyncio.py",
37+
"packages/google-cloud-spanner/google/cloud/spanner_v1/services/spanner/transports/rest.py",
38+
"packages/google-cloud-spanner/google/cloud/spanner_v1/services/spanner/transports/rest_base.py",
39+
]
40+
before: |
41+
(?P<indent>\s+)api_audience: Optional\[str\] = None,\n\s+\*\*kwargs,\n\s+\) -> None:
42+
after: |
43+
\g<indent>api_audience: Optional[str] = None,
44+
\g<indent> metrics_interceptor: Optional[MetricsInterceptor] = None,
45+
\g<indent> **kwargs,
46+
\g<indent>) -> None:
47+
count: 1 # Using regex with backreferences for correctness
48+
49+
- paths: [
50+
"packages/google-cloud-spanner/google/cloud/spanner_v1/services/spanner/transports/grpc.py",
51+
]
52+
before: |
53+
\)\n\n self._interceptor = _LoggingClientInterceptor\(\)
54+
after: |
55+
)
56+
57+
# Wrap the gRPC channel with the metric interceptor
58+
if metrics_interceptor is not None:
59+
self._metrics_interceptor = metrics_interceptor
60+
self._grpc_channel = grpc.intercept_channel(
61+
self._grpc_channel, metrics_interceptor
62+
)
63+
64+
self._interceptor = _LoggingClientInterceptor()
65+
count: 1
66+
67+
- paths: [
68+
"packages/google-cloud-spanner/google/cloud/spanner_v1/services/spanner/transports/grpc.py",
69+
]
70+
before: |
71+
self._stubs: Dict\[str, Callable\] = \{\}\n\n if api_mtls_endpoint:
72+
after: |
73+
self._stubs: Dict[str, Callable] = {}
74+
self._metrics_interceptor = None
75+
76+
if api_mtls_endpoint:
77+
count: 1
78+
79+
- paths: [
80+
"packages/google-cloud-spanner/google/cloud/spanner_v1/services/spanner/client.py",
81+
]
82+
before: |
83+
# initialize with the provided callable or the passed in class
84+
self._transport = transport_init\(
85+
credentials=credentials,
86+
credentials_file=self._client_options.credentials_file,
87+
host=self._api_endpoint,
88+
scopes=self._client_options.scopes,
89+
client_cert_source_for_mtls=self._client_cert_source,
90+
quota_project_id=self._client_options.quota_project_id,
91+
client_info=client_info,
92+
always_use_jwt_access=True,
93+
api_audience=self._client_options.api_audience,
94+
\)
95+
after: |
96+
# initialize with the provided callable or the passed in class
97+
self._transport = transport_init(
98+
credentials=credentials,
99+
credentials_file=self._client_options.credentials_file,
100+
host=self._api_endpoint,
101+
scopes=self._client_options.scopes,
102+
client_cert_source_for_mtls=self._client_cert_source,
103+
quota_project_id=self._client_options.quota_project_id,
104+
client_info=client_info,
105+
always_use_jwt_access=True,
106+
api_audience=self._client_options.api_audience,
107+
metrics_interceptor=MetricsInterceptor(),
108+
)
109+
count: 1
110+
111+
- paths: [
112+
"packages/google-cloud-spanner/tests/unit/gapic/spanner_v1/test_spanner.py",
113+
]
114+
before: |
115+
api_audience=None,\n(\s+)\)
116+
after: |
117+
api_audience=None,
118+
metrics_interceptor=mock.ANY,
119+
)
120+
count: 12
121+
122+
- paths: [
123+
"packages/google-cloud-spanner/tests/unit/gapic/spanner_v1/test_spanner.py",
124+
]
125+
before: |
126+
api_audience="https://language.googleapis.com"\n(\s+)\)
127+
after: |
128+
api_audience="https://language.googleapis.com",
129+
metrics_interceptor=mock.ANY,
130+
)
131+
count: 1
132+
133+
- paths: [
134+
"packages/google-cloud-spanner/google/cloud/spanner_v1/services/spanner/transports/grpc.py",
135+
"packages/google-cloud-spanner/google/cloud/spanner_v1/services/spanner/transports/grpc_asyncio.py",
136+
"packages/google-cloud-spanner/tests/unit/gapic/spanner_v1/test_spanner.py",
137+
"packages/google-cloud-spanner/google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/grpc.py",
138+
"packages/google-cloud-spanner/google/cloud/spanner_admin_instance_v1/services/instance_admin/transports/grpc_asyncio.py",
139+
"packages/google-cloud-spanner/tests/unit/gapic/spanner_admin_instance_v1/test_instance_admin.py",
140+
"packages/google-cloud-spanner/google/cloud/spanner_admin_database_v1/services/database_admin/transports/grpc.py",
141+
"packages/google-cloud-spanner/google/cloud/spanner_admin_database_v1/services/database_admin/transports/grpc_asyncio.py",
142+
"packages/google-cloud-spanner/tests/unit/gapic/spanner_admin_database_v1/test_database_admin.py",
143+
]
144+
before: |
145+
^\s+options=\[[\s\S]*?\]
146+
after: |
147+
options=[
148+
("grpc.max_send_message_length", -1),
149+
("grpc.max_receive_message_length", -1),
150+
("grpc.keepalive_time_ms", 120000),
151+
]
152+
count: 9 # One per file roughly, or adjusts based on regex triggers

.librarian/state.yaml

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -966,6 +966,15 @@ libraries:
966966
remove_regex:
967967
- packages/google-cloud-billing/
968968
tag_format: '{id}-v{version}'
969+
- id: google-cloud-bigtable
970+
version: 2.35.0
971+
last_generated_commit: ""
972+
apis: []
973+
source_roots:
974+
- packages/google-cloud-bigtable
975+
preserve_regex: []
976+
remove_regex: []
977+
tag_format: '{id}-v{version}'
969978
- id: google-cloud-billing-budgets
970979
version: 1.20.0
971980
last_generated_commit: 3322511885371d2b2253f209ccc3aa60d4100cfd
@@ -3235,6 +3244,74 @@ libraries:
32353244
remove_regex:
32363245
- packages/google-cloud-source-context/
32373246
tag_format: '{id}-v{version}'
3247+
- id: google-cloud-spanner
3248+
version: 3.63.0
3249+
last_generated_commit: 64f1dbf504bab7b58ed96a539a5b26a7ebfc65c7
3250+
apis:
3251+
- path: google/spanner/admin/instance/v1
3252+
service_config: spanner.yaml
3253+
- path: google/spanner/admin/database/v1
3254+
service_config: spanner.yaml
3255+
- path: google/spanner/v1
3256+
service_config: spanner.yaml
3257+
source_roots:
3258+
- packages/google-cloud-spanner
3259+
preserve_regex:
3260+
- packages/google-cloud-spanner/CHANGELOG.md
3261+
- docs/CHANGELOG.md
3262+
remove_regex:
3263+
- ^packages/google-cloud-spanner/.coveragerc
3264+
- ^packages/google-cloud-spanner/.flake8
3265+
- ^packages/google-cloud-spanner/.repo-metadata.json
3266+
- ^packages/google-cloud-spanner/LICENSE
3267+
- ^packages/google-cloud-spanner/MANIFEST.in
3268+
- ^packages/google-cloud-spanner/README.rst
3269+
- ^packages/google-cloud-spanner/mypy.ini
3270+
- ^packages/google-cloud-spanner/noxfile.py
3271+
- ^packages/google-cloud-spanner/setup.py
3272+
- ^packages/google-cloud-spanner/docs/conf.py
3273+
- ^packages/google-cloud-spanner/docs/index.rst
3274+
- ^packages/google-cloud-spanner/docs/summary_overview.md
3275+
- ^packages/google-cloud-spanner/docs/README.rst
3276+
- ^packages/google-cloud-spanner/docs/_static
3277+
- ^packages/google-cloud-spanner/docs/_templates
3278+
- ^packages/google-cloud-spanner/docs/multiprocessing.rst
3279+
- ^packages/google-cloud-spanner/docs/spanner_v1/spanner.rst
3280+
- ^packages/google-cloud-spanner/docs/spanner_v1/services_.rst
3281+
- ^packages/google-cloud-spanner/docs/spanner_v1/types_.rst
3282+
- ^packages/google-cloud-spanner/docs/spanner_admin_database_v1/spanner_admin_database.rst
3283+
- ^packages/google-cloud-spanner/docs/spanner_admin_database_v1/services_.rst
3284+
- ^packages/google-cloud-spanner/docs/spanner_admin_database_v1/types_.rst
3285+
- ^packages/google-cloud-spanner/docs/spanner_admin_instance_v1/spanner_admin_instance.rst
3286+
- ^packages/google-cloud-spanner/docs/spanner_admin_instance_v1/services_.rst
3287+
- ^packages/google-cloud-spanner/docs/spanner_admin_instance_v1/types_.rst
3288+
- ^packages/google-cloud-spanner/google/cloud/spanner/__init__.py
3289+
- ^packages/google-cloud-spanner/google/cloud/spanner/gapic_version.py
3290+
- ^packages/google-cloud-spanner/google/cloud/spanner/py.typed
3291+
- ^packages/google-cloud-spanner/google/cloud/spanner_v1/__init__.py
3292+
- ^packages/google-cloud-spanner/google/cloud/spanner_v1/gapic_metadata.json
3293+
- ^packages/google-cloud-spanner/google/cloud/spanner_v1/gapic_version.py
3294+
- ^packages/google-cloud-spanner/google/cloud/spanner_v1/py.typed
3295+
- ^packages/google-cloud-spanner/google/cloud/spanner_v1/services
3296+
- ^packages/google-cloud-spanner/google/cloud/spanner_v1/types
3297+
- ^packages/google-cloud-spanner/google/cloud/spanner_admin_database_v1/__init__.py
3298+
- ^packages/google-cloud-spanner/google/cloud/spanner_admin_database_v1/gapic_metadata.json
3299+
- ^packages/google-cloud-spanner/google/cloud/spanner_admin_database_v1/gapic_version.py
3300+
- ^packages/google-cloud-spanner/google/cloud/spanner_admin_database_v1/py.typed
3301+
- ^packages/google-cloud-spanner/google/cloud/spanner_admin_database_v1/services
3302+
- ^packages/google-cloud-spanner/google/cloud/spanner_admin_database_v1/types
3303+
- ^packages/google-cloud-spanner/google/cloud/spanner_admin_instance_v1/__init__.py
3304+
- ^packages/google-cloud-spanner/google/cloud/spanner_admin_instance_v1/gapic_metadata.json
3305+
- ^packages/google-cloud-spanner/google/cloud/spanner_admin_instance_v1/gapic_version.py
3306+
- ^packages/google-cloud-spanner/google/cloud/spanner_admin_instance_v1/py.typed
3307+
- ^packages/google-cloud-spanner/google/cloud/spanner_admin_instance_v1/services
3308+
- ^packages/google-cloud-spanner/google/cloud/spanner_admin_instance_v1/types
3309+
- ^packages/google-cloud-spanner/testing
3310+
- ^packages/google-cloud-spanner/tests/__init__.py
3311+
- ^packages/google-cloud-spanner/tests/unit/__init__.py
3312+
- ^packages/google-cloud-spanner/tests/unit/gapic
3313+
- ^packages/google-cloud-spanner/samples/generated_samples
3314+
tag_format: '{id}-v{version}'
32383315
- id: google-cloud-speech
32393316
version: 2.38.0
32403317
last_generated_commit: c662840a94dbdf708caa44893a2d49119cdd391c
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# -*- coding: utf-8 -*-
2+
#
3+
# Copyright 2020 Google LLC
4+
#
5+
# Licensed under the Apache License, Version 2.0 (the "License");
6+
# you may not use this file except in compliance with the License.
7+
# You may obtain a copy of the License at
8+
#
9+
# https://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing, software
12+
# distributed under the License is distributed on an "AS IS" BASIS,
13+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
# See the License for the specific language governing permissions and
15+
# limitations under the License.
16+
17+
# Generated by synthtool. DO NOT EDIT!
18+
[run]
19+
branch = True
20+
omit =
21+
google/cloud/bigtable_admin/__init__.py
22+
google/cloud/bigtable_admin/gapic_version.py
23+
24+
[report]
25+
fail_under = 99
26+
show_missing = True
27+
exclude_lines =
28+
# Re-enable the standard pragma
29+
pragma: NO COVER
30+
# Ignore debug-only repr
31+
def __repr__
32+
# Ignore abstract methods
33+
raise NotImplementedError
34+
omit =
35+
*/site-packages/*.py

0 commit comments

Comments
 (0)