diff --git a/dev/breeze/tests/test_selective_checks.py b/dev/breeze/tests/test_selective_checks.py index 16468447e81c8..1a54d5db90e5c 100644 --- a/dev/breeze/tests/test_selective_checks.py +++ b/dev/breeze/tests/test_selective_checks.py @@ -2126,7 +2126,7 @@ def test_upgrade_to_newer_dependencies( ("providers/common/sql/src/airflow/providers/common/sql/common_sql_python.py",), { "docs-list-as-string": "amazon apache.drill apache.druid apache.hive " - "apache.impala apache.pinot common.sql databricks elasticsearch " + "apache.impala apache.pinot common.compat common.sql databricks elasticsearch " "exasol google jdbc microsoft.mssql mysql odbc openlineage " "oracle pgvector postgres presto slack snowflake sqlite teradata trino vertica ydb", }, diff --git a/providers/common/sql/pyproject.toml b/providers/common/sql/pyproject.toml index fc1b640a048a3..7ce3d12edc43f 100644 --- a/providers/common/sql/pyproject.toml +++ b/providers/common/sql/pyproject.toml @@ -68,6 +68,9 @@ dependencies = [ # The optional dependencies should be modified in place in the generated file # Any change in the dependencies is preserved when the file is regenerated [project.optional-dependencies] +"common.compat" = [ + "apache-airflow-providers-common-compat>=1.8.0", +] "pandas" = [ 'pandas[sql-other]>=2.1.2; python_version <"3.13"', # Technically - we should add "sql-other" here as well, but this will only be possible when we move @@ -86,6 +89,7 @@ dev = [ "apache-airflow", "apache-airflow-task-sdk", "apache-airflow-devel-common", + "apache-airflow-providers-common-compat", "apache-airflow-providers-openlineage", # Additional devel dependencies (do not remove this line and add extra development dependencies) "apache-airflow-providers-common-sql[pandas]", diff --git a/providers/common/sql/src/airflow/providers/common/sql/hooks/sql.py b/providers/common/sql/src/airflow/providers/common/sql/hooks/sql.py index 660b332077b37..b19aefab85716 100644 --- a/providers/common/sql/src/airflow/providers/common/sql/hooks/sql.py +++ b/providers/common/sql/src/airflow/providers/common/sql/hooks/sql.py @@ -39,9 +39,9 @@ AirflowOptionalProviderFeatureException, AirflowProviderDeprecationWarning, ) +from airflow.providers.common.compat.sdk import BaseHook from airflow.providers.common.sql.dialects.dialect import Dialect from airflow.providers.common.sql.hooks import handlers -from airflow.providers.common.sql.version_compat import BaseHook from airflow.utils.module_loading import import_string if TYPE_CHECKING: diff --git a/providers/common/sql/src/airflow/providers/common/sql/operators/generic_transfer.py b/providers/common/sql/src/airflow/providers/common/sql/operators/generic_transfer.py index 5c659ecf5c7ab..2ed83769a5b49 100644 --- a/providers/common/sql/src/airflow/providers/common/sql/operators/generic_transfer.py +++ b/providers/common/sql/src/airflow/providers/common/sql/operators/generic_transfer.py @@ -22,9 +22,9 @@ from typing import TYPE_CHECKING, Any from airflow.exceptions import AirflowException +from airflow.providers.common.compat.sdk import BaseHook, BaseOperator from airflow.providers.common.sql.hooks.sql import DbApiHook from airflow.providers.common.sql.triggers.sql import SQLExecuteQueryTrigger -from airflow.providers.common.sql.version_compat import BaseHook, BaseOperator if TYPE_CHECKING: import jinja2 diff --git a/providers/common/sql/src/airflow/providers/common/sql/operators/sql.py b/providers/common/sql/src/airflow/providers/common/sql/operators/sql.py index 2a85e462cf14e..a1bc06bb2b52f 100644 --- a/providers/common/sql/src/airflow/providers/common/sql/operators/sql.py +++ b/providers/common/sql/src/airflow/providers/common/sql/operators/sql.py @@ -26,9 +26,9 @@ from airflow import XComArg from airflow.exceptions import AirflowException, AirflowFailException, AirflowSkipException from airflow.models import SkipMixin +from airflow.providers.common.compat.sdk import BaseHook, BaseOperator from airflow.providers.common.sql.hooks.handlers import fetch_all_handler, return_single_query_results from airflow.providers.common.sql.hooks.sql import DbApiHook -from airflow.providers.common.sql.version_compat import BaseHook, BaseOperator from airflow.utils.helpers import merge_dicts if TYPE_CHECKING: diff --git a/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.py b/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.py index 4ef79769ef329..4fdbbb94cf4b1 100644 --- a/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.py +++ b/providers/common/sql/src/airflow/providers/common/sql/sensors/sql.py @@ -21,8 +21,8 @@ from typing import TYPE_CHECKING, Any from airflow.exceptions import AirflowException +from airflow.providers.common.compat.sdk import BaseHook, BaseSensorOperator from airflow.providers.common.sql.hooks.sql import DbApiHook -from airflow.providers.common.sql.version_compat import BaseHook, BaseSensorOperator if TYPE_CHECKING: from airflow.utils.context import Context diff --git a/providers/common/sql/src/airflow/providers/common/sql/triggers/sql.py b/providers/common/sql/src/airflow/providers/common/sql/triggers/sql.py index f137293617e30..7b17ad04d320d 100644 --- a/providers/common/sql/src/airflow/providers/common/sql/triggers/sql.py +++ b/providers/common/sql/src/airflow/providers/common/sql/triggers/sql.py @@ -20,8 +20,8 @@ from typing import TYPE_CHECKING from airflow.exceptions import AirflowException +from airflow.providers.common.compat.sdk import BaseHook from airflow.providers.common.sql.hooks.sql import DbApiHook -from airflow.providers.common.sql.version_compat import BaseHook from airflow.triggers.base import BaseTrigger, TriggerEvent if TYPE_CHECKING: diff --git a/providers/common/sql/src/airflow/providers/common/sql/version_compat.py b/providers/common/sql/src/airflow/providers/common/sql/version_compat.py index 03bf6973a704b..a4fae50317e81 100644 --- a/providers/common/sql/src/airflow/providers/common/sql/version_compat.py +++ b/providers/common/sql/src/airflow/providers/common/sql/version_compat.py @@ -35,21 +35,7 @@ def get_base_airflow_version_tuple() -> tuple[int, int, int]: AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >= (3, 0, 0) AIRFLOW_V_3_1_PLUS: bool = get_base_airflow_version_tuple() >= (3, 1, 0) -if AIRFLOW_V_3_1_PLUS: - from airflow.sdk import BaseHook -else: - from airflow.hooks.base import BaseHook # type: ignore[attr-defined,no-redef] - -if AIRFLOW_V_3_0_PLUS: - from airflow.sdk import BaseOperator, BaseSensorOperator -else: - from airflow.models import BaseOperator - from airflow.sensors.base import BaseSensorOperator # type: ignore[no-redef] - __all__ = [ "AIRFLOW_V_3_0_PLUS", "AIRFLOW_V_3_1_PLUS", - "BaseHook", - "BaseOperator", - "BaseSensorOperator", ] diff --git a/providers/common/sql/tests/unit/common/sql/hooks/test_dbapi.py b/providers/common/sql/tests/unit/common/sql/hooks/test_dbapi.py index 62e5bf78336d0..e77c5d342a765 100644 --- a/providers/common/sql/tests/unit/common/sql/hooks/test_dbapi.py +++ b/providers/common/sql/tests/unit/common/sql/hooks/test_dbapi.py @@ -26,10 +26,10 @@ from pyodbc import Cursor from airflow.models import Connection +from airflow.providers.common.compat.sdk import BaseHook from airflow.providers.common.sql.dialects.dialect import Dialect from airflow.providers.common.sql.hooks.handlers import fetch_all_handler, fetch_one_handler from airflow.providers.common.sql.hooks.sql import DbApiHook -from airflow.providers.common.sql.version_compat import BaseHook class DbApiHookInProvider(DbApiHook):