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"]