diff --git a/providers/common/compat/src/airflow/providers/common/compat/lazy_compat.py b/providers/common/compat/src/airflow/providers/common/compat/lazy_compat.py index 1d7907a1202d0..d549e95b457f2 100644 --- a/providers/common/compat/src/airflow/providers/common/compat/lazy_compat.py +++ b/providers/common/compat/src/airflow/providers/common/compat/lazy_compat.py @@ -209,6 +209,10 @@ "airflow.utils.python_virtualenv", ), # ============================================================================ + # Timeout Utilities + # ============================================================================ + "timeout": ("airflow.sdk.execution_time.timeout", "airflow.utils.timeout"), + # ============================================================================ # XCom & Task Communication # ============================================================================ "XCOM_RETURN_KEY": "airflow.models.xcom", diff --git a/providers/common/compat/src/airflow/providers/common/compat/lazy_compat.pyi b/providers/common/compat/src/airflow/providers/common/compat/lazy_compat.pyi index bacf20bde38d6..e9812165b65e1 100644 --- a/providers/common/compat/src/airflow/providers/common/compat/lazy_compat.pyi +++ b/providers/common/compat/src/airflow/providers/common/compat/lazy_compat.pyi @@ -132,6 +132,7 @@ from airflow.sdk.bases.decorator import ( ) from airflow.sdk.bases.sensor import poke_mode_only as poke_mode_only from airflow.sdk.definitions.template import literal as literal +from airflow.sdk.execution_time.timeout import timeout as timeout from airflow.sdk.execution_time.xcom import XCom as XCom __all__: list[str] = [ @@ -225,6 +226,7 @@ __all__: list[str] = [ "task", "task_group", "teardown", + "timeout", "timezone", "write_python_script", ] diff --git a/providers/google/pyproject.toml b/providers/google/pyproject.toml index 0bb82701d12fc..bf74a611b6bb2 100644 --- a/providers/google/pyproject.toml +++ b/providers/google/pyproject.toml @@ -58,7 +58,7 @@ requires-python = ">=3.10" # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build`` dependencies = [ "apache-airflow>=2.10.0", - "apache-airflow-providers-common-compat>=1.4.0", + "apache-airflow-providers-common-compat>=1.7.4", # + TODO: bump to next version "apache-airflow-providers-common-sql>=1.27.0", "asgiref>=3.5.2", "dill>=0.2.3", diff --git a/providers/google/src/airflow/providers/google/ads/hooks/ads.py b/providers/google/src/airflow/providers/google/ads/hooks/ads.py index 829f8a0d45fb6..469174f779e82 100644 --- a/providers/google/src/airflow/providers/google/ads/hooks/ads.py +++ b/providers/google/src/airflow/providers/google/ads/hooks/ads.py @@ -28,8 +28,8 @@ from google.auth.exceptions import GoogleAuthError from airflow.exceptions import AirflowException +from airflow.providers.common.compat.lazy_compat import BaseHook from airflow.providers.google.common.hooks.base_google import get_field -from airflow.providers.google.version_compat import BaseHook if TYPE_CHECKING: from google.ads.googleads.v21.services.services.customer_service import CustomerServiceClient diff --git a/providers/google/src/airflow/providers/google/assets/gcs.py b/providers/google/src/airflow/providers/google/assets/gcs.py index 1d26fe8d3dae9..770c75ac3e08e 100644 --- a/providers/google/src/airflow/providers/google/assets/gcs.py +++ b/providers/google/src/airflow/providers/google/assets/gcs.py @@ -18,23 +18,13 @@ from typing import TYPE_CHECKING +from airflow.providers.common.compat.lazy_compat import Asset from airflow.providers.google.cloud.hooks.gcs import _parse_gcs_url -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS if TYPE_CHECKING: from urllib.parse import SplitResult - from airflow.providers.common.compat.assets import Asset from airflow.providers.common.compat.openlineage.facet import Dataset as OpenLineageDataset -else: - try: - from airflow.providers.common.compat.assets import Asset - except ImportError: - if AIRFLOW_V_3_0_PLUS: - from airflow.sdk.definitions.asset import Asset - else: - # dataset is renamed to asset since Airflow 3.0 - from airflow.datasets import Dataset as Asset def create_asset(*, bucket: str, key: str, extra: dict | None = None) -> Asset: diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/cloud_sql.py b/providers/google/src/airflow/providers/google/cloud/hooks/cloud_sql.py index ab05183aef7fe..daa8bba916551 100644 --- a/providers/google/src/airflow/providers/google/cloud/hooks/cloud_sql.py +++ b/providers/google/src/airflow/providers/google/cloud/hooks/cloud_sql.py @@ -57,6 +57,7 @@ else: from airflow.models import Connection # type: ignore[assignment,attr-defined,no-redef] +from airflow.providers.common.compat.lazy_compat import BaseHook from airflow.providers.google.cloud.hooks.secret_manager import ( GoogleCloudSecretManagerHook, ) @@ -66,7 +67,6 @@ GoogleBaseHook, get_field, ) -from airflow.providers.google.version_compat import BaseHook from airflow.utils.log.logging_mixin import LoggingMixin if TYPE_CHECKING: diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/dataflow.py b/providers/google/src/airflow/providers/google/cloud/hooks/dataflow.py index d52c77ecb8ce6..05981be2d6238 100644 --- a/providers/google/src/airflow/providers/google/cloud/hooks/dataflow.py +++ b/providers/google/src/airflow/providers/google/cloud/hooks/dataflow.py @@ -51,12 +51,12 @@ from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning from airflow.providers.apache.beam.hooks.beam import BeamHook, BeamRunnerType, beam_options_to_args +from airflow.providers.common.compat.lazy_compat import timeout from airflow.providers.google.common.hooks.base_google import ( PROVIDE_PROJECT_ID, GoogleBaseAsyncHook, GoogleBaseHook, ) -from airflow.providers.google.version_compat import timeout from airflow.utils.log.logging_mixin import LoggingMixin if TYPE_CHECKING: diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/dataprep.py b/providers/google/src/airflow/providers/google/cloud/hooks/dataprep.py index 14554b11c1eb1..3f879a15b1b61 100644 --- a/providers/google/src/airflow/providers/google/cloud/hooks/dataprep.py +++ b/providers/google/src/airflow/providers/google/cloud/hooks/dataprep.py @@ -28,7 +28,7 @@ from requests import HTTPError from tenacity import retry, stop_after_attempt, wait_exponential -from airflow.providers.google.version_compat import BaseHook +from airflow.providers.common.compat.lazy_compat import BaseHook def _get_field(extras: dict, field_name: str) -> str | None: diff --git a/providers/google/src/airflow/providers/google/cloud/hooks/looker.py b/providers/google/src/airflow/providers/google/cloud/hooks/looker.py index bfd93e46166ac..906007a1e5e2d 100644 --- a/providers/google/src/airflow/providers/google/cloud/hooks/looker.py +++ b/providers/google/src/airflow/providers/google/cloud/hooks/looker.py @@ -29,7 +29,7 @@ from packaging.version import parse as parse_version from airflow.exceptions import AirflowException -from airflow.providers.google.version_compat import BaseHook +from airflow.providers.common.compat.lazy_compat import BaseHook from airflow.version import version if TYPE_CHECKING: diff --git a/providers/google/src/airflow/providers/google/cloud/links/base.py b/providers/google/src/airflow/providers/google/cloud/links/base.py index 9136b377910e3..64ea02a30f940 100644 --- a/providers/google/src/airflow/providers/google/cloud/links/base.py +++ b/providers/google/src/airflow/providers/google/cloud/links/base.py @@ -20,17 +20,8 @@ from typing import TYPE_CHECKING, ClassVar from urllib.parse import urlparse -from airflow.providers.google.version_compat import ( - AIRFLOW_V_3_0_PLUS, - BaseOperator, - BaseOperatorLink, - BaseSensorOperator, -) - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk.execution_time.xcom import XCom -else: - from airflow.models.xcom import XCom # type: ignore[no-redef] +from airflow.providers.common.compat.lazy_compat import BaseOperatorLink, BaseSensorOperator, XCom +from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS, BaseOperator if TYPE_CHECKING: from airflow.models.taskinstancekey import TaskInstanceKey diff --git a/providers/google/src/airflow/providers/google/cloud/links/dataproc.py b/providers/google/src/airflow/providers/google/cloud/links/dataproc.py index 67be746ff4d4a..b18d3df304e1f 100644 --- a/providers/google/src/airflow/providers/google/cloud/links/dataproc.py +++ b/providers/google/src/airflow/providers/google/cloud/links/dataproc.py @@ -25,22 +25,14 @@ import attr from airflow.exceptions import AirflowProviderDeprecationWarning +from airflow.providers.common.compat.lazy_compat import BaseOperatorLink, XCom from airflow.providers.google.cloud.links.base import BASE_LINK, BaseGoogleLink -from airflow.providers.google.version_compat import ( - AIRFLOW_V_3_0_PLUS, - BaseOperator, - BaseOperatorLink, -) if TYPE_CHECKING: from airflow.models.taskinstancekey import TaskInstanceKey + from airflow.providers.google.version_compat import BaseOperator from airflow.utils.context import Context -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk.execution_time.xcom import XCom -else: - from airflow.models.xcom import XCom # type: ignore[no-redef] - def __getattr__(name: str) -> Any: # PEP-562: deprecate module-level variable diff --git a/providers/google/src/airflow/providers/google/cloud/operators/cloud_sql.py b/providers/google/src/airflow/providers/google/cloud/operators/cloud_sql.py index 8574b02eb365b..ad60fbf2b0040 100644 --- a/providers/google/src/airflow/providers/google/cloud/operators/cloud_sql.py +++ b/providers/google/src/airflow/providers/google/cloud/operators/cloud_sql.py @@ -28,6 +28,7 @@ from airflow.configuration import conf from airflow.exceptions import AirflowException +from airflow.providers.common.compat.lazy_compat import BaseHook from airflow.providers.google.cloud.hooks.cloud_sql import CloudSQLDatabaseHook, CloudSQLHook from airflow.providers.google.cloud.links.cloud_sql import CloudSQLInstanceDatabaseLink, CloudSQLInstanceLink from airflow.providers.google.cloud.operators.cloud_base import GoogleCloudBaseOperator @@ -35,7 +36,6 @@ from airflow.providers.google.cloud.utils.field_validator import GcpBodyFieldValidator from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, get_field from airflow.providers.google.common.links.storage import FileDetailsLink -from airflow.providers.google.version_compat import BaseHook if TYPE_CHECKING: from airflow.models import Connection diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/bigquery.py b/providers/google/src/airflow/providers/google/cloud/sensors/bigquery.py index f08757f0edd0a..97c5c868b28ae 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/bigquery.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/bigquery.py @@ -26,12 +26,12 @@ from airflow.configuration import conf from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.cloud.hooks.bigquery import BigQueryHook from airflow.providers.google.cloud.triggers.bigquery import ( BigQueryTableExistenceTrigger, BigQueryTablePartitionExistenceTrigger, ) -from airflow.providers.google.version_compat import BaseSensorOperator if TYPE_CHECKING: from airflow.utils.context import Context diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/bigquery_dts.py b/providers/google/src/airflow/providers/google/cloud/sensors/bigquery_dts.py index c89763f9b6c49..5020079c07cfa 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/bigquery_dts.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/bigquery_dts.py @@ -26,14 +26,9 @@ from google.cloud.bigquery_datatransfer_v1 import TransferState from airflow.exceptions import AirflowException +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.cloud.hooks.bigquery_dts import BiqQueryDataTransferServiceHook from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] if TYPE_CHECKING: from google.api_core.retry import Retry diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/bigtable.py b/providers/google/src/airflow/providers/google/cloud/sensors/bigtable.py index fb49ca3513858..10ef01a763048 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/bigtable.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/bigtable.py @@ -26,16 +26,11 @@ from google.cloud.bigtable import enums from google.cloud.bigtable.table import ClusterState +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.cloud.hooks.bigtable import BigtableHook from airflow.providers.google.cloud.links.bigtable import BigtableTablesLink from airflow.providers.google.cloud.operators.bigtable import BigtableValidationMixin from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] if TYPE_CHECKING: from airflow.utils.context import Context diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/cloud_composer.py b/providers/google/src/airflow/providers/google/cloud/sensors/cloud_composer.py index daf6a05161e60..f58d484ad44e1 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/cloud_composer.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/cloud_composer.py @@ -31,15 +31,10 @@ from airflow.configuration import conf from airflow.exceptions import AirflowException +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.cloud.hooks.cloud_composer import CloudComposerHook from airflow.providers.google.cloud.triggers.cloud_composer import CloudComposerDAGRunTrigger from airflow.providers.google.common.consts import GOOGLE_DEFAULT_DEFERRABLE_METHOD_NAME -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] from airflow.utils.state import TaskInstanceState if TYPE_CHECKING: diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/cloud_storage_transfer_service.py b/providers/google/src/airflow/providers/google/cloud/sensors/cloud_storage_transfer_service.py index 05a97423e7860..cdcf604ff7b89 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/cloud_storage_transfer_service.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/cloud_storage_transfer_service.py @@ -24,6 +24,7 @@ from airflow.configuration import conf from airflow.exceptions import AirflowException +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.cloud.hooks.cloud_storage_transfer_service import ( COUNTERS, METADATA, @@ -35,12 +36,6 @@ CloudStorageTransferServiceCheckJobStatusTrigger, ) from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] if TYPE_CHECKING: from airflow.utils.context import Context diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/dataflow.py b/providers/google/src/airflow/providers/google/cloud/sensors/dataflow.py index c9f3a642802b0..e33fd9f2ba44f 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/dataflow.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/dataflow.py @@ -25,6 +25,7 @@ from airflow.configuration import conf from airflow.exceptions import AirflowException +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator, PokeReturnValue from airflow.providers.google.cloud.hooks.dataflow import ( DEFAULT_DATAFLOW_LOCATION, DataflowHook, @@ -37,7 +38,6 @@ DataflowJobStatusTrigger, ) from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID -from airflow.providers.google.version_compat import BaseSensorOperator, PokeReturnValue if TYPE_CHECKING: from airflow.utils.context import Context diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/dataform.py b/providers/google/src/airflow/providers/google/cloud/sensors/dataform.py index bdaa4a54573a3..0714efa3622f2 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/dataform.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/dataform.py @@ -23,13 +23,8 @@ from typing import TYPE_CHECKING from airflow.exceptions import AirflowException +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.cloud.hooks.dataform import DataformHook -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] if TYPE_CHECKING: from airflow.utils.context import Context diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/datafusion.py b/providers/google/src/airflow/providers/google/cloud/sensors/datafusion.py index 2f06c1144b95a..213102c19d72b 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/datafusion.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/datafusion.py @@ -23,14 +23,9 @@ from typing import TYPE_CHECKING from airflow.exceptions import AirflowException, AirflowNotFoundException +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.cloud.hooks.datafusion import DataFusionHook from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] if TYPE_CHECKING: from airflow.utils.context import Context diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/dataplex.py b/providers/google/src/airflow/providers/google/cloud/sensors/dataplex.py index 5d19eb3f0b03f..cc9caaa1ed5c7 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/dataplex.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/dataplex.py @@ -32,17 +32,12 @@ from google.cloud.dataplex_v1.types import DataScanJob from airflow.exceptions import AirflowException +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.cloud.hooks.dataplex import ( AirflowDataQualityScanException, AirflowDataQualityScanResultTimeoutException, DataplexHook, ) -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] class TaskState: diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/dataprep.py b/providers/google/src/airflow/providers/google/cloud/sensors/dataprep.py index 589e481dbd0b7..5a41e937219b2 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/dataprep.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/dataprep.py @@ -22,13 +22,8 @@ from collections.abc import Sequence from typing import TYPE_CHECKING +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.cloud.hooks.dataprep import GoogleDataprepHook, JobGroupStatuses -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] if TYPE_CHECKING: from airflow.utils.context import Context diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/dataproc.py b/providers/google/src/airflow/providers/google/cloud/sensors/dataproc.py index b5815333a688e..27ddd2893905e 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/dataproc.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/dataproc.py @@ -27,14 +27,9 @@ from google.cloud.dataproc_v1.types import Batch, JobStatus from airflow.exceptions import AirflowException +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.cloud.hooks.dataproc import DataprocHook from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] if TYPE_CHECKING: from airflow.utils.context import Context diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/dataproc_metastore.py b/providers/google/src/airflow/providers/google/cloud/sensors/dataproc_metastore.py index 3eba97f66d9e3..de9fe700bb7e8 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/dataproc_metastore.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/dataproc_metastore.py @@ -21,14 +21,9 @@ from typing import TYPE_CHECKING from airflow.exceptions import AirflowException +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.cloud.hooks.dataproc_metastore import DataprocMetastoreHook from airflow.providers.google.cloud.hooks.gcs import parse_json_from_gcs -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] if TYPE_CHECKING: from google.api_core.operation import Operation diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/gcs.py b/providers/google/src/airflow/providers/google/cloud/sensors/gcs.py index ccf3829cd50cc..133d4d1f5e26f 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/gcs.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/gcs.py @@ -29,6 +29,7 @@ from airflow.configuration import conf from airflow.exceptions import AirflowException +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator, poke_mode_only from airflow.providers.google.cloud.hooks.gcs import GCSHook from airflow.providers.google.cloud.triggers.gcs import ( GCSBlobTrigger, @@ -36,13 +37,6 @@ GCSPrefixBlobTrigger, GCSUploadSessionTrigger, ) -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator - from airflow.sdk.bases.sensor import poke_mode_only -else: - from airflow.sensors.base import BaseSensorOperator, poke_mode_only # type: ignore[no-redef] if TYPE_CHECKING: from google.api_core.retry import Retry diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/looker.py b/providers/google/src/airflow/providers/google/cloud/sensors/looker.py index 372e5ae954aec..f55a891a3e723 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/looker.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/looker.py @@ -22,13 +22,8 @@ from typing import TYPE_CHECKING from airflow.exceptions import AirflowException +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.cloud.hooks.looker import JobStatus, LookerHook -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] if TYPE_CHECKING: from airflow.utils.context import Context diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/pubsub.py b/providers/google/src/airflow/providers/google/cloud/sensors/pubsub.py index c93c7fcc5457d..cdc148d2e5a01 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/pubsub.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/pubsub.py @@ -28,14 +28,9 @@ from airflow.configuration import conf from airflow.exceptions import AirflowException +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.cloud.hooks.pubsub import PubSubHook from airflow.providers.google.cloud.triggers.pubsub import PubsubPullTrigger -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] if TYPE_CHECKING: from airflow.utils.context import Context diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/tasks.py b/providers/google/src/airflow/providers/google/cloud/sensors/tasks.py index 76394fd9f3a76..3a1e40b691c50 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/tasks.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/tasks.py @@ -22,14 +22,9 @@ from collections.abc import Sequence from typing import TYPE_CHECKING +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.cloud.hooks.tasks import CloudTasksHook from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] if TYPE_CHECKING: from airflow.utils.context import Context diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/vertex_ai/feature_store.py b/providers/google/src/airflow/providers/google/cloud/sensors/vertex_ai/feature_store.py index 1e50af812fa2a..c403e57bc67f5 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/vertex_ai/feature_store.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/vertex_ai/feature_store.py @@ -24,13 +24,8 @@ from typing import TYPE_CHECKING from airflow.exceptions import AirflowException +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.cloud.hooks.vertex_ai.feature_store import FeatureStoreHook -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] if TYPE_CHECKING: from airflow.utils.context import Context diff --git a/providers/google/src/airflow/providers/google/cloud/sensors/workflows.py b/providers/google/src/airflow/providers/google/cloud/sensors/workflows.py index c91871c54565c..2d429d3239827 100644 --- a/providers/google/src/airflow/providers/google/cloud/sensors/workflows.py +++ b/providers/google/src/airflow/providers/google/cloud/sensors/workflows.py @@ -23,14 +23,9 @@ from google.cloud.workflows.executions_v1beta import Execution from airflow.exceptions import AirflowException +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.cloud.hooks.workflows import WorkflowsHook from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] if TYPE_CHECKING: from google.api_core.retry import Retry diff --git a/providers/google/src/airflow/providers/google/common/hooks/base_google.py b/providers/google/src/airflow/providers/google/common/hooks/base_google.py index 957722659d629..5736ab116e8fc 100644 --- a/providers/google/src/airflow/providers/google/common/hooks/base_google.py +++ b/providers/google/src/airflow/providers/google/common/hooks/base_google.py @@ -50,12 +50,12 @@ from airflow import version from airflow.exceptions import AirflowException +from airflow.providers.common.compat.lazy_compat import BaseHook from airflow.providers.google.cloud.utils.credentials_provider import ( _get_scopes, _get_target_principal_and_delegates, get_credentials_and_project_id, ) -from airflow.providers.google.version_compat import BaseHook from airflow.utils.process_utils import patch_environ if TYPE_CHECKING: diff --git a/providers/google/src/airflow/providers/google/leveldb/hooks/leveldb.py b/providers/google/src/airflow/providers/google/leveldb/hooks/leveldb.py index 7211327cf0bf9..f1e03d1370429 100644 --- a/providers/google/src/airflow/providers/google/leveldb/hooks/leveldb.py +++ b/providers/google/src/airflow/providers/google/leveldb/hooks/leveldb.py @@ -21,7 +21,7 @@ from typing import Any from airflow.exceptions import AirflowException, AirflowOptionalProviderFeatureException -from airflow.providers.google.version_compat import BaseHook +from airflow.providers.common.compat.lazy_compat import BaseHook try: import plyvel diff --git a/providers/google/src/airflow/providers/google/marketing_platform/links/analytics_admin.py b/providers/google/src/airflow/providers/google/marketing_platform/links/analytics_admin.py index c632b53dfb27e..1d186d938679f 100644 --- a/providers/google/src/airflow/providers/google/marketing_platform/links/analytics_admin.py +++ b/providers/google/src/airflow/providers/google/marketing_platform/links/analytics_admin.py @@ -18,19 +18,13 @@ from typing import TYPE_CHECKING, ClassVar -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS, BaseOperator +from airflow.providers.common.compat.lazy_compat import BaseOperatorLink, XCom if TYPE_CHECKING: from airflow.models.taskinstancekey import TaskInstanceKey + from airflow.providers.google.version_compat import BaseOperator from airflow.utils.context import Context -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseOperatorLink - from airflow.sdk.execution_time.xcom import XCom -else: - from airflow.models import XCom - from airflow.models.baseoperatorlink import BaseOperatorLink # type: ignore[no-redef] - BASE_LINK = "https://analytics.google.com/analytics/web/" diff --git a/providers/google/src/airflow/providers/google/marketing_platform/sensors/campaign_manager.py b/providers/google/src/airflow/providers/google/marketing_platform/sensors/campaign_manager.py index f7e1f2c08eccd..bf1182976ac17 100644 --- a/providers/google/src/airflow/providers/google/marketing_platform/sensors/campaign_manager.py +++ b/providers/google/src/airflow/providers/google/marketing_platform/sensors/campaign_manager.py @@ -22,13 +22,8 @@ from collections.abc import Sequence from typing import TYPE_CHECKING +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.marketing_platform.hooks.campaign_manager import GoogleCampaignManagerHook -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] if TYPE_CHECKING: from airflow.utils.context import Context diff --git a/providers/google/src/airflow/providers/google/marketing_platform/sensors/display_video.py b/providers/google/src/airflow/providers/google/marketing_platform/sensors/display_video.py index a6b6eaf5f7e2a..1500397fd8495 100644 --- a/providers/google/src/airflow/providers/google/marketing_platform/sensors/display_video.py +++ b/providers/google/src/airflow/providers/google/marketing_platform/sensors/display_video.py @@ -22,13 +22,8 @@ from typing import TYPE_CHECKING from airflow.exceptions import AirflowException +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.marketing_platform.hooks.display_video import GoogleDisplayVideo360Hook -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] if TYPE_CHECKING: from airflow.utils.context import Context diff --git a/providers/google/src/airflow/providers/google/suite/sensors/drive.py b/providers/google/src/airflow/providers/google/suite/sensors/drive.py index df1de2c75415e..80bd30e813bbd 100644 --- a/providers/google/src/airflow/providers/google/suite/sensors/drive.py +++ b/providers/google/src/airflow/providers/google/suite/sensors/drive.py @@ -22,13 +22,8 @@ from collections.abc import Sequence from typing import TYPE_CHECKING +from airflow.providers.common.compat.lazy_compat import BaseSensorOperator from airflow.providers.google.suite.hooks.drive import GoogleDriveHook -from airflow.providers.google.version_compat import AIRFLOW_V_3_0_PLUS - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseSensorOperator -else: - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] if TYPE_CHECKING: from airflow.utils.context import Context diff --git a/providers/google/src/airflow/providers/google/version_compat.py b/providers/google/src/airflow/providers/google/version_compat.py index 764970dcf34c4..3ab92754486f2 100644 --- a/providers/google/src/airflow/providers/google/version_compat.py +++ b/providers/google/src/airflow/providers/google/version_compat.py @@ -47,30 +47,10 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]: from airflow.hooks.base import BaseHook # type: ignore[attr-defined,no-redef] from airflow.models import BaseOperator -# Other SDK components: Available since 3.0+ -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import ( - BaseOperatorLink, - BaseSensorOperator, - PokeReturnValue, - ) -else: - from airflow.models import BaseOperatorLink - from airflow.sensors.base import BaseSensorOperator, PokeReturnValue # type: ignore[no-redef] - -try: - from airflow.sdk.execution_time.timeout import timeout -except ImportError: - from airflow.utils.timeout import timeout # type: ignore[assignment,attr-defined,no-redef] - # Explicitly export these imports to protect them from being removed by linters __all__ = [ "AIRFLOW_V_3_0_PLUS", "AIRFLOW_V_3_1_PLUS", "BaseHook", "BaseOperator", - "BaseSensorOperator", - "BaseOperatorLink", - "PokeReturnValue", - "timeout", ]