This is an automated email from the ASF dual-hosted git repository.

ephraimanierobi 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 e4265287cf8 Move `airflow.utils.operator_resources` to task-sdk 
(#54461)
e4265287cf8 is described below

commit e4265287cf8829cb19af0464de5015ffd39330c8
Author: Ephraim Anierobi <splendidzig...@gmail.com>
AuthorDate: Fri Aug 15 13:51:55 2025 +0100

    Move `airflow.utils.operator_resources` to task-sdk (#54461)
    
    * Move `airflow.utils.operator_resources` to task-sdk
    
    The operator_resources is more of task definition thing. The only usage
    in core is during serialization, we can decide how we handle it around
    serialization later
    
    * fixup! Move `airflow.utils.operator_resources` to task-sdk
    
    * Apply suggestions from code review
    
    * delete operator_resources
    
    * fixup! delete operator_resources
---
 airflow-core/src/airflow/serialization/serialized_objects.py        | 2 +-
 airflow-core/src/airflow/utils/__init__.py                          | 3 +++
 airflow-core/tests/unit/serialization/test_dag_serialization.py     | 2 +-
 airflow-core/tests/unit/serialization/test_serialized_objects.py    | 2 +-
 task-sdk/src/airflow/sdk/bases/operator.py                          | 6 +++---
 task-sdk/src/airflow/sdk/definitions/mappedoperator.py              | 2 +-
 .../src/airflow/sdk/definitions}/operator_resources.py              | 0
 .../tests/task_sdk/definitions}/test_operator_resources.py          | 2 +-
 8 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/airflow-core/src/airflow/serialization/serialized_objects.py 
b/airflow-core/src/airflow/serialization/serialized_objects.py
index 997f01ef2fb..0ffa1401275 100644
--- a/airflow-core/src/airflow/serialization/serialized_objects.py
+++ b/airflow-core/src/airflow/serialization/serialized_objects.py
@@ -63,6 +63,7 @@ from airflow.sdk.definitions.asset import (
 )
 from airflow.sdk.definitions.deadline import DeadlineAlert
 from airflow.sdk.definitions.mappedoperator import MappedOperator
+from airflow.sdk.definitions.operator_resources import Resources
 from airflow.sdk.definitions.param import Param, ParamsDict
 from airflow.sdk.definitions.taskgroup import MappedTaskGroup, TaskGroup
 from airflow.sdk.definitions.xcom_arg import serialize_xcom_arg
@@ -93,7 +94,6 @@ from airflow.utils.db import LazySelectSequence
 from airflow.utils.docs import get_docs_url
 from airflow.utils.log.logging_mixin import LoggingMixin
 from airflow.utils.module_loading import import_string, qualname
-from airflow.utils.operator_resources import Resources
 from airflow.utils.types import NOTSET, ArgNotSet
 
 if TYPE_CHECKING:
diff --git a/airflow-core/src/airflow/utils/__init__.py 
b/airflow-core/src/airflow/utils/__init__.py
index 9ed8b48407c..ab69664df4e 100644
--- a/airflow-core/src/airflow/utils/__init__.py
+++ b/airflow-core/src/airflow/utils/__init__.py
@@ -45,6 +45,9 @@ __deprecated_classes = {
     "timeout": {
         "timeout": "airflow.sdk.execution_time.timeout.timeout",
     },
+    "operator_resources": {
+        "*": "airflow.sdk.definitions.operator_resources",
+    },
 }
 
 add_deprecated_classes(__deprecated_classes, __name__)
diff --git a/airflow-core/tests/unit/serialization/test_dag_serialization.py 
b/airflow-core/tests/unit/serialization/test_dag_serialization.py
index 132ebc4b994..5020349e594 100644
--- a/airflow-core/tests/unit/serialization/test_dag_serialization.py
+++ b/airflow-core/tests/unit/serialization/test_dag_serialization.py
@@ -68,6 +68,7 @@ from airflow.sdk.bases.decorator import DecoratedOperator
 from airflow.sdk.bases.operator import BaseOperator
 from airflow.sdk.definitions._internal.expandinput import EXPAND_INPUT_EMPTY
 from airflow.sdk.definitions.asset import Asset, AssetUniqueKey
+from airflow.sdk.definitions.operator_resources import Resources
 from airflow.sdk.definitions.param import Param, ParamsDict
 from airflow.sdk.definitions.taskgroup import TaskGroup
 from airflow.security import permissions
@@ -84,7 +85,6 @@ from airflow.ti_deps.deps.ready_to_reschedule import 
ReadyToRescheduleDep
 from airflow.timetables.simple import NullTimetable, OnceTimetable
 from airflow.triggers.base import StartTriggerArgs
 from airflow.utils.module_loading import qualname
-from airflow.utils.operator_resources import Resources
 
 from tests_common.test_utils.config import conf_vars
 from tests_common.test_utils.markers import 
