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

vincbeck 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 b92ae3d1d1d Migrate sftp provider to `common.compat` (#57111)
b92ae3d1d1d is described below

commit b92ae3d1d1dee533d91809847bda16726d1517d9
Author: Bhavani Ravi <[email protected]>
AuthorDate: Fri Oct 24 21:01:23 2025 +0530

    Migrate sftp provider to `common.compat` (#57111)
---
 providers/sftp/pyproject.toml                              |  1 +
 .../src/airflow/providers/sftp/decorators/sensors/sftp.py  | 11 +----------
 providers/sftp/src/airflow/providers/sftp/hooks/sftp.py    |  4 +---
 .../sftp/src/airflow/providers/sftp/operators/sftp.py      |  2 +-
 providers/sftp/src/airflow/providers/sftp/sensors/sftp.py  |  8 ++------
 .../sftp/src/airflow/providers/sftp/version_compat.py      | 14 ++------------
 6 files changed, 8 insertions(+), 32 deletions(-)

diff --git a/providers/sftp/pyproject.toml b/providers/sftp/pyproject.toml
index a2d88464ea9..653d931b461 100644
--- a/providers/sftp/pyproject.toml
+++ b/providers/sftp/pyproject.toml
@@ -59,6 +59,7 @@ requires-python = ">=3.10"
 dependencies = [
     "apache-airflow>=2.10.0",
     "apache-airflow-providers-ssh>=4.0.0",
+    "apache-airflow-providers-common-compat>=1.8.0",
     # TODO: Bump to >= 4.0.0 once 
https://github.com/apache/airflow/issues/54079 is handled
     "paramiko>=2.9.0,<4.0.0",
     "asyncssh>=2.12.0",
diff --git 
a/providers/sftp/src/airflow/providers/sftp/decorators/sensors/sftp.py 
b/providers/sftp/src/airflow/providers/sftp/decorators/sensors/sftp.py
index a55b2c67c20..f04d7e5227b 100644
--- a/providers/sftp/src/airflow/providers/sftp/decorators/sensors/sftp.py
+++ b/providers/sftp/src/airflow/providers/sftp/decorators/sensors/sftp.py
@@ -19,16 +19,7 @@ from __future__ import annotations
 
 from collections.abc import Callable, Sequence
 
-from airflow.providers.sftp.version_compat import AIRFLOW_V_3_0_PLUS
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.sdk.bases.decorator import TaskDecorator, get_unique_task_id, 
task_decorator_factory
-else:
-    from airflow.decorators.base import (  # type: ignore[no-redef]
-        TaskDecorator,
-        get_unique_task_id,
-        task_decorator_factory,
-    )
+from airflow.providers.common.compat.sdk import TaskDecorator, 
get_unique_task_id, task_decorator_factory
 from airflow.providers.sftp.sensors.sftp import SFTPSensor
 
 
diff --git a/providers/sftp/src/airflow/providers/sftp/hooks/sftp.py 
b/providers/sftp/src/airflow/providers/sftp/hooks/sftp.py
index 4ea7e3f46f4..6e175f670ea 100644
--- a/providers/sftp/src/airflow/providers/sftp/hooks/sftp.py
+++ b/providers/sftp/src/airflow/providers/sftp/hooks/sftp.py
@@ -39,8 +39,8 @@ from airflow.exceptions import (
     AirflowException,
     AirflowProviderDeprecationWarning,
 )
+from airflow.providers.common.compat.sdk import BaseHook, Connection
 from airflow.providers.sftp.exceptions import ConnectionNotOpenedException
-from airflow.providers.sftp.version_compat import BaseHook
 from airflow.providers.ssh.hooks.ssh import SSHHook
 
 if TYPE_CHECKING:
@@ -48,8 +48,6 @@ if TYPE_CHECKING:
     from paramiko.sftp_attr import SFTPAttributes
     from paramiko.sftp_client import SFTPClient
 
-    from airflow.models.connection import Connection
-
 
 def handle_connection_management(func: Callable) -> Callable:
     @functools.wraps(func)
diff --git a/providers/sftp/src/airflow/providers/sftp/operators/sftp.py 
b/providers/sftp/src/airflow/providers/sftp/operators/sftp.py
index 5946cfdea98..8cb55569219 100644
--- a/providers/sftp/src/airflow/providers/sftp/operators/sftp.py
+++ b/providers/sftp/src/airflow/providers/sftp/operators/sftp.py
@@ -28,8 +28,8 @@ from typing import Any
 import paramiko
 
 from airflow.exceptions import AirflowException
+from airflow.providers.common.compat.sdk import BaseOperator
 from airflow.providers.sftp.hooks.sftp import SFTPHook
-from airflow.providers.sftp.version_compat import BaseOperator
 
 
 class SFTPOperation:
diff --git a/providers/sftp/src/airflow/providers/sftp/sensors/sftp.py 
b/providers/sftp/src/airflow/providers/sftp/sensors/sftp.py
index 79ab593b808..7ce602d513b 100644
--- a/providers/sftp/src/airflow/providers/sftp/sensors/sftp.py
+++ b/providers/sftp/src/airflow/providers/sftp/sensors/sftp.py
@@ -28,17 +28,13 @@ from paramiko.sftp import SFTP_NO_SUCH_FILE
 
 from airflow.configuration import conf
 from airflow.exceptions import AirflowException
+from airflow.providers.common.compat.sdk import BaseSensorOperator, 
PokeReturnValue
 from airflow.providers.sftp.hooks.sftp import SFTPHook
 from airflow.providers.sftp.triggers.sftp import SFTPTrigger
-from airflow.providers.sftp.version_compat import BaseSensorOperator, 
PokeReturnValue
 from airflow.utils.timezone import convert_to_utc, parse
 
 if TYPE_CHECKING:
-    try:
-        from airflow.sdk.definitions.context import Context
-    except ImportError:
-        # TODO: Remove once provider drops support for Airflow 2
-        from airflow.utils.context import Context
+    from airflow.providers.common.compat.sdk import Context
 
 
 class SFTPSensor(BaseSensorOperator):
diff --git a/providers/sftp/src/airflow/providers/sftp/version_compat.py 
b/providers/sftp/src/airflow/providers/sftp/version_compat.py
index 06f57818ab0..ecc9d3ef4e3 100644
--- a/providers/sftp/src/airflow/providers/sftp/version_compat.py
+++ b/providers/sftp/src/airflow/providers/sftp/version_compat.py
@@ -35,15 +35,5 @@ 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, PokeReturnValue
-else:
-    from airflow.models import BaseOperator
-    from airflow.sensors.base import BaseSensorOperator, PokeReturnValue  # 
type: ignore[no-redef]
-
-__all__ = ["AIRFLOW_V_3_0_PLUS", "BaseHook", "BaseOperator", 
"BaseSensorOperator", "PokeReturnValue"]
+
+__all__ = ["AIRFLOW_V_3_0_PLUS", "AIRFLOW_V_3_1_PLUS"]

Reply via email to