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 ad809637152 Migrate redis provider to ``common.compat`` (#57006)
ad809637152 is described below

commit ad8096371520607d24055f172300f8a2b7607c26
Author: Kaxil Naik <[email protected]>
AuthorDate: Wed Oct 22 13:59:25 2025 +0100

    Migrate redis provider to ``common.compat`` (#57006)
    
    Replace version-specific conditional imports with common.compat layer.
    This standardizes compatibility handling across Airflow 2.x and 3.x.
---
 providers/redis/pyproject.toml                              |  2 ++
 providers/redis/src/airflow/providers/redis/hooks/redis.py  |  2 +-
 .../src/airflow/providers/redis/operators/redis_publish.py  |  8 ++------
 .../redis/src/airflow/providers/redis/sensors/redis_key.py  |  8 ++------
 .../src/airflow/providers/redis/sensors/redis_pub_sub.py    |  8 ++------
 .../redis/src/airflow/providers/redis/version_compat.py     | 13 +------------
 .../redis/tests/unit/redis/log/test_redis_task_handler.py   |  5 ++---
 7 files changed, 12 insertions(+), 34 deletions(-)

diff --git a/providers/redis/pyproject.toml b/providers/redis/pyproject.toml
index 8a41940c383..48d9590672d 100644
--- a/providers/redis/pyproject.toml
+++ b/providers/redis/pyproject.toml
@@ -58,6 +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.7.4",    # + TODO: bump to next 
version
     # 5.0.2 excluded due to breaking changes which fixed in 
https://github.com/redis/redis-py/pull/3176
     "redis>=4.5.2,!=4.5.5,!=5.0.2",
 ]
@@ -74,6 +75,7 @@ dev = [
     "apache-airflow",
     "apache-airflow-task-sdk",
     "apache-airflow-devel-common",
+    "apache-airflow-providers-common-compat",
     "apache-airflow-providers-common-messaging",
     # Additional devel dependencies (do not remove this line and add extra 
development dependencies)
 ]
diff --git a/providers/redis/src/airflow/providers/redis/hooks/redis.py 
b/providers/redis/src/airflow/providers/redis/hooks/redis.py
index 3f7d0a7a500..1e9740768ba 100644
--- a/providers/redis/src/airflow/providers/redis/hooks/redis.py
+++ b/providers/redis/src/airflow/providers/redis/hooks/redis.py
@@ -23,7 +23,7 @@ from typing import Any
 
 from redis import Redis
 
-from airflow.providers.redis.version_compat import BaseHook
+from airflow.providers.common.compat.sdk import BaseHook
 
 DEFAULT_SSL_CERT_REQS = "required"
 ALLOWED_SSL_CERT_REQS = [DEFAULT_SSL_CERT_REQS, "optional", "none"]
diff --git 
a/providers/redis/src/airflow/providers/redis/operators/redis_publish.py 
b/providers/redis/src/airflow/providers/redis/operators/redis_publish.py
index dc933000cf5..abdb3f647bc 100644
--- a/providers/redis/src/airflow/providers/redis/operators/redis_publish.py
+++ b/providers/redis/src/airflow/providers/redis/operators/redis_publish.py
@@ -20,15 +20,11 @@ from __future__ import annotations
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
+from airflow.providers.common.compat.sdk import BaseOperator
 from airflow.providers.redis.hooks.redis import RedisHook
-from airflow.providers.redis.version_compat import BaseOperator
 
 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 RedisPublishOperator(BaseOperator):
diff --git a/providers/redis/src/airflow/providers/redis/sensors/redis_key.py 
b/providers/redis/src/airflow/providers/redis/sensors/redis_key.py
index 5f4eeb9fab4..e2c47c4357c 100644
--- a/providers/redis/src/airflow/providers/redis/sensors/redis_key.py
+++ b/providers/redis/src/airflow/providers/redis/sensors/redis_key.py
@@ -20,15 +20,11 @@ from __future__ import annotations
 from collections.abc import Sequence
 from typing import TYPE_CHECKING
 
+from airflow.providers.common.compat.sdk import BaseSensorOperator
 from airflow.providers.redis.hooks.redis import RedisHook
-from airflow.providers.redis.version_compat import BaseSensorOperator
 
 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 RedisKeySensor(BaseSensorOperator):
diff --git 
a/providers/redis/src/airflow/providers/redis/sensors/redis_pub_sub.py 
b/providers/redis/src/airflow/providers/redis/sensors/redis_pub_sub.py
index d2ba79d8246..1c13afeabbe 100644
--- a/providers/redis/src/airflow/providers/redis/sensors/redis_pub_sub.py
+++ b/providers/redis/src/airflow/providers/redis/sensors/redis_pub_sub.py
@@ -21,15 +21,11 @@ from collections.abc import Sequence
 from functools import cached_property
 from typing import TYPE_CHECKING
 
+from airflow.providers.common.compat.sdk import BaseSensorOperator
 from airflow.providers.redis.hooks.redis import RedisHook
-from airflow.providers.redis.version_compat import BaseSensorOperator
 
 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 RedisPubSubSensor(BaseSensorOperator):
diff --git a/providers/redis/src/airflow/providers/redis/version_compat.py 
b/providers/redis/src/airflow/providers/redis/version_compat.py
index 698933df67f..f5bb3ae555c 100644
--- a/providers/redis/src/airflow/providers/redis/version_compat.py
+++ b/providers/redis/src/airflow/providers/redis/version_compat.py
@@ -35,15 +35,4 @@ 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__ = ["BaseOperator", "BaseSensorOperator", "BaseHook"]
+__all__ = ["AIRFLOW_V_3_0_PLUS", "AIRFLOW_V_3_1_PLUS"]
diff --git a/providers/redis/tests/unit/redis/log/test_redis_task_handler.py 
b/providers/redis/tests/unit/redis/log/test_redis_task_handler.py
index 4d1e1927f26..f6704d24e8a 100644
--- a/providers/redis/tests/unit/redis/log/test_redis_task_handler.py
+++ b/providers/redis/tests/unit/redis/log/test_redis_task_handler.py
@@ -23,6 +23,7 @@ from unittest.mock import patch
 import pytest
 
 from airflow.models import DagRun, TaskInstance
+from airflow.providers.common.compat.sdk import timezone
 from airflow.providers.redis.log.redis_task_handler import RedisTaskHandler
 from airflow.providers.standard.operators.empty import EmptyOperator
 from airflow.utils.session import create_session
@@ -40,10 +41,8 @@ from tests_common.test_utils.version_compat import (
 
 if AIRFLOW_V_3_1_PLUS:
     from airflow.sdk import DAG
-    from airflow.sdk.timezone import datetime
 else:
     from airflow.models import DAG
-    from airflow.utils.timezone import datetime  # type: ignore[no-redef]
 
 
 class TestRedisTaskHandler:
@@ -56,7 +55,7 @@ class TestRedisTaskHandler:
 
     @pytest.fixture
     def ti(self):
-        date = datetime(2020, 1, 1)
+        date = timezone.datetime(2020, 1, 1)
         dag = DAG(dag_id="dag_for_testing_redis_task_handler", schedule=None, 
start_date=date)
         task = EmptyOperator(task_id="task_for_testing_redis_log_handler", 
dag=dag)
         if AIRFLOW_V_3_0_PLUS:

Reply via email to