Skip to content

Commit 52dcb2a

Browse files
committed
Remove shared workloads dependency and refactor TaskInstanceDTO usage
- Removed the shared workloads dependency from pyproject.toml and related files. - Deleted the workloads directory and its references in the codebase. - Refactored imports of TaskInstanceDTO to point to the new location in execution_time.workloads.task. - Introduced new files for TaskInstanceDTO and its base class in the execution_time module. - Updated tests to reflect the changes in TaskInstanceDTO imports.
1 parent 4a8d4af commit 52dcb2a

27 files changed

Lines changed: 172 additions & 2348 deletions

File tree

‎.pre-commit-config.yaml‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,12 @@ repos:
463463
language: python
464464
pass_filenames: false
465465
files: ^dev/registry/registry_tools/types\.py$|^registry/src/_data/types\.json$
466+
- id: check-task-instance-dto-sync
467+
name: Check BaseTaskInstanceDTO duplicate is in sync between core and task-sdk
468+
entry: ./scripts/ci/prek/check_task_instance_dto_sync.py
469+
language: python
470+
pass_filenames: false
471+
files: ^airflow-core/src/airflow/executors/workloads/task\.py$|^task-sdk/src/airflow/sdk/execution_time/workloads/task\.py$
466472
- id: ruff
467473
name: Run 'ruff' for extremely fast Python linting
468474
description: "Run 'ruff' for extremely fast Python linting"

