This is an automated email from the ASF dual-hosted git repository.

kaxilnaik pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new fc155f27b49 Migrate `yandex` provider to `common.compat` (#57116)
fc155f27b49 is described below

commit fc155f27b497009d3c41a84f170b7b185a6c4724
Author: Bhavani Ravi <[email protected]>
AuthorDate: Thu Oct 23 21:05:35 2025 +0530

    Migrate `yandex` provider to `common.compat` (#57116)
    
    fixes part of: #57018
---
 providers/yandex/pyproject.toml                     |  3 +++
 .../src/airflow/providers/yandex/hooks/yandex.py    |  2 +-
 .../yandex/src/airflow/providers/yandex/links/yq.py |  4 ++--
 .../airflow/providers/yandex/operators/dataproc.py  |  4 ++--
 .../src/airflow/providers/yandex/operators/yq.py    |  4 ++--
 .../src/airflow/providers/yandex/version_compat.py  | 21 ---------------------
 .../yandex/tests/unit/yandex/hooks/test_dataproc.py | 11 ++---------
 .../yandex/tests/unit/yandex/hooks/test_yandex.py   | 10 +---------
 providers/yandex/tests/unit/yandex/hooks/test_yq.py |  9 +--------
 providers/yandex/tests/unit/yandex/links/test_yq.py |  6 +-----
 .../tests/unit/yandex/operators/test_dataproc.py    | 10 +---------
 .../yandex/tests/unit/yandex/operators/test_yq.py   | 10 +---------
 12 files changed, 17 insertions(+), 77 deletions(-)

diff --git a/providers/yandex/pyproject.toml b/providers/yandex/pyproject.toml
index 34bfbabe79e..76d70aac341 100644
--- a/providers/yandex/pyproject.toml
+++ b/providers/yandex/pyproject.toml
@@ -59,6 +59,7 @@ dependencies = [
     "apache-airflow>=2.10.0",
     "yandexcloud>=0.308.0; python_version < '3.13'",
     "yandex-query-client>=0.1.4; python_version < '3.13'",
+    "apache-airflow-providers-common-compat>=1.8.0",
 ]
 
 # The optional dependencies should be modified in place in the generated file
@@ -73,8 +74,10 @@ dev = [
     "apache-airflow",
     "apache-airflow-task-sdk",
     "apache-airflow-devel-common",
+    "apache-airflow-providers-common-compat",
     # Additional devel dependencies (do not remove this line and add extra 
development dependencies)
     "responses>=0.25.0",
+
 ]
 
 # To build docs:
diff --git a/providers/yandex/src/airflow/providers/yandex/hooks/yandex.py 
b/providers/yandex/src/airflow/providers/yandex/hooks/yandex.py
index 78c89368adf..86f20c8d5ea 100644
--- a/providers/yandex/src/airflow/providers/yandex/hooks/yandex.py
+++ b/providers/yandex/src/airflow/providers/yandex/hooks/yandex.py
@@ -20,6 +20,7 @@ from typing import Any
 
 import yandexcloud
 
+from airflow.providers.common.compat.sdk import BaseHook
 from airflow.providers.yandex.utils.credentials import (
     CredentialsType,
     get_credentials,
@@ -28,7 +29,6 @@ from airflow.providers.yandex.utils.credentials import (
 from airflow.providers.yandex.utils.defaults import conn_name_attr, conn_type, 
default_conn_name, hook_name
 from airflow.providers.yandex.utils.fields import get_field_from_extras
 from airflow.providers.yandex.utils.user_agent import provider_user_agent
-from airflow.providers.yandex.version_compat import BaseHook
 
 
 class YandexCloudBaseHook(BaseHook):
diff --git a/providers/yandex/src/airflow/providers/yandex/links/yq.py 
b/providers/yandex/src/airflow/providers/yandex/links/yq.py
index 7bd416e8898..c9f5195c1d3 100644
--- a/providers/yandex/src/airflow/providers/yandex/links/yq.py
+++ b/providers/yandex/src/airflow/providers/yandex/links/yq.py
@@ -18,11 +18,11 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING
 
-from airflow.providers.yandex.version_compat import BaseOperatorLink, XCom
+from airflow.providers.common.compat.sdk import BaseOperatorLink, XCom
 
 if TYPE_CHECKING:
     from airflow.models.taskinstancekey import TaskInstanceKey
-    from airflow.providers.yandex.version_compat import BaseOperator, Context
+    from airflow.providers.common.compat.sdk import BaseOperator, Context
 
 XCOM_WEBLINK_KEY = "web_link"
 
diff --git 
a/providers/yandex/src/airflow/providers/yandex/operators/dataproc.py 
b/providers/yandex/src/airflow/providers/yandex/operators/dataproc.py
index d55569c8a23..e9375b3baaa 100644
--- a/providers/yandex/src/airflow/providers/yandex/operators/dataproc.py
+++ b/providers/yandex/src/airflow/providers/yandex/operators/dataproc.py
@@ -23,11 +23,11 @@ from typing import TYPE_CHECKING
 
 import yandexcloud
 
+from airflow.providers.common.compat.sdk import BaseOperator
 from airflow.providers.yandex.hooks.dataproc import DataprocHook
-from airflow.providers.yandex.version_compat import BaseOperator
 
 if TYPE_CHECKING:
-    from airflow.providers.yandex.version_compat import Context
+    from airflow.providers.common.compat.sdk import Context
 
 
 @dataclass
diff --git a/providers/yandex/src/airflow/providers/yandex/operators/yq.py 
b/providers/yandex/src/airflow/providers/yandex/operators/yq.py
index 1c450174e16..8c294133a39 100644
--- a/providers/yandex/src/airflow/providers/yandex/operators/yq.py
+++ b/providers/yandex/src/airflow/providers/yandex/operators/yq.py
@@ -20,12 +20,12 @@ from collections.abc import Sequence
 from functools import cached_property
 from typing import TYPE_CHECKING, Any
 
+from airflow.providers.common.compat.sdk import BaseOperator
 from airflow.providers.yandex.hooks.yq import YQHook
 from airflow.providers.yandex.links.yq import YQLink
-from airflow.providers.yandex.version_compat import BaseOperator
 
 if TYPE_CHECKING:
-    from airflow.providers.yandex.version_compat import Context
+    from airflow.providers.common.compat.sdk import Context
 
 
 class YQExecuteQueryOperator(BaseOperator):
diff --git a/providers/yandex/src/airflow/providers/yandex/version_compat.py 
b/providers/yandex/src/airflow/providers/yandex/version_compat.py
index d315b0d2589..fe3ccfcfd3d 100644
--- a/providers/yandex/src/airflow/providers/yandex/version_compat.py
+++ b/providers/yandex/src/airflow/providers/yandex/version_compat.py
@@ -30,28 +30,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, BaseOperatorLink
-    from airflow.sdk.definitions.context import Context
-    from airflow.sdk.execution_time.xcom import XCom
-else:
-    from airflow.models import BaseOperator, XCom
-    from airflow.models.baseoperatorlink import BaseOperatorLink  # type: 
ignore[no-redef]
-    from airflow.utils.context import Context
-
-
 __all__ = [
     "AIRFLOW_V_3_0_PLUS",
     "AIRFLOW_V_3_1_PLUS",
-    "BaseHook",
-    "BaseOperator",
-    "BaseOperatorLink",
-    "Context",
-    "XCom",
 ]
diff --git a/providers/yandex/tests/unit/yandex/hooks/test_dataproc.py 
b/providers/yandex/tests/unit/yandex/hooks/test_dataproc.py
index adc81828ebb..5b5a96bd833 100644
--- a/providers/yandex/tests/unit/yandex/hooks/test_dataproc.py
+++ b/providers/yandex/tests/unit/yandex/hooks/test_dataproc.py
@@ -23,19 +23,12 @@ import pytest
 
 pytest.importorskip("yandexcloud")
 
-try:
-    import importlib.util
-
-    if not importlib.util.find_spec("airflow.sdk.bases.hook"):
-        raise ImportError
-
-    BASEHOOK_PATCH_PATH = "airflow.sdk.bases.hook.BaseHook"
-except ImportError:
-    BASEHOOK_PATCH_PATH = "airflow.hooks.base.BaseHook"
 
 from airflow.models import Connection
 from airflow.providers.yandex.hooks.dataproc import DataprocHook
 
+BASEHOOK_PATCH_PATH = "airflow.providers.common.compat.sdk.BaseHook"
+
 # Airflow connection with type "yandexcloud" must be created
 CONNECTION_ID = "yandexcloud_default"
 
diff --git a/providers/yandex/tests/unit/yandex/hooks/test_yandex.py 
b/providers/yandex/tests/unit/yandex/hooks/test_yandex.py
index c0fe9816694..545a8bdcb07 100644
--- a/providers/yandex/tests/unit/yandex/hooks/test_yandex.py
+++ b/providers/yandex/tests/unit/yandex/hooks/test_yandex.py
@@ -27,15 +27,7 @@ from airflow.providers.yandex.hooks.yandex import 
YandexCloudBaseHook
 
 from tests_common.test_utils.config import conf_vars
 
-try:
-    import importlib.util
-
-    if not importlib.util.find_spec("airflow.sdk.bases.hook"):
-        raise ImportError
-
-    BASEHOOK_PATCH_PATH = "airflow.sdk.bases.hook.BaseHook"
-except ImportError:
-    BASEHOOK_PATCH_PATH = "airflow.hooks.base.BaseHook"
+BASEHOOK_PATCH_PATH = "airflow.providers.common.compat.sdk.BaseHook"
 
 
 class TestYandexHook:
diff --git a/providers/yandex/tests/unit/yandex/hooks/test_yq.py 
b/providers/yandex/tests/unit/yandex/hooks/test_yq.py
index e523c173f81..942511513bc 100644
--- a/providers/yandex/tests/unit/yandex/hooks/test_yq.py
+++ b/providers/yandex/tests/unit/yandex/hooks/test_yq.py
@@ -26,15 +26,8 @@ from responses import matchers
 
 from airflow.models import Connection
 
-try:
-    import importlib.util
+BASEHOOK_PATCH_PATH = "airflow.providers.common.compat.sdk.BaseHook"
 
-    if not importlib.util.find_spec("airflow.sdk.bases.hook"):
-        raise ImportError
-
-    BASEHOOK_PATCH_PATH = "airflow.sdk.bases.hook.BaseHook"
-except ImportError:
-    BASEHOOK_PATCH_PATH = "airflow.hooks.base.BaseHook"
 yandexcloud = pytest.importorskip("yandexcloud")
 
 from airflow.providers.yandex.hooks.yq import YQHook
diff --git a/providers/yandex/tests/unit/yandex/links/test_yq.py 
b/providers/yandex/tests/unit/yandex/links/test_yq.py
index 64baa18ad89..c742f28da7b 100644
--- a/providers/yandex/tests/unit/yandex/links/test_yq.py
+++ b/providers/yandex/tests/unit/yandex/links/test_yq.py
@@ -21,16 +21,12 @@ from unittest import mock
 import pytest
 
 from airflow.models.taskinstance import TaskInstance
+from airflow.providers.common.compat.sdk import XCom
 from airflow.providers.yandex.links.yq import YQLink
 
 from tests_common.test_utils.mock_operators import MockOperator
 from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk.execution_time.xcom import XCom
-else:
-    from airflow.models import XCom
-
 yandexcloud = pytest.importorskip("yandexcloud")
 
 
diff --git a/providers/yandex/tests/unit/yandex/operators/test_dataproc.py 
b/providers/yandex/tests/unit/yandex/operators/test_dataproc.py
index 66cb883909e..7c4f1f39d08 100644
--- a/providers/yandex/tests/unit/yandex/operators/test_dataproc.py
+++ b/providers/yandex/tests/unit/yandex/operators/test_dataproc.py
@@ -66,15 +66,7 @@ SSH_PUBLIC_KEYS = [
 # https://cloud.yandex.com/docs/logging/concepts/log-group
 LOG_GROUP_ID = "my_log_group_id"
 
-try:
-    import importlib.util
-
-    if not importlib.util.find_spec("airflow.sdk.bases.hook"):
-        raise ImportError
-
-    BASEHOOK_PATCH_PATH = "airflow.sdk.bases.hook.BaseHook"
-except ImportError:
-    BASEHOOK_PATCH_PATH = "airflow.hooks.base.BaseHook"
+BASEHOOK_PATCH_PATH = "airflow.providers.common.compat.sdk.BaseHook"
 
 
 class TestDataprocClusterCreateOperator:
diff --git a/providers/yandex/tests/unit/yandex/operators/test_yq.py 
b/providers/yandex/tests/unit/yandex/operators/test_yq.py
index 3fa707f9c20..18a931018cb 100644
--- a/providers/yandex/tests/unit/yandex/operators/test_yq.py
+++ b/providers/yandex/tests/unit/yandex/operators/test_yq.py
@@ -33,15 +33,7 @@ from airflow.providers.yandex.operators.yq import 
YQExecuteQueryOperator
 
 from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
 
-try:
-    import importlib.util
-
-    if not importlib.util.find_spec("airflow.sdk.bases.hook"):
-        raise ImportError
-
-    BASEHOOK_PATCH_PATH = "airflow.sdk.bases.hook.BaseHook"
-except ImportError:
-    BASEHOOK_PATCH_PATH = "airflow.hooks.base.BaseHook"
+BASEHOOK_PATCH_PATH = "airflow.providers.common.compat.sdk.BaseHook"
 
 OAUTH_TOKEN = "my_oauth_token"
 FOLDER_ID = "my_folder_id"

Reply via email to