From 0763aec7e877de4afa682faf390a03875df47f25 Mon Sep 17 00:00:00 2001 From: Mattie Fu Date: Thu, 30 Apr 2026 02:17:01 +0000 Subject: [PATCH 1/3] feat: add value_bitmask_filter to the read API --- .../google/cloud/bigtable_v2/__init__.py | 6 +-- .../services/bigtable/async_client.py | 44 +++++++++---------- .../bigtable_v2/services/bigtable/client.py | 38 ++++++++-------- .../services/bigtable/transports/base.py | 3 +- .../services/bigtable/transports/grpc.py | 3 +- .../bigtable/transports/grpc_asyncio.py | 3 +- .../services/bigtable/transports/rest.py | 7 +-- .../services/bigtable/transports/rest_base.py | 3 +- .../cloud/bigtable_v2/types/__init__.py | 18 +++----- .../cloud/bigtable_v2/types/bigtable.py | 4 +- .../google/cloud/bigtable_v2/types/data.py | 26 ++++++++++- 11 files changed, 84 insertions(+), 71 deletions(-) diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/__init__.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/__init__.py index 6dcbba6e4912..26a0fa57750d 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/__init__.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/__init__.py @@ -16,7 +16,6 @@ import sys import google.api_core as api_core - from google.cloud.bigtable_v2 import gapic_version as package_version __version__ = package_version.__version__ @@ -28,7 +27,6 @@ # this code path once we drop support for Python 3.7 import importlib_metadata as metadata - from .services.bigtable import BigtableAsyncClient, BigtableClient from .types.bigtable import ( CheckAndMutateRowRequest, @@ -80,6 +78,7 @@ StreamPartition, TimestampRange, Value, + ValueBitmask, ValueRange, ) from .types.feature_flags import FeatureFlags @@ -161,7 +160,7 @@ def _get_version(dependency_name): _next_supported_version = "4.25.8" _next_supported_version_tuple = (4, 25, 8) _recommendation = " (we recommend 6.x)" - (_version_used, _version_used_string) = _get_version(_dependency_package) + _version_used, _version_used_string = _get_version(_dependency_package) if _version_used and _version_used < _next_supported_version_tuple: warnings.warn( f"Package {_package_label} depends on " @@ -246,4 +245,5 @@ def _get_version(dependency_name): "Type", "Value", "ValueRange", + "ValueBitmask", ) diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/async_client.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/async_client.py index 90732351193a..48bb4d6f4cc4 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/async_client.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/async_client.py @@ -37,9 +37,8 @@ from google.api_core import retry_async as retries from google.api_core.client_options import ClientOptions from google.auth import credentials as ga_credentials # type: ignore -from google.oauth2 import service_account # type: ignore - from google.cloud.bigtable_v2 import gapic_version as package_version +from google.oauth2 import service_account # type: ignore try: OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault, None] @@ -47,7 +46,6 @@ OptionalRetry = Union[retries.AsyncRetry, object, None] # type: ignore import google.protobuf.timestamp_pb2 as timestamp_pb2 # type: ignore - from google.cloud.bigtable_v2.types import bigtable, data, request_stats from .client import BigtableClient @@ -118,9 +116,7 @@ def from_service_account_info(cls, info: dict, *args, **kwargs): Returns: BigtableAsyncClient: The constructed client. """ - sa_info_func = ( - BigtableClient.from_service_account_info.__func__ # type: ignore - ) + sa_info_func = BigtableClient.from_service_account_info.__func__ # type: ignore return sa_info_func(BigtableAsyncClient, info, *args, **kwargs) @classmethod @@ -137,9 +133,7 @@ def from_service_account_file(cls, filename: str, *args, **kwargs): Returns: BigtableAsyncClient: The constructed client. """ - sa_file_func = ( - BigtableClient.from_service_account_file.__func__ # type: ignore - ) + sa_file_func = BigtableClient.from_service_account_file.__func__ # type: ignore return sa_file_func(BigtableAsyncClient, filename, *args, **kwargs) from_service_account_json = from_service_account_file @@ -281,21 +275,23 @@ def __init__( ): # pragma: NO COVER _LOGGER.debug( "Created client `google.bigtable_v2.BigtableAsyncClient`.", - extra={ - "serviceName": "google.bigtable.v2.Bigtable", - "universeDomain": getattr( - self._client._transport._credentials, "universe_domain", "" - ), - "credentialsType": f"{type(self._client._transport._credentials).__module__}.{type(self._client._transport._credentials).__qualname__}", - "credentialsInfo": getattr( - self.transport._credentials, "get_cred_info", lambda: None - )(), - } - if hasattr(self._client._transport, "_credentials") - else { - "serviceName": "google.bigtable.v2.Bigtable", - "credentialsType": None, - }, + extra=( + { + "serviceName": "google.bigtable.v2.Bigtable", + "universeDomain": getattr( + self._client._transport._credentials, "universe_domain", "" + ), + "credentialsType": f"{type(self._client._transport._credentials).__module__}.{type(self._client._transport._credentials).__qualname__}", + "credentialsInfo": getattr( + self.transport._credentials, "get_cred_info", lambda: None + )(), + } + if hasattr(self._client._transport, "_credentials") + else { + "serviceName": "google.bigtable.v2.Bigtable", + "credentialsType": None, + } + ), ) def read_rows( diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/client.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/client.py index d0dbe91866ac..ce120737902a 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/client.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/client.py @@ -44,9 +44,8 @@ from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.auth.transport import mtls # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore -from google.oauth2 import service_account # type: ignore - from google.cloud.bigtable_v2 import gapic_version as package_version +from google.oauth2 import service_account # type: ignore try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] @@ -63,7 +62,6 @@ _LOGGER = std_logging.getLogger(__name__) import google.protobuf.timestamp_pb2 as timestamp_pb2 # type: ignore - from google.cloud.bigtable_v2.types import bigtable, data, request_stats from .transports.base import DEFAULT_CLIENT_INFO, BigtableTransport @@ -774,21 +772,25 @@ def __init__( ): # pragma: NO COVER _LOGGER.debug( "Created client `google.bigtable_v2.BigtableClient`.", - extra={ - "serviceName": "google.bigtable.v2.Bigtable", - "universeDomain": getattr( - self._transport._credentials, "universe_domain", "" - ), - "credentialsType": f"{type(self._transport._credentials).__module__}.{type(self._transport._credentials).__qualname__}", - "credentialsInfo": getattr( - self.transport._credentials, "get_cred_info", lambda: None - )(), - } - if hasattr(self._transport, "_credentials") - else { - "serviceName": "google.bigtable.v2.Bigtable", - "credentialsType": None, - }, + extra=( + { + "serviceName": "google.bigtable.v2.Bigtable", + "universeDomain": getattr( + self._transport._credentials, "universe_domain", "" + ), + "credentialsType": f"{type(self._transport._credentials).__module__}.{type(self._transport._credentials).__qualname__}", + "credentialsInfo": getattr( + self.transport._credentials, + "get_cred_info", + lambda: None, + )(), + } + if hasattr(self._transport, "_credentials") + else { + "serviceName": "google.bigtable.v2.Bigtable", + "credentialsType": None, + } + ), ) def read_rows( diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/base.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/base.py index 27a6204cf903..5b7589c2a018 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/base.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/base.py @@ -23,10 +23,9 @@ from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore -from google.oauth2 import service_account # type: ignore - from google.cloud.bigtable_v2 import gapic_version as package_version from google.cloud.bigtable_v2.types import bigtable +from google.oauth2 import service_account # type: ignore DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( gapic_version=package_version.__version__ diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/grpc.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/grpc.py index addbd2b89ce2..37fd7bd93a1a 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/grpc.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/grpc.py @@ -26,9 +26,8 @@ from google.api_core import gapic_v1, grpc_helpers from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore -from google.protobuf.json_format import MessageToJson - from google.cloud.bigtable_v2.types import bigtable +from google.protobuf.json_format import MessageToJson from .base import DEFAULT_CLIENT_INFO, BigtableTransport diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/grpc_asyncio.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/grpc_asyncio.py index 54e68eacefab..34fd5694db55 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/grpc_asyncio.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/grpc_asyncio.py @@ -28,11 +28,10 @@ from google.api_core import retry_async as retries from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore +from google.cloud.bigtable_v2.types import bigtable from google.protobuf.json_format import MessageToJson from grpc.experimental import aio # type: ignore -from google.cloud.bigtable_v2.types import bigtable - from .base import DEFAULT_CLIENT_INFO, BigtableTransport from .grpc import BigtableGrpcTransport diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/rest.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/rest.py index c233f68ea815..df132896e84e 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/rest.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/rest.py @@ -25,11 +25,10 @@ from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.requests import AuthorizedSession # type: ignore +from google.cloud.bigtable_v2.types import bigtable from google.protobuf import json_format from requests import __version__ as requests_version -from google.cloud.bigtable_v2.types import bigtable - from .base import DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO from .rest_base import _BaseBigtableRestTransport @@ -1164,7 +1163,9 @@ def __call__( """ - http_options = _BaseBigtableRestTransport._BaseGenerateInitialChangeStreamPartitions._get_http_options() + http_options = ( + _BaseBigtableRestTransport._BaseGenerateInitialChangeStreamPartitions._get_http_options() + ) request, metadata = ( self._interceptor.pre_generate_initial_change_stream_partitions( diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/rest_base.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/rest_base.py index 429dcc9604b8..03049669239d 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/rest_base.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/rest_base.py @@ -18,9 +18,8 @@ from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union from google.api_core import gapic_v1, path_template -from google.protobuf import json_format - from google.cloud.bigtable_v2.types import bigtable +from google.protobuf import json_format from .base import DEFAULT_CLIENT_INFO, BigtableTransport diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/__init__.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/__init__.py index b13c076a2cf6..a8029fd7bf26 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/__init__.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/__init__.py @@ -63,26 +63,19 @@ StreamPartition, TimestampRange, Value, + ValueBitmask, ValueRange, ) -from .feature_flags import ( - FeatureFlags, -) -from .peer_info import ( - PeerInfo, -) +from .feature_flags import FeatureFlags +from .peer_info import PeerInfo from .request_stats import ( FullReadStatsView, ReadIterationStats, RequestLatencyStats, RequestStats, ) -from .response_params import ( - ResponseParams, -) -from .types import ( - Type, -) +from .response_params import ResponseParams +from .types import Type __all__ = ( "CheckAndMutateRowRequest", @@ -133,6 +126,7 @@ "TimestampRange", "Value", "ValueRange", + "ValueBitmask", "FeatureFlags", "PeerInfo", "FullReadStatsView", diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/bigtable.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/bigtable.py index b6eb9ce21359..92d6b4a7b54e 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/bigtable.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/bigtable.py @@ -22,9 +22,9 @@ import google.protobuf.wrappers_pb2 as wrappers_pb2 # type: ignore import google.rpc.status_pb2 as status_pb2 # type: ignore import proto # type: ignore - -from google.cloud.bigtable_v2.types import data, types +from google.cloud.bigtable_v2.types import data from google.cloud.bigtable_v2.types import request_stats as gb_request_stats +from google.cloud.bigtable_v2.types import types __protobuf__ = proto.module( package="google.bigtable.v2", diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/data.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/data.py index d4c481c93988..e0794dbb0381 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/data.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/data.py @@ -20,7 +20,6 @@ import google.protobuf.timestamp_pb2 as timestamp_pb2 # type: ignore import google.type.date_pb2 as date_pb2 # type: ignore import proto # type: ignore - from google.cloud.bigtable_v2.types import types __protobuf__ = proto.module( @@ -37,6 +36,7 @@ "ColumnRange", "TimestampRange", "ValueRange", + "ValueBitmask", "RowFilter", "Mutation", "ReadModifyWriteRule", @@ -558,6 +558,24 @@ class ValueRange(proto.Message): ) +class ValueBitmask(proto.Message): + r"""Restricts the output to cells whose values match the given + bitmask. + + Attributes: + mask (bytes): + Required. Mask applied to the value. Evaluated as: + ``(value & mask) == mask`` The mask length must exactly + match the value length, otherwise the cell is not considered + a match. + """ + + mask: bytes = proto.Field( + proto.BYTES, + number=1, + ) + + class RowFilter(proto.Message): r"""Takes a row as input and produces an alternate view of the row based on specified rules. For example, a RowFilter might trim down a row @@ -1012,6 +1030,12 @@ class Condition(proto.Message): number=19, oneof="filter", ) + value_bitmask_filter: "ValueBitmask" = proto.Field( + proto.MESSAGE, + number=20, + oneof="filter", + message="ValueBitmask", + ) class Mutation(proto.Message): From d0e08f932335c4b42c2807efde6eb8baa60a79fd Mon Sep 17 00:00:00 2001 From: Mattie Fu Date: Thu, 30 Apr 2026 02:57:39 +0000 Subject: [PATCH 2/3] reformat --- .../google/cloud/bigtable_v2/__init__.py | 1 + .../cloud/bigtable_v2/services/bigtable/async_client.py | 4 +++- .../google/cloud/bigtable_v2/services/bigtable/client.py | 4 +++- .../cloud/bigtable_v2/services/bigtable/transports/base.py | 3 ++- .../cloud/bigtable_v2/services/bigtable/transports/grpc.py | 3 ++- .../services/bigtable/transports/grpc_asyncio.py | 3 ++- .../cloud/bigtable_v2/services/bigtable/transports/rest.py | 7 +++---- .../bigtable_v2/services/bigtable/transports/rest_base.py | 3 ++- .../google/cloud/bigtable_v2/types/bigtable.py | 4 ++-- .../google/cloud/bigtable_v2/types/data.py | 1 + 10 files changed, 21 insertions(+), 12 deletions(-) diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/__init__.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/__init__.py index 26a0fa57750d..90640c28c562 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/__init__.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/__init__.py @@ -16,6 +16,7 @@ import sys import google.api_core as api_core + from google.cloud.bigtable_v2 import gapic_version as package_version __version__ = package_version.__version__ diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/async_client.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/async_client.py index 48bb4d6f4cc4..abc92e0b6708 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/async_client.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/async_client.py @@ -37,15 +37,17 @@ from google.api_core import retry_async as retries from google.api_core.client_options import ClientOptions from google.auth import credentials as ga_credentials # type: ignore -from google.cloud.bigtable_v2 import gapic_version as package_version from google.oauth2 import service_account # type: ignore +from google.cloud.bigtable_v2 import gapic_version as package_version + try: OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault, None] except AttributeError: # pragma: NO COVER OptionalRetry = Union[retries.AsyncRetry, object, None] # type: ignore import google.protobuf.timestamp_pb2 as timestamp_pb2 # type: ignore + from google.cloud.bigtable_v2.types import bigtable, data, request_stats from .client import BigtableClient diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/client.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/client.py index ce120737902a..6844440c43ac 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/client.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/client.py @@ -44,9 +44,10 @@ from google.auth.exceptions import MutualTLSChannelError # type: ignore from google.auth.transport import mtls # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore -from google.cloud.bigtable_v2 import gapic_version as package_version from google.oauth2 import service_account # type: ignore +from google.cloud.bigtable_v2 import gapic_version as package_version + try: OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault, None] except AttributeError: # pragma: NO COVER @@ -62,6 +63,7 @@ _LOGGER = std_logging.getLogger(__name__) import google.protobuf.timestamp_pb2 as timestamp_pb2 # type: ignore + from google.cloud.bigtable_v2.types import bigtable, data, request_stats from .transports.base import DEFAULT_CLIENT_INFO, BigtableTransport diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/base.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/base.py index 5b7589c2a018..27a6204cf903 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/base.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/base.py @@ -23,9 +23,10 @@ from google.api_core import gapic_v1 from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore +from google.oauth2 import service_account # type: ignore + from google.cloud.bigtable_v2 import gapic_version as package_version from google.cloud.bigtable_v2.types import bigtable -from google.oauth2 import service_account # type: ignore DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( gapic_version=package_version.__version__ diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/grpc.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/grpc.py index 37fd7bd93a1a..addbd2b89ce2 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/grpc.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/grpc.py @@ -26,9 +26,10 @@ from google.api_core import gapic_v1, grpc_helpers from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore -from google.cloud.bigtable_v2.types import bigtable from google.protobuf.json_format import MessageToJson +from google.cloud.bigtable_v2.types import bigtable + from .base import DEFAULT_CLIENT_INFO, BigtableTransport try: diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/grpc_asyncio.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/grpc_asyncio.py index 34fd5694db55..54e68eacefab 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/grpc_asyncio.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/grpc_asyncio.py @@ -28,10 +28,11 @@ from google.api_core import retry_async as retries from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.grpc import SslCredentials # type: ignore -from google.cloud.bigtable_v2.types import bigtable from google.protobuf.json_format import MessageToJson from grpc.experimental import aio # type: ignore +from google.cloud.bigtable_v2.types import bigtable + from .base import DEFAULT_CLIENT_INFO, BigtableTransport from .grpc import BigtableGrpcTransport diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/rest.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/rest.py index df132896e84e..c233f68ea815 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/rest.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/rest.py @@ -25,10 +25,11 @@ from google.api_core import retry as retries from google.auth import credentials as ga_credentials # type: ignore from google.auth.transport.requests import AuthorizedSession # type: ignore -from google.cloud.bigtable_v2.types import bigtable from google.protobuf import json_format from requests import __version__ as requests_version +from google.cloud.bigtable_v2.types import bigtable + from .base import DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO from .rest_base import _BaseBigtableRestTransport @@ -1163,9 +1164,7 @@ def __call__( """ - http_options = ( - _BaseBigtableRestTransport._BaseGenerateInitialChangeStreamPartitions._get_http_options() - ) + http_options = _BaseBigtableRestTransport._BaseGenerateInitialChangeStreamPartitions._get_http_options() request, metadata = ( self._interceptor.pre_generate_initial_change_stream_partitions( diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/rest_base.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/rest_base.py index 03049669239d..429dcc9604b8 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/rest_base.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/services/bigtable/transports/rest_base.py @@ -18,9 +18,10 @@ from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union from google.api_core import gapic_v1, path_template -from google.cloud.bigtable_v2.types import bigtable from google.protobuf import json_format +from google.cloud.bigtable_v2.types import bigtable + from .base import DEFAULT_CLIENT_INFO, BigtableTransport diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/bigtable.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/bigtable.py index 92d6b4a7b54e..b6eb9ce21359 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/bigtable.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/bigtable.py @@ -22,9 +22,9 @@ import google.protobuf.wrappers_pb2 as wrappers_pb2 # type: ignore import google.rpc.status_pb2 as status_pb2 # type: ignore import proto # type: ignore -from google.cloud.bigtable_v2.types import data + +from google.cloud.bigtable_v2.types import data, types from google.cloud.bigtable_v2.types import request_stats as gb_request_stats -from google.cloud.bigtable_v2.types import types __protobuf__ = proto.module( package="google.bigtable.v2", diff --git a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/data.py b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/data.py index e0794dbb0381..8c87e7823c80 100644 --- a/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/data.py +++ b/packages/google-cloud-bigtable/google/cloud/bigtable_v2/types/data.py @@ -20,6 +20,7 @@ import google.protobuf.timestamp_pb2 as timestamp_pb2 # type: ignore import google.type.date_pb2 as date_pb2 # type: ignore import proto # type: ignore + from google.cloud.bigtable_v2.types import types __protobuf__ = proto.module( From 5513068860c922574fa20bd00493bf0b060b3cdb Mon Sep 17 00:00:00 2001 From: Mattie Fu Date: Thu, 30 Apr 2026 02:57:39 +0000 Subject: [PATCH 3/3] fix: clear pytest recwarn in MutationsBatcher tests --- .../tests/unit/data/_async/test_mutations_batcher.py | 1 + .../tests/unit/data/_sync_autogen/test_mutations_batcher.py | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/google-cloud-bigtable/tests/unit/data/_async/test_mutations_batcher.py b/packages/google-cloud-bigtable/tests/unit/data/_async/test_mutations_batcher.py index 75de7c281332..437334e1ceaf 100644 --- a/packages/google-cloud-bigtable/tests/unit/data/_async/test_mutations_batcher.py +++ b/packages/google-cloud-bigtable/tests/unit/data/_async/test_mutations_batcher.py @@ -1058,6 +1058,7 @@ async def test__on_exit(self, recwarn): assert len(w) == 1 assert "unflushed mutations" in str(w[0].message).lower() assert str(num_left) in str(w[0].message) + recwarn.clear() # calling while closed is noop instance._closed.set() instance._on_exit() diff --git a/packages/google-cloud-bigtable/tests/unit/data/_sync_autogen/test_mutations_batcher.py b/packages/google-cloud-bigtable/tests/unit/data/_sync_autogen/test_mutations_batcher.py index f6568448ff8c..a9dc5593174f 100644 --- a/packages/google-cloud-bigtable/tests/unit/data/_sync_autogen/test_mutations_batcher.py +++ b/packages/google-cloud-bigtable/tests/unit/data/_sync_autogen/test_mutations_batcher.py @@ -923,6 +923,7 @@ def test__on_exit(self, recwarn): assert len(w) == 1 assert "unflushed mutations" in str(w[0].message).lower() assert str(num_left) in str(w[0].message) + recwarn.clear() instance._closed.set() instance._on_exit() assert len(recwarn) == 0