‎airflow-core/pyproject.toml‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,6 @@ exclude = [
249249
"../shared/serialization/src/airflow_shared/serialization" = "src/airflow/_shared/serialization"
250250
"../shared/state/src/airflow_shared/state" = "src/airflow/_shared/state"
251251
"../shared/timezones/src/airflow_shared/timezones" = "src/airflow/_shared/timezones"
252-
"../shared/workloads/src/airflow_shared/workloads" = "src/airflow/_shared/workloads"
253252
"../shared/listeners/src/airflow_shared/listeners" = "src/airflow/_shared/listeners"
254253
"../shared/plugins_manager/src/airflow_shared/plugins_manager" = "src/airflow/_shared/plugins_manager"
255254
"../shared/providers_discovery/src/airflow_shared/providers_discovery" = "src/airflow/_shared/providers_discovery"
@@ -338,7 +337,6 @@ shared_distributions = [
338337
"apache-airflow-shared-serialization",
339338
"apache-airflow-shared-state",
340339
"apache-airflow-shared-timezones",
341-
"apache-airflow-shared-workloads",
342340
"apache-airflow-shared-plugins-manager",
343341
"apache-airflow-shared-providers-discovery",
344342
]

‎airflow-core/src/airflow/_shared/workloads‎

Lines changed: 0 additions & 1 deletion
This file was deleted.

‎airflow-core/src/airflow/executors/base_executor.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -648,9 +648,10 @@ def run_workload(
648648

649649
if isinstance(workload, ExecuteTask):
650650
from airflow.sdk.execution_time.supervisor import supervise_task
651+
from airflow.sdk.execution_time.workloads.task import TaskInstanceDTO as SDKTaskInstanceDTO
651652

652653
return supervise_task(
653-
ti=workload.ti,
654+
ti=SDKTaskInstanceDTO.model_validate(workload.ti, from_attributes=True),
654655
bundle_info=workload.bundle_info,
655656
dag_rel_path=workload.dag_rel_path,
656657
token=workload.token,

‎airflow-core/src/airflow/executors/workloads/task.py‎

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,8 @@
2222
from pathlib import Path
2323
from typing import TYPE_CHECKING, Literal
2424

25-
from pydantic import Field
25+
from pydantic import BaseModel, Field
2626

27-
from airflow._shared.workloads import TaskInstanceDTO as _BaseTaskInstanceDTO
2827
from airflow.executors.workloads.base import BaseDagBundleWorkload, BundleInfo
2928
from airflow.utils.state import TaskInstanceState
3029

@@ -34,12 +33,13 @@
3433
from airflow.models.taskinstancekey import TaskInstanceKey
3534

3635

37-
class TaskInstanceDTO(_BaseTaskInstanceDTO):
36+
class BaseTaskInstanceDTO(BaseModel):
3837
"""
39-
TaskInstanceDTO with executor-specific ``key`` property.
38+
Base schema for TaskInstance with the minimal fields shared by Executors and the Task SDK.
4039
41-
Extends the shared :class:`~airflow._shared.workloads.TaskInstanceDTO`
42-
to add the :attr:`key` property used by executors for workload tracking.
40+
This definition is duplicated in :mod:`airflow.sdk.execution_time.workloads.task`
41+
and the two are kept in sync by the ``check-task-instance-dto-sync`` prek
42+
hook. Update both files together.
4343
"""
4444

4545
id: uuid.UUID
@@ -54,11 +54,16 @@ class TaskInstanceDTO(_BaseTaskInstanceDTO):
5454
queue: str
5555
priority_weight: int
5656
executor_config: dict | None = Field(default=None, exclude=True)
57-
external_executor_id: str | None = Field(default=None, exclude=True)
5857

5958
parent_context_carrier: dict | None = None
6059
context_carrier: dict | None = None
6160

61+
62+
class TaskInstanceDTO(BaseTaskInstanceDTO):
63+
"""TaskInstanceDTO with executor-specific ``external_executor_id`` field and ``key`` property."""
64+
65+
external_executor_id: str | None = Field(default=None, exclude=True)
66+
6267
# TODO: Task-SDK: Can we replace TaskInstanceKey with just the uuid across the codebase?
6368
@property
6469
def key(self) -> TaskInstanceKey:

‎devel-common/src/tests_common/pytest_plugin.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2540,7 +2540,7 @@ def _create_task_instance(
25402540
from tests_common.test_utils.version_compat import AIRFLOW_V_3_3_PLUS
25412541

25422542
if AIRFLOW_V_3_3_PLUS:
2543-
from airflow.sdk._shared.workloads import TaskInstanceDTO
2543+
from airflow.sdk.execution_time.workloads.task import TaskInstanceDTO
25442544
else:
25452545
from airflow.sdk.api.datamodels._generated import ( # type: ignore[no-redef,assignment]
25462546
TaskInstance as TaskInstanceDTO,

‎providers/edge3/src/airflow/providers/edge3/worker_api/v2-edge-generated.yaml‎

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1259,12 +1259,8 @@ components:
12591259
- queue
12601260
- priority_weight
12611261
title: TaskInstanceDTO
1262-
description: 'TaskInstanceDTO with executor-specific ``key`` property.
1263-
1264-
1265-
Extends the shared :class:`~airflow._shared.workloads.TaskInstanceDTO`
1266-
1267-
to add the :attr:`key` property used by executors for workload tracking.'
1262+
description: TaskInstanceDTO with executor-specific ``external_executor_id``
1263+
field and ``key`` property.
12681264
TaskInstanceState:
12691265
type: string
12701266
enum:

‎providers/sdk/java/src/airflow/providers/sdk/java/coordinator.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
from airflow.sdk.execution_time.coordinator import BaseCoordinator
3030

3131
if TYPE_CHECKING:
32-
from airflow.sdk._shared.workloads import TaskInstanceDTO
3332
from airflow.sdk.api.datamodels._generated import BundleInfo
33+
from airflow.sdk.execution_time.workloads.task import TaskInstanceDTO
3434

3535

3636
class JavaCoordinator(BaseCoordinator):

‎providers/sdk/java/tests/unit/sdk/java/test_coordinator.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import pytest
2626
import yaml
2727

28-
from airflow._shared.workloads import TaskInstanceDTO
2928
from airflow.providers.sdk.java.bundle_scanner import (
3029
MAIN_CLASS_MANIFEST_KEY,
3130
MANIFEST_PATH,
@@ -34,6 +33,7 @@
3433
)
3534
from airflow.providers.sdk.java.coordinator import JavaCoordinator
3635
from airflow.sdk.api.datamodels._generated import BundleInfo
36+
from airflow.sdk.execution_time.workloads.task import TaskInstanceDTO
3737

3838
from tests_common.test_utils.version_compat import AIRFLOW_V_3_3_PLUS
3939

‎pyproject.toml‎

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1335,7 +1335,6 @@ dev = [
13351335
"apache-airflow-shared-state",
13361336
"apache-airflow-shared-template-rendering",
13371337
"apache-airflow-shared-timezones",
1338-
"apache-airflow-shared-workloads",
13391338
]
13401339

13411340
# To build docs:
@@ -1504,7 +1503,6 @@ apache-airflow-shared-serialization = false
15041503
apache-airflow-shared-state = false
15051504
apache-airflow-shared-template-rendering = false
15061505
apache-airflow-shared-timezones = false
1507-
apache-airflow-shared-workloads = false
15081506
apache-airflow-task-sdk = false
15091507
apache-airflow-task-sdk-integration-tests = false
15101508
apache-aurflow-docker-stack = false
@@ -1657,7 +1655,6 @@ apache-airflow-shared-serialization = false
16571655
apache-airflow-shared-state = false
16581656
apache-airflow-shared-template-rendering = false
16591657
apache-airflow-shared-timezones = false
1660-
apache-airflow-shared-workloads = false
16611658
apache-airflow-task-sdk = false
16621659
apache-airflow-task-sdk-integration-tests = false
16631660
apache-aurflow-docker-stack = false
@@ -1703,7 +1700,6 @@ apache-airflow-shared-serialization = { workspace = true }
17031700
apache-airflow-shared-state = { workspace = true }
17041701
apache-airflow-shared-template-rendering = { workspace = true }
17051702
apache-airflow-shared-timezones = { workspace = true }
1706-
apache-airflow-shared-workloads = { workspace = true }
17071703
# Automatically generated provider workspace items (update_airflow_pyproject_toml.py)
17081704
apache-airflow-providers-airbyte = { workspace = true }
17091705
apache-airflow-providers-akeyless = { workspace = true }
@@ -1842,7 +1838,6 @@ members = [
18421838
"shared/state",
18431839
"shared/template_rendering",
18441840
"shared/timezones",
1845-
"shared/workloads",
18461841
# Automatically generated provider workspace members (update_airflow_pyproject_toml.py)
18471842
"providers/airbyte",
18481843
"providers/akeyless",

0 commit comments

Comments
 (0)