Skip to content

Commit ad08f66

Browse files
authored
Remove <2.0.0 limit on google-cloud-bigtable (#29644)
1 parent ff8fae1 commit ad08f66

8 files changed

Lines changed: 18 additions & 26 deletions

File tree

airflow/providers/google/cloud/hooks/bigtable.py

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,11 @@
2222
import warnings
2323
from typing import Sequence
2424

25-
from google.cloud.bigtable import Client
25+
from google.cloud.bigtable import Client, enums
2626
from google.cloud.bigtable.cluster import Cluster
2727
from google.cloud.bigtable.column_family import ColumnFamily, GarbageCollectionRule
2828
from google.cloud.bigtable.instance import Instance
2929
from google.cloud.bigtable.table import ClusterState, Table
30-
from google.cloud.bigtable_admin_v2 import enums
3130

3231
from airflow.providers.google.common.consts import CLIENT_INFO
3332
from airflow.providers.google.common.hooks.base_google import GoogleBaseHook
@@ -56,9 +55,9 @@ def __init__(
5655
delegate_to=delegate_to,
5756
impersonation_chain=impersonation_chain,
5857
)
59-
self._client = None
58+
self._client: Client | None = None
6059

61-
def _get_client(self, project_id: str):
60+
def _get_client(self, project_id: str) -> Client:
6261
if not self._client:
6362
self._client = Client(
6463
project=project_id,
@@ -69,7 +68,7 @@ def _get_client(self, project_id: str):
6968
return self._client
7069

7170
@GoogleBaseHook.fallback_to_default_project_id
72-
def get_instance(self, instance_id: str, project_id: str) -> Instance:
71+
def get_instance(self, instance_id: str, project_id: str) -> Instance | None:
7372
"""
7473
Retrieves and returns the specified Cloud Bigtable instance if it exists.
7574
Otherwise, returns None.
@@ -113,10 +112,10 @@ def create_instance(
113112
project_id: str,
114113
replica_clusters: list[dict[str, str]] | None = None,
115114
instance_display_name: str | None = None,
116-
instance_type: enums.Instance.Type = enums.Instance.Type.TYPE_UNSPECIFIED,
115+
instance_type: enums.Instance.Type = enums.Instance.Type.UNSPECIFIED, # type: ignore[assignment]
117116
instance_labels: dict | None = None,
118117
cluster_nodes: int | None = None,
119-
cluster_storage_type: enums.StorageType = enums.StorageType.STORAGE_TYPE_UNSPECIFIED,
118+
cluster_storage_type: enums.StorageType = enums.StorageType.UNSPECIFIED, # type: ignore[assignment]
120119
timeout: float | None = None,
121120
) -> Instance:
122121
"""
@@ -142,9 +141,6 @@ def create_instance(
142141
:param timeout: (optional) timeout (in seconds) for instance creation.
143142
If None is not specified, Operator will wait indefinitely.
144143
"""
145-
cluster_storage_type = enums.StorageType(cluster_storage_type)
146-
instance_type = enums.Instance.Type(instance_type)
147-
148144
instance = Instance(
149145
instance_id,
150146
self._get_client(project_id=project_id),
@@ -200,8 +196,6 @@ def update_instance(
200196
:param timeout: (optional) timeout (in seconds) for instance update.
201197
If None is not specified, Operator will wait indefinitely.
202198
"""
203-
instance_type = enums.Instance.Type(instance_type)
204-
205199
instance = Instance(
206200
instance_id=instance_id,
207201
client=self._get_client(project_id=project_id),
@@ -253,7 +247,10 @@ def delete_table(self, instance_id: str, table_id: str, project_id: str) -> None
253247
BigTable exists. If set to None or missing,
254248
the default project_id from the Google Cloud connection is used.
255249
"""
256-
table = self.get_instance(instance_id=instance_id, project_id=project_id).table(table_id=table_id)
250+
instance = self.get_instance(instance_id=instance_id, project_id=project_id)
251+
if instance is None:
252+
raise RuntimeError("Instance %s did not exist; unable to delete table %s" % instance_id, table_id)
253+
table = instance.table(table_id=table_id)
257254
table.delete()
258255

259256
@staticmethod

airflow/providers/google/cloud/operators/bigtable.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
from typing import TYPE_CHECKING, Iterable, Sequence
2323

2424
import google.api_core.exceptions
25+
from google.cloud.bigtable import enums
2526
from google.cloud.bigtable.column_family import GarbageCollectionRule
26-
from google.cloud.bigtable_admin_v2 import enums
2727

2828
from airflow.exceptions import AirflowException
2929
from airflow.models import BaseOperator

airflow/providers/google/cloud/sensors/bigtable.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
from typing import TYPE_CHECKING, Sequence
2222

2323
import google.api_core.exceptions
24+
from google.cloud.bigtable import enums
2425
from google.cloud.bigtable.table import ClusterState
25-
from google.cloud.bigtable_admin_v2 import enums
2626

2727
from airflow.providers.google.cloud.hooks.bigtable import BigtableHook
2828
from airflow.providers.google.cloud.links.bigtable import BigtableTablesLink
@@ -103,7 +103,7 @@ def poke(self, context: Context) -> bool:
103103
)
104104
return False
105105

106-
ready_state = ClusterState(enums.Table.ClusterState.ReplicationState.READY)
106+
ready_state = ClusterState(enums.Table.ReplicationState.READY)
107107

108108
is_table_replicated = True
109109
for cluster_id in cluster_states.keys():

airflow/providers/google/provider.yaml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ dependencies:
8383
- google-cloud-aiplatform>=1.7.1,<2.0.0
8484
- google-cloud-automl>=2.1.0
8585
- google-cloud-bigquery-datatransfer>=3.0.0
86-
- google-cloud-bigtable>=1.0.0,<2.0.0
86+
- google-cloud-bigtable>=2.0.0,<3.0.0
8787
- google-cloud-build>=3.0.0
8888
- google-cloud-compute>=0.1.0,<2.0.0
8989
- google-cloud-container>=2.2.0,<3.0.0
@@ -127,9 +127,6 @@ dependencies:
127127
# A transient dependency of google-cloud-bigquery-datatransfer, but we
128128
# further constrain it since older versions are buggy.
129129
- proto-plus>=1.19.6
130-
# Google bigtable client require protobuf <= 3.20.0. We can remove the limitation
131-
# when this limitation is removed
132-
- protobuf<=3.20.0
133130

134131
integrations:
135132
- integration-name: Google Analytics360

docs/apache-airflow-providers-google/index.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ PIP package Version required
112112
``google-cloud-aiplatform`` ``>=1.7.1,<2.0.0``
113113
``google-cloud-automl`` ``>=2.1.0``
114114
``google-cloud-bigquery-datatransfer`` ``>=3.0.0``
115-
``google-cloud-bigtable`` ``>=1.0.0,<2.0.0``
115+
``google-cloud-bigtable`` ``>=2.0.0,<3.0.0``
116116
``google-cloud-build`` ``>=3.0.0``
117117
``google-cloud-compute`` ``>=0.1.0,<2.0.0``
118118
``google-cloud-container`` ``>=2.2.0,<3.0.0``

generated/provider_dependencies.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@
338338
"google-cloud-aiplatform>=1.7.1,<2.0.0",
339339
"google-cloud-automl>=2.1.0",
340340
"google-cloud-bigquery-datatransfer>=3.0.0",
341-
"google-cloud-bigtable>=1.0.0,<2.0.0",
341+
"google-cloud-bigtable>=2.0.0,<3.0.0",
342342
"google-cloud-build>=3.0.0",
343343
"google-cloud-compute>=0.1.0,<2.0.0",
344344
"google-cloud-container>=2.2.0,<3.0.0",
@@ -375,7 +375,6 @@
375375
"pandas-gbq",
376376
"pandas>=0.17.1",
377377
"proto-plus>=1.19.6",
378-
"protobuf<=3.20.0",
379378
"sqlalchemy-bigquery>=1.2.1"
380379
],
381380
"cross-providers-deps": [

tests/providers/google/cloud/hooks/test_bigtable.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,8 @@
2121
from unittest.mock import PropertyMock
2222

2323
import google
24-
from google.cloud.bigtable import Client
24+
from google.cloud.bigtable import Client, enums
2525
from google.cloud.bigtable.instance import Instance
26-
from google.cloud.bigtable_admin_v2 import enums
2726

2827
from airflow.providers.google.cloud.hooks.bigtable import BigtableHook
2928
from airflow.providers.google.common.consts import CLIENT_INFO

tests/providers/google/cloud/operators/test_bigtable.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121

2222
import google.api_core.exceptions
2323
import pytest
24+
from google.cloud.bigtable import enums
2425
from google.cloud.bigtable.column_family import MaxVersionsGCRule
2526
from google.cloud.bigtable.instance import Instance
26-
from google.cloud.bigtable_admin_v2 import enums
2727

2828
from airflow.exceptions import AirflowException
2929
from airflow.providers.google.cloud.operators.bigtable import (

0 commit comments

Comments
 (0)