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"