This is an automated email from the ASF dual-hosted git repository.
potiuk 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 7aa07042a89 Fix several deprecation warnings related to airflow.sdk
(#53791)
7aa07042a89 is described below
commit 7aa07042a89eeb2fd8e72a80945a0a530931e032
Author: Dev-iL <[email protected]>
AuthorDate: Sat Aug 2 11:14:23 2025 +0300
Fix several deprecation warnings related to airflow.sdk (#53791)
+ Some ruff violations related to the performance tests.
---
.../tests/unit/cli/commands/test_dag_command.py | 6 ++++-
.../tests/unit/cluster_policies/__init__.py | 2 +-
.../src/tests_common/test_utils/mock_operators.py | 8 +++----
.../src/tests_common/test_utils/version_compat.py | 6 +++++
performance/tests/test_performance_dag.py | 3 ++-
.../airflow/providers/openlineage/utils/utils.py | 6 ++---
.../unit/openlineage/extractors/test_manager.py | 3 +--
.../tests/unit/openlineage/plugins/test_macros.py | 2 +-
.../example_external_task_parent_deferrable.py | 6 ++++-
.../src/airflow/providers/standard/sensors/time.py | 5 +++-
.../tests/unit/standard/sensors/test_date_time.py | 3 ++-
.../tests/unit/standard/sensors/test_python.py | 2 +-
.../tests/unit/standard/sensors/test_time_delta.py | 27 ++++++++++------------
.../tests/unit/standard/sensors/test_weekday.py | 10 ++++----
pyproject.toml | 1 +
15 files changed, 51 insertions(+), 39 deletions(-)
diff --git a/airflow-core/tests/unit/cli/commands/test_dag_command.py
b/airflow-core/tests/unit/cli/commands/test_dag_command.py
index 2c16be86af2..e13cc3a410e 100644
--- a/airflow-core/tests/unit/cli/commands/test_dag_command.py
+++ b/airflow-core/tests/unit/cli/commands/test_dag_command.py
@@ -38,7 +38,6 @@ from airflow.cli import cli_parser
from airflow.cli.commands import dag_command
from airflow.exceptions import AirflowException
from airflow.models import DagBag, DagModel, DagRun
-from airflow.models.baseoperator import BaseOperator
from airflow.models.serialized_dag import SerializedDagModel
from airflow.providers.standard.triggers.temporal import DateTimeTrigger,
TimeDeltaTrigger
from airflow.sdk import task
@@ -57,6 +56,11 @@ from tests_common.test_utils.db import (
)
from unit.models import TEST_DAGS_FOLDER
+try:
+ from airflow.sdk import BaseOperator
+except ImportError:
+ from airflow.models.baseoperator import BaseOperator # type:
ignore[no-redef]
+
DEFAULT_DATE = timezone.make_aware(datetime(2015, 1, 1), timezone=timezone.utc)
if pendulum.__version__.startswith("3"):
DEFAULT_DATE_REPR = DEFAULT_DATE.isoformat(sep=" ")
diff --git a/airflow-core/tests/unit/cluster_policies/__init__.py
b/airflow-core/tests/unit/cluster_policies/__init__.py
index 88b1d329b70..e9c380838e9 100644
--- a/airflow-core/tests/unit/cluster_policies/__init__.py
+++ b/airflow-core/tests/unit/cluster_policies/__init__.py
@@ -24,7 +24,7 @@ from typing import TYPE_CHECKING
from airflow.configuration import conf
from airflow.exceptions import AirflowClusterPolicySkipDag,
AirflowClusterPolicyViolation
-from airflow.sdk.bases.operator import BaseOperator
+from airflow.sdk import BaseOperator
if TYPE_CHECKING:
from airflow.models.dag import DAG
diff --git a/devel-common/src/tests_common/test_utils/mock_operators.py
b/devel-common/src/tests_common/test_utils/mock_operators.py
index d4fd43421f6..6082521b190 100644
--- a/devel-common/src/tests_common/test_utils/mock_operators.py
+++ b/devel-common/src/tests_common/test_utils/mock_operators.py
@@ -21,17 +21,17 @@ from typing import TYPE_CHECKING
import attr
-from airflow.models.baseoperator import BaseOperator
-
from tests_common.test_utils.compat import BaseOperatorLink
from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
if TYPE_CHECKING:
from airflow.sdk.definitions.context import Context
-if AIRFLOW_V_3_0_PLUS:
+try:
from airflow.models.xcom import XComModel as XCom
-else:
+ from airflow.sdk import BaseOperator
+except ImportError:
+ from airflow.models.baseoperator import BaseOperator # type:
ignore[no-redef]
from airflow.models.xcom import XCom # type: ignore[no-redef]
diff --git a/devel-common/src/tests_common/test_utils/version_compat.py
b/devel-common/src/tests_common/test_utils/version_compat.py
index 2e4214f280a..50d50d2a1cc 100644
--- a/devel-common/src/tests_common/test_utils/version_compat.py
+++ b/devel-common/src/tests_common/test_utils/version_compat.py
@@ -37,12 +37,16 @@ AIRFLOW_V_3_0_PLUS = get_base_airflow_version_tuple() >=
(3, 0, 0)
AIRFLOW_V_3_0_3_PLUS = get_base_airflow_version_tuple() >= (3, 0, 3)
AIRFLOW_V_3_1_PLUS = get_base_airflow_version_tuple() >= (3, 1, 0)
+
if AIRFLOW_V_3_1_PLUS:
+ from airflow.sdk import PokeReturnValue, timezone
from airflow.sdk.bases.xcom import BaseXCom
from airflow.sdk.definitions._internal.decorators import
remove_task_decorator
XCOM_RETURN_KEY = BaseXCom.XCOM_RETURN_KEY
else:
+ from airflow.sensors.base import PokeReturnValue # type: ignore[no-redef]
+ from airflow.utils import timezone # type: ignore[attr-defined,no-redef]
from airflow.utils.decorators import remove_task_decorator # type:
ignore[no-redef]
from airflow.utils.xcom import XCOM_RETURN_KEY # type: ignore[no-redef]
@@ -66,5 +70,7 @@ __all__ = [
"SQLALCHEMY_V_1_4",
"SQLALCHEMY_V_2_0",
"XCOM_RETURN_KEY",
+ "PokeReturnValue",
"remove_task_decorator",
+ "timezone",
]
diff --git a/performance/tests/test_performance_dag.py
b/performance/tests/test_performance_dag.py
index 387a9faf8c4..6cc72215d97 100644
--- a/performance/tests/test_performance_dag.py
+++ b/performance/tests/test_performance_dag.py
@@ -22,9 +22,10 @@ from __future__ import annotations
import json
import os
+import re
import pytest
-import re
+
from airflow.configuration import conf
from airflow.models import DagBag
from airflow.utils.trigger_rule import TriggerRule
diff --git
a/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
b/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
index 2316cd3c13d..a3dd26d686b 100644
--- a/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
+++ b/providers/openlineage/src/airflow/providers/openlineage/utils/utils.py
@@ -70,8 +70,7 @@ if TYPE_CHECKING:
from airflow.models import TaskInstance
from airflow.providers.common.compat.assets import Asset
- from airflow.sdk import DAG
- from airflow.sdk.bases.operator import BaseOperator
+ from airflow.sdk import DAG, BaseOperator
from airflow.sdk.definitions.mappedoperator import MappedOperator
from airflow.sdk.execution_time.secrets_masker import (
Redactable,
@@ -83,8 +82,7 @@ if TYPE_CHECKING:
from airflow.utils.state import DagRunState, TaskInstanceState
else:
try:
- from airflow.sdk import DAG
- from airflow.sdk.bases.operator import BaseOperator
+ from airflow.sdk import DAG, BaseOperator
from airflow.sdk.definitions.mappedoperator import MappedOperator
except ImportError:
from airflow.models import DAG, BaseOperator, MappedOperator
diff --git
a/providers/openlineage/tests/unit/openlineage/extractors/test_manager.py
b/providers/openlineage/tests/unit/openlineage/extractors/test_manager.py
index 100ac520d3d..f18f7e22a9e 100644
--- a/providers/openlineage/tests/unit/openlineage/extractors/test_manager.py
+++ b/providers/openlineage/tests/unit/openlineage/extractors/test_manager.py
@@ -69,9 +69,8 @@ def hook_lineage_collector():
if AIRFLOW_V_3_0_PLUS:
- from airflow.sdk import ObjectStoragePath
+ from airflow.sdk import BaseOperator, ObjectStoragePath
from airflow.sdk.api.datamodels._generated import TaskInstance as
SDKTaskInstance
- from airflow.sdk.bases.operator import BaseOperator
from airflow.sdk.execution_time import task_runner
from airflow.sdk.execution_time.comms import StartupDetails
from airflow.sdk.execution_time.task_runner import RuntimeTaskInstance,
parse
diff --git
a/providers/openlineage/tests/unit/openlineage/plugins/test_macros.py
b/providers/openlineage/tests/unit/openlineage/plugins/test_macros.py
index 2bfa74eb27f..a0b090ec538 100644
--- a/providers/openlineage/tests/unit/openlineage/plugins/test_macros.py
+++ b/providers/openlineage/tests/unit/openlineage/plugins/test_macros.py
@@ -114,7 +114,7 @@ def test_lineage_parent_id(mock_run_id):
@pytest.mark.skipif(not AIRFLOW_V_3_0_PLUS, reason="Test only for Airflow
3.0+")
def test_lineage_root_run_id_with_runtime_task_instance(create_runtime_ti):
"""Test lineage_root_run_id with real RuntimeTaskInstance object doesn't
throw AttributeError."""
- from airflow.sdk.bases.operator import BaseOperator
+ from airflow.sdk import BaseOperator
task = BaseOperator(task_id="test_task")
diff --git
a/providers/standard/src/airflow/providers/standard/example_dags/example_external_task_parent_deferrable.py
b/providers/standard/src/airflow/providers/standard/example_dags/example_external_task_parent_deferrable.py
index ffc04fabdf5..5b55fe566d7 100644
---
a/providers/standard/src/airflow/providers/standard/example_dags/example_external_task_parent_deferrable.py
+++
b/providers/standard/src/airflow/providers/standard/example_dags/example_external_task_parent_deferrable.py
@@ -20,7 +20,11 @@ from airflow import DAG
from airflow.providers.standard.operators.empty import EmptyOperator
from airflow.providers.standard.operators.trigger_dagrun import
TriggerDagRunOperator
from airflow.providers.standard.sensors.external_task import ExternalTaskSensor
-from airflow.utils.timezone import datetime
+
+try:
+ from airflow.sdk.timezone import datetime
+except ImportError:
+ from airflow.utils.timezone import datetime # type: ignore[no-redef]
with DAG(
dag_id="example_external_task",
diff --git a/providers/standard/src/airflow/providers/standard/sensors/time.py
b/providers/standard/src/airflow/providers/standard/sensors/time.py
index 6d72c29fb4a..0af548733da 100644
--- a/providers/standard/src/airflow/providers/standard/sensors/time.py
+++ b/providers/standard/src/airflow/providers/standard/sensors/time.py
@@ -42,7 +42,10 @@ except ImportError:
timeout: datetime.timedelta | None = None
-from airflow.utils import timezone
+try:
+ from airflow.sdk import timezone
+except ImportError:
+ from airflow.utils import timezone # type: ignore[attr-defined,no-redef]
if TYPE_CHECKING:
try:
diff --git a/providers/standard/tests/unit/standard/sensors/test_date_time.py
b/providers/standard/tests/unit/standard/sensors/test_date_time.py
index 188237a957b..48be29f8ef8 100644
--- a/providers/standard/tests/unit/standard/sensors/test_date_time.py
+++ b/providers/standard/tests/unit/standard/sensors/test_date_time.py
@@ -25,7 +25,8 @@ import pytest
from airflow import macros
from airflow.models.dag import DAG
from airflow.providers.standard.sensors.date_time import DateTimeSensor
-from airflow.utils import timezone
+
+from tests_common.test_utils.version_compat import timezone
DEFAULT_DATE = timezone.datetime(2015, 1, 1)
diff --git a/providers/standard/tests/unit/standard/sensors/test_python.py
b/providers/standard/tests/unit/standard/sensors/test_python.py
index c363af3a9c4..4d3ede65f89 100644
--- a/providers/standard/tests/unit/standard/sensors/test_python.py
+++ b/providers/standard/tests/unit/standard/sensors/test_python.py
@@ -24,8 +24,8 @@ import pytest
from airflow.exceptions import AirflowSensorTimeout
from airflow.providers.standard.sensors.python import PythonSensor
-from airflow.sensors.base import PokeReturnValue
+from tests_common.test_utils.version_compat import PokeReturnValue
from unit.standard.operators.test_python import BasePythonTest
pytestmark = pytest.mark.db_test
diff --git a/providers/standard/tests/unit/standard/sensors/test_time_delta.py
b/providers/standard/tests/unit/standard/sensors/test_time_delta.py
index 3ba3d14d0de..8e85be40f9c 100644
--- a/providers/standard/tests/unit/standard/sensors/test_time_delta.py
+++ b/providers/standard/tests/unit/standard/sensors/test_time_delta.py
@@ -19,7 +19,6 @@ from __future__ import annotations
from datetime import timedelta
from typing import Any
-from unittest import mock
import pendulum
import pytest
@@ -34,16 +33,14 @@ from airflow.providers.standard.sensors.time_delta import (
WaitSensor,
)
from airflow.providers.standard.triggers.temporal import DateTimeTrigger
-from airflow.utils import timezone
-from airflow.utils.timezone import datetime
from airflow.utils.types import DagRunType
from tests_common.test_utils import db
-from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS, timezone
pytestmark = pytest.mark.db_test
-DEFAULT_DATE = datetime(2015, 1, 1)
+DEFAULT_DATE = timezone.datetime(2015, 1, 1)
DEV_NULL = "/dev/null"
TEST_DAG_ID = "unit_tests"
@@ -64,13 +61,13 @@ class TestTimedeltaSensor:
self.dagbag = DagBag(dag_folder=DEV_NULL, include_examples=False)
self.dag = DAG(TEST_DAG_ID, schedule=timedelta(days=1),
start_date=DEFAULT_DATE)
- def test_timedelta_sensor(self):
+ def test_timedelta_sensor(self, mocker):
op = TimeDeltaSensor(task_id="timedelta_sensor_check",
delta=timedelta(seconds=2), dag=self.dag)
- op.execute({"dag_run": mock.MagicMock(run_after=DEFAULT_DATE),
"data_interval_end": DEFAULT_DATE})
+ op.execute({"dag_run": mocker.MagicMock(run_after=DEFAULT_DATE),
"data_interval_end": DEFAULT_DATE})
@pytest.mark.parametrize(
- "run_after, interval_end",
+ ("run_after", "interval_end"),
[
(timezone.utcnow() + timedelta(days=1), timezone.utcnow() +
timedelta(days=2)),
(timezone.utcnow() + timedelta(days=1), None),
@@ -108,7 +105,7 @@ def test_timedelta_sensor_run_after_vs_interval(run_after,
interval_end, dag_mak
@pytest.mark.parametrize(
- "run_after, interval_end",
+ ("run_after", "interval_end"),
[
(timezone.utcnow() + timedelta(days=1), timezone.utcnow() +
timedelta(days=2)),
(timezone.utcnow() + timedelta(days=1), None),
@@ -168,8 +165,8 @@ class TestTimeDeltaSensorAsync:
"should_defer",
[False, True],
)
- @mock.patch(DEFER_PATH)
- def test_timedelta_sensor(self, defer_mock, should_defer):
+ def test_timedelta_sensor(self, mocker, should_defer):
+ defer_mock = mocker.patch(DEFER_PATH)
delta = timedelta(hours=1)
with pytest.warns(AirflowProviderDeprecationWarning):
op = TimeDeltaSensorAsync(task_id="timedelta_sensor_check",
delta=delta, dag=self.dag)
@@ -187,9 +184,9 @@ class TestTimeDeltaSensorAsync:
"should_defer",
[False, True],
)
- @mock.patch(DEFER_PATH)
- @mock.patch("airflow.providers.standard.sensors.time_delta.sleep")
- def test_wait_sensor(self, sleep_mock, defer_mock, should_defer):
+ def test_wait_sensor(self, mocker, should_defer):
+ defer_mock = mocker.patch(DEFER_PATH)
+ sleep_mock =
mocker.patch("airflow.providers.standard.sensors.time_delta.sleep")
wait_time = timedelta(seconds=30)
op = WaitSensor(
task_id="wait_sensor_check", time_to_wait=wait_time, dag=self.dag,
deferrable=should_defer
@@ -203,7 +200,7 @@ class TestTimeDeltaSensorAsync:
sleep_mock.assert_called_once_with(30)
@pytest.mark.parametrize(
- "run_after, interval_end",
+ ("run_after", "interval_end"),
[
(timezone.utcnow() + timedelta(days=1), timezone.utcnow() +
timedelta(days=2)),
(timezone.utcnow() + timedelta(days=1), None),
diff --git a/providers/standard/tests/unit/standard/sensors/test_weekday.py
b/providers/standard/tests/unit/standard/sensors/test_weekday.py
index b86349a032e..3f7fa41ea26 100644
--- a/providers/standard/tests/unit/standard/sensors/test_weekday.py
+++ b/providers/standard/tests/unit/standard/sensors/test_weekday.py
@@ -26,18 +26,16 @@ from airflow.models import DagBag
from airflow.models.dag import DAG
from airflow.providers.standard.sensors.weekday import DayOfWeekSensor
from airflow.providers.standard.utils.weekday import WeekDay
-from airflow.utils import timezone
-from airflow.utils.timezone import datetime
from tests_common.test_utils import db
-from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS
+from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS, timezone
pytestmark = pytest.mark.db_test
-DEFAULT_DATE = datetime(2018, 12, 10)
-WEEKDAY_DATE = datetime(2018, 12, 20)
-WEEKEND_DATE = datetime(2018, 12, 22)
+DEFAULT_DATE = timezone.datetime(2018, 12, 10)
+WEEKDAY_DATE = timezone.datetime(2018, 12, 20)
+WEEKEND_DATE = timezone.datetime(2018, 12, 22)
TEST_DAG_ID = "weekday_sensor_dag"
DEV_NULL = "/dev/null"
TEST_CASE_WEEKDAY_SENSOR_TRUE = {
diff --git a/pyproject.toml b/pyproject.toml
index d80c449f782..dbec1e04242 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -754,6 +754,7 @@ testing = ["dev", "providers.tests", "tests_common",
"tests", "system", "unit",
"kubernetes-tests/*" = ["D", "TID253", "S101", "TRY002"]
"helm-tests/*" = ["D", "TID253", "S101", "TRY002"]
"providers/**/tests/*" = ["D", "TID253", "S101", "TRY002"]
+"performance/tests/*" = ["S101"]
# All of the modules which have an extra license header (i.e. that we copy
from another project) need to
# ignore E402 -- module level import not at top level