skip_if_force_lowest_dependencies_marker, skip_if_not_on_main
diff --git a/airflow-core/tests/unit/serialization/test_serialized_objects.py 
b/airflow-core/tests/unit/serialization/test_serialized_objects.py
index 03f135bd69b..4ac943192c1 100644
--- a/airflow-core/tests/unit/serialization/test_serialized_objects.py
+++ b/airflow-core/tests/unit/serialization/test_serialized_objects.py
@@ -65,6 +65,7 @@ from airflow.sdk.definitions.deadline import (
     DeadlineReference,
 )
 from airflow.sdk.definitions.decorators import task
+from airflow.sdk.definitions.operator_resources import Resources
 from airflow.sdk.definitions.param import Param
 from airflow.sdk.definitions.taskgroup import TaskGroup
 from airflow.sdk.execution_time.context import OutletEventAccessor, 
OutletEventAccessors
@@ -78,7 +79,6 @@ from airflow.serialization.serialized_objects import (
 from airflow.timetables.base import DataInterval
 from airflow.triggers.base import BaseTrigger
 from airflow.utils.db import LazySelectSequence
-from airflow.utils.operator_resources import Resources
 from airflow.utils.state import DagRunState, State
 from airflow.utils.types import DagRunType
 
diff --git a/task-sdk/src/airflow/sdk/bases/operator.py 
b/task-sdk/src/airflow/sdk/bases/operator.py
index c35dc8ada7b..a839d8f89fb 100644
--- a/task-sdk/src/airflow/sdk/bases/operator.py
+++ b/task-sdk/src/airflow/sdk/bases/operator.py
@@ -80,13 +80,13 @@ if TYPE_CHECKING:
     from airflow.sdk.bases.operatorlink import BaseOperatorLink
     from airflow.sdk.definitions.context import Context
     from airflow.sdk.definitions.dag import DAG
+    from airflow.sdk.definitions.operator_resources import Resources
     from airflow.sdk.definitions.taskgroup import TaskGroup
     from airflow.sdk.definitions.xcom_arg import XComArg
     from airflow.serialization.enums import DagAttributeTypes
     from airflow.task.priority_strategy import PriorityWeightStrategy
     from airflow.triggers.base import BaseTrigger, StartTriggerArgs
     from airflow.typing_compat import Self
-    from airflow.utils.operator_resources import Resources
 
     TaskPreExecuteHook = Callable[[Context], None]
     TaskPostExecuteHook = Callable[[Context, Any], None]
@@ -177,7 +177,7 @@ def coerce_timedelta(value: float | timedelta, *, key: str 
| None = None) -> tim
 def coerce_resources(resources: dict[str, Any] | None) -> Resources | None:
     if resources is None:
         return None
-    from airflow.utils.operator_resources import Resources
+    from airflow.sdk.definitions.operator_resources import Resources
 
     return Resources(**resources)
 
@@ -1330,7 +1330,7 @@ class BaseOperator(AbstractOperator, 
metaclass=BaseOperatorMeta):
         if resources is None:
             return None
 
-        from airflow.utils.operator_resources import Resources
+        from airflow.sdk.definitions.operator_resources import Resources
 
         if isinstance(resources, Resources):
             return resources
diff --git a/task-sdk/src/airflow/sdk/definitions/mappedoperator.py 
b/task-sdk/src/airflow/sdk/definitions/mappedoperator.py
index ba5595e3b48..260a4b57a59 100644
--- a/task-sdk/src/airflow/sdk/definitions/mappedoperator.py
+++ b/task-sdk/src/airflow/sdk/definitions/mappedoperator.py
@@ -66,9 +66,9 @@ if TYPE_CHECKING:
     )
     from airflow.sdk import DAG, BaseOperator, BaseOperatorLink, Context, 
TaskGroup, XComArg
     from airflow.sdk.definitions._internal.expandinput import ExpandInput
+    from airflow.sdk.definitions.operator_resources import Resources
     from airflow.sdk.definitions.param import ParamsDict
     from airflow.triggers.base import StartTriggerArgs
-    from airflow.utils.operator_resources import Resources
     from airflow.utils.trigger_rule import TriggerRule
 
 ValidationSource = Literal["expand"] | Literal["partial"]
diff --git a/airflow-core/src/airflow/utils/operator_resources.py 
b/task-sdk/src/airflow/sdk/definitions/operator_resources.py
similarity index 100%
rename from airflow-core/src/airflow/utils/operator_resources.py
rename to task-sdk/src/airflow/sdk/definitions/operator_resources.py
diff --git a/airflow-core/tests/unit/utils/test_operator_resources.py 
b/task-sdk/tests/task_sdk/definitions/test_operator_resources.py
similarity index 95%
rename from airflow-core/tests/unit/utils/test_operator_resources.py
rename to task-sdk/tests/task_sdk/definitions/test_operator_resources.py
index fa25106017d..9e0875cf076 100644
--- a/airflow-core/tests/unit/utils/test_operator_resources.py
+++ b/task-sdk/tests/task_sdk/definitions/test_operator_resources.py
@@ -17,7 +17,7 @@
 # under the License.
 from __future__ import annotations
 
-from airflow.utils.operator_resources import Resources
+from airflow.sdk.definitions.operator_resources import Resources
 
 
 class TestResources:

Reply via email to