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 1199dc5305e Consolidate `SkipMixin` imports through `common-compat` 
layer (#62776)
1199dc5305e is described below

commit 1199dc5305ea1630b0e1f7681bdbc4daff28440b
Author: Kaxil Naik <[email protected]>
AuthorDate: Tue Mar 3 11:38:13 2026 +0000

    Consolidate `SkipMixin` imports through `common-compat` layer (#62776)
    
    Replace version-conditional SkipMixin imports in branch.py and
    test_skipmixin.py with the common.compat.sdk layer. Add the standard
    provider's skipmixin as a middle fallback path in the compat import
    chain for consistency with common/compat/standard/utils.py.
    
    Also route SkipMixin and XComArg in common/sql through the compat
    layer instead of importing directly from airflow.models / airflow.
---
 .../common/compat/src/airflow/providers/common/compat/sdk.py      | 6 +++++-
 .../compat/src/airflow/providers/common/compat/standard/utils.py  | 2 +-
 .../common/sql/src/airflow/providers/common/sql/operators/sql.py  | 4 ++--
 .../standard/src/airflow/providers/standard/operators/branch.py   | 8 ++------
 providers/standard/tests/unit/standard/utils/test_skipmixin.py    | 4 +---
 5 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/providers/common/compat/src/airflow/providers/common/compat/sdk.py 
b/providers/common/compat/src/airflow/providers/common/compat/sdk.py
index 30fa73ad076..f64fc215cf3 100644
--- a/providers/common/compat/src/airflow/providers/common/compat/sdk.py
+++ b/providers/common/compat/src/airflow/providers/common/compat/sdk.py
@@ -155,7 +155,11 @@ _IMPORT_MAP: dict[str, str | tuple[str, ...]] = {
     # 
============================================================================
     "BaseBranchOperator": ("airflow.sdk.bases.branch", 
"airflow.providers.standard.operators.branch"),
     "BranchMixIn": ("airflow.sdk.bases.branch", 
"airflow.providers.standard.operators.branch"),
-    "SkipMixin": ("airflow.sdk.bases.skipmixin", "airflow.models.skipmixin"),
+    "SkipMixin": (
+        "airflow.sdk.bases.skipmixin",
+        "airflow.models.skipmixin",
+        "airflow.providers.standard.utils.skipmixin",
+    ),
     # 
============================================================================
     # Sensors
     # 
============================================================================
diff --git 
a/providers/common/compat/src/airflow/providers/common/compat/standard/utils.py 
b/providers/common/compat/src/airflow/providers/common/compat/standard/utils.py
index c2e15a6a377..b2c9f37d990 100644
--- 
a/providers/common/compat/src/airflow/providers/common/compat/standard/utils.py
+++ 
b/providers/common/compat/src/airflow/providers/common/compat/standard/utils.py
@@ -22,8 +22,8 @@ from airflow.providers.common.compat._compat_utils import 
create_module_getattr
 _IMPORT_MAP: dict[str, str | tuple[str, ...]] = {
     "SkipMixin": (
         "airflow.sdk.bases.skipmixin",
-        "airflow.providers.standard.utils.skipmixin",
         "airflow.models.skipmixin",
+        "airflow.providers.standard.utils.skipmixin",
     ),
     "XCOM_SKIPMIXIN_KEY": (
         "airflow.sdk.bases.skipmixin",
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 8cdb3a5e38d..5fa1503dcb6 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
@@ -23,14 +23,14 @@ from collections.abc import Callable, Iterable, Mapping, 
Sequence
 from functools import cached_property
 from typing import TYPE_CHECKING, Any, ClassVar, NoReturn, SupportsAbs
 
-from airflow import XComArg
-from airflow.models import SkipMixin
 from airflow.providers.common.compat.sdk import (
     AirflowException,
     AirflowFailException,
     AirflowSkipException,
     BaseHook,
     BaseOperator,
+    SkipMixin,
+    XComArg,
 )
 from airflow.providers.common.sql.hooks.handlers import fetch_all_handler, 
return_single_query_results
 from airflow.providers.common.sql.hooks.sql import DbApiHook
diff --git 
a/providers/standard/src/airflow/providers/standard/operators/branch.py 
b/providers/standard/src/airflow/providers/standard/operators/branch.py
index f1ed3bfdf66..22d630ddc82 100644
--- a/providers/standard/src/airflow/providers/standard/operators/branch.py
+++ b/providers/standard/src/airflow/providers/standard/operators/branch.py
@@ -22,12 +22,8 @@ from __future__ import annotations
 from collections.abc import Iterable
 from typing import TYPE_CHECKING
 
-from airflow.providers.standard.version_compat import AIRFLOW_V_3_0_PLUS, 
BaseOperator
-
-if AIRFLOW_V_3_0_PLUS:
-    from airflow.providers.standard.utils.skipmixin import SkipMixin
-else:
-    from airflow.models.skipmixin import SkipMixin  # type: ignore[no-redef]
+from airflow.providers.common.compat.sdk import SkipMixin
+from airflow.providers.standard.version_compat import BaseOperator
 
 if TYPE_CHECKING:
     from airflow.providers.common.compat.sdk import Context
diff --git a/providers/standard/tests/unit/standard/utils/test_skipmixin.py 
b/providers/standard/tests/unit/standard/utils/test_skipmixin.py
index ae1dbfa5963..58e9b8e9a20 100644
--- a/providers/standard/tests/unit/standard/utils/test_skipmixin.py
+++ b/providers/standard/tests/unit/standard/utils/test_skipmixin.py
@@ -24,7 +24,7 @@ import pytest
 from sqlalchemy import select
 
 from airflow.models.taskinstance import TaskInstance as TI
-from airflow.providers.common.compat.sdk import AirflowException
+from airflow.providers.common.compat.sdk import AirflowException, SkipMixin
 from airflow.providers.standard.operators.empty import EmptyOperator
 from airflow.utils import timezone
 from airflow.utils.state import State
@@ -39,12 +39,10 @@ pytestmark = pytest.mark.db_test
 if AIRFLOW_V_3_0_PLUS:
     from airflow.models.dag_version import DagVersion
     from airflow.providers.common.compat.sdk import DownstreamTasksSkipped
-    from airflow.providers.standard.utils.skipmixin import SkipMixin
     from airflow.sdk import task, task_group
     from airflow.sdk.execution_time.task_runner import RuntimeTaskInstance
 else:
     from airflow.decorators import task, task_group  # type: 
ignore[attr-defined,no-redef]
-    from airflow.models.skipmixin import SkipMixin  # type: ignore[no-redef]
 
 DEFAULT_DATE = timezone.datetime(2016, 1, 1)
 DEFAULT_DAG_RUN_ID = "test1"

Reply via email to