Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
231 commits
Select commit Hold shift + click to select a range
89af76d
refactor: Implemented Dynamic Task Iteration
dabla Mar 5, 2026
634d7f5
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 5, 2026
edad5de
refactor: Refactored and reformatted files
dabla Mar 5, 2026
e74575d
refactor: Re-aligned context typing in ExpandInput classes and XComAr…
dabla Mar 5, 2026
e60afaa
refactor: Re-aligned context typing in ExpandInput classes and XComAr…
dabla Mar 5, 2026
0f1c3b3
refactor: MappedArgument should be a pure ResolveMixin
dabla Mar 5, 2026
4d30a0c
refactor: Airflow context vars should be assigned only once into env …
dabla Mar 5, 2026
0997c66
refactor: Collect all raise exceptions and raise them as a ExceptionG…
dabla Mar 5, 2026
c8a2f28
refactor: Fixed bug in MappedTaskInstance with xcom_pull and xcom_push
dabla Mar 5, 2026
e481021
refactor: Fixed bug in condition check for IterableOperator with resu…
dabla Mar 5, 2026
0c695ea
Refactor XComIterable to return fresh iterator per __iter__ call
dabla Mar 5, 2026
d321a1d
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 5, 2026
95015f4
refactor: Added unit test for iter_values method in ExpandInput types
dabla Mar 6, 2026
a650e91
refactor: Lazy import IterableOperator to avoid cyclic imports from p…
dabla Mar 6, 2026
ea104e4
refactor: Added unit test for iter_values method in XComArg
dabla Mar 6, 2026
fd2bfa5
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 6, 2026
c68208b
refactor: Add fallback for ExceptionGroup if Python is older than ver…
dabla Mar 6, 2026
35ccdb2
refactor: Fixed typing with MappedTaskInstance in IterableOperator
dabla Mar 6, 2026
c3ec472
refactor: Fixed import of Logger for executor module
dabla Mar 6, 2026
132b32e
refactor: Guard map_indices in xcom_pull method of MappedTaskInstance
dabla Mar 6, 2026
f7e6eca
refactor: Reformatted iterate and iterate_kwargs methods
dabla Mar 6, 2026
10bfad0
refactor: Reformatted iter_values method
dabla Mar 6, 2026
b7e7bf1
refactor: Reformatted iterate_kwargs method in mappedoperator
dabla Mar 6, 2026
01dc47c
refactor: Reformatted next_retry_datetime method in MappedTaskInstance
dabla Mar 6, 2026
d813960
refactor: Reorganized imports for ExpandInput and XComArg unit tests
dabla Mar 6, 2026
81b80a0
refactor: Add fallback for batch import from itertools as this is onl…
dabla Mar 6, 2026
cebb300
refactor: Reformatted casting of PlainXComArg in iterate and iterate_…
dabla Mar 6, 2026
a949429
refactor: Reformatted casting of BaseAsyncOperator in _execute_async_…
dabla Mar 6, 2026
0ff86c0
refactor: Changed type of operator in IterableOperator
dabla Mar 6, 2026
03cf8ab
refactor: Moved import of PlainXComArg in type checking block
dabla Mar 6, 2026
f9e8f15
refactor: Make sure map_index is not None in TaskExecutor
dabla Mar 6, 2026
d798d58
refactor: Changed type from Mapping to Context in MappedOperator
dabla Mar 6, 2026
15b67c1
refactor: Check if map_index is not None in resolve method of ListOfD…
dabla Mar 6, 2026
089c45a
refactor: Fixed return type of _run_tasks method in IterableOperator
dabla Mar 6, 2026
dec08d2
refactor: Reformatted _get_unmap_kwargs method in DecoratedMappedOper…
dabla Mar 6, 2026
6d2a54b
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 6, 2026
6f41233
refactor: Reformatted unit tests
dabla Mar 6, 2026
6247ccc
refactor: Reformatted iter_values method of XComArg
dabla Mar 6, 2026
750a030
refactor: Reformatted iter_values method of ListOfDictsExpandInput
dabla Mar 6, 2026
b787478
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 6, 2026
5eb38ce
refactor: Moved IterableOperator from bases to definitions
Mar 9, 2026
54099c8
refactor: Max workers should use value from task_concurrency or if no…
dabla Mar 10, 2026
80af4f8
refactor: Refactored IterableOperator to not sleep before retrying fa…
dabla Mar 10, 2026
cc777df
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 10, 2026
b7e29b3
refactor: Reformatted files
dabla Mar 10, 2026
40162d1
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 10, 2026
0e79b7f
refactor: Refactored task_index of TaskExecutor and replaced assert w…
dabla Mar 10, 2026
f646e56
refactor: Moved TaskExecutor from iterableoperator module to executor…
dabla Mar 10, 2026
6e3e249
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 10, 2026
e87dcb9
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 10, 2026
bc50478
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 10, 2026
61423b5
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 10, 2026
dda3834
refactor: Reorganize imports
dabla Mar 10, 2026
68c368d
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 10, 2026
4d1bc94
fix: Refactored _run_tasks method of IterableOperator for deferred_ta…
dabla Mar 11, 2026
a7d9528
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 11, 2026
6342f9c
refactor: Reformatted files
dabla Mar 11, 2026
fc4e082
refactor: Added cast to RuntimeTaskInstance in resolve method of Plai…
dabla Mar 11, 2026
8520a07
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 11, 2026
7bc1676
refactor: Import all exceptions from sdk in IterableOperator
dabla Mar 11, 2026
502993f
refactor: Import TaskInstanceState from sdk in IterableOperator
dabla Mar 11, 2026
6f8d9c3
refactor: Import LoggingMixin from sdk in executor module
dabla Mar 11, 2026
83f7dba
refactor: Added extra import of batched in type checking block to kee…
dabla Mar 11, 2026
b120de3
refactor: Make sure _operator type of IterableOperator is of type Map…
dabla Mar 11, 2026
ad7c6d3
refactor: Added slice support for XComIterable __getitem__ method
dabla Mar 12, 2026
36674ea
refactor: Make sure elapsed is initialized
dabla Mar 13, 2026
7207561
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 13, 2026
bf47853
refactor: Fixed return type on overloaded __getitem__ methods of XCom…
dabla Mar 16, 2026
c24341a
refactor: Don't re-import batched in type checking block
dabla Mar 16, 2026
02208ab
refactor: Fixed some mypy typing issues
dabla Mar 16, 2026
5b6f4e8
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 16, 2026
c71696b
refactor: Add unit tests for executor module
dabla Mar 16, 2026
ae633ca
refactor: Reformatted executor unit tests
dabla Mar 16, 2026
427502f
refactor: Updated uv.lock
dabla Mar 16, 2026
fe2b86c
refactor: Fixed formatting and parametrize in executor unit test
dabla Mar 17, 2026
4c96cb0
refactor: Fixed mypy issue with __getitem__ method in XComIterable
dabla Mar 17, 2026
51011af
refactor: Try fixing mypy issue in resolve method of PlainXComArg
dabla Mar 17, 2026
53b43ce
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 17, 2026
9aa23df
refactor: Reverted context typing back to original Mapping
dabla Mar 17, 2026
ec550cb
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 17, 2026
6a4e54a
refactor: Just pass context directly in DecoratedExpandInput
dabla Mar 17, 2026
23b820b
refactor: Moved iter_values abstract method to ResolveMixin and remov…
dabla Mar 17, 2026
4769f93
refactor: Overload iter_values and resolve method for ExapndInput wit…
dabla Mar 17, 2026
4fab0a6
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 17, 2026
a3504d3
refactor: Refactored _expand method in decorator to return MappedOper…
dabla Mar 17, 2026
7f5e028
refactor: task type of _xcom_push must be MappedTaskInstance instead …
dabla Mar 17, 2026
2ac6419
refactor: Temporary Ignore import of DateTimeTrigger in IterableOperator
dabla Mar 17, 2026
273e9c8
refactor: Fixed iter_values of ListOfDictsExpandInput
dabla Mar 17, 2026
dd2d41e
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 17, 2026
a2be71a
refactor: Fixed test_plain_xcomarg_iter_values in TestXComArg
dabla Mar 17, 2026
b71260f
refactor: Removed unused import of PlainXComArg
dabla Mar 18, 2026
cc0dde4
refactor: New _apply_upstream_relationship property should also be se…
dabla Mar 18, 2026
6f44791
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 18, 2026
95fe0d8
refactor: Added unit test for IterableOperator
dabla Mar 18, 2026
0f4f9c7
refactor: Refactored iter_values of ListOfDictsExpandInput
dabla Mar 18, 2026
a90a03a
refactor: Added unit tests for executing the IterableOperator
dabla Mar 18, 2026
630c881
refactor: Added do_xcom_push property on MappedTaskInstance so Iterab…
dabla Mar 18, 2026
bd0dd9a
refactor: Should log xcom_keu when pushing xcom in IterableOperator
dabla Mar 18, 2026
9a8b4fe
refactor: Fixed creation of iterable operator and improved assertion …
dabla Mar 18, 2026
1818947
refactor: Make sure mock_context also generates a run_id if not speci…
dabla Mar 18, 2026
2c19227
refactor: Improved execution tests on IterableOperator
dabla Mar 18, 2026
404ce25
refactor: IterableOperator can now check directly the do_xcom_push pr…
dabla Mar 18, 2026
ffc558e
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 18, 2026
ef82cbb
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 18, 2026
912aece
refactor: Fixed iter_values of XComArg
dabla Mar 18, 2026
8b56197
refactor: Added backward compat import for BaseExceptionGroup
dabla Mar 18, 2026
98a32c2
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 18, 2026
c04a75d
refactor: Reformatted test iterable operator
dabla Mar 18, 2026
57e1d82
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 18, 2026
5e59b34
refactor: Refactored mock_context
dabla Mar 18, 2026
5183032
refactor: Reformatted TestIterableOperator
dabla Mar 18, 2026
0f0df47
refactor: Fixed assertions of new _apply_upstream_relationship proper…
dabla Mar 18, 2026
69638a0
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 18, 2026
6d94184
refactor: Reformatted mock_context
dabla Mar 18, 2026
18965c9
refactor: Reformatted _mock_xcom_get_one
dabla Mar 18, 2026
57cd0d8
refactor: Refactored mock_context to try fix backward compat with Air…
dabla Mar 18, 2026
7a0a662
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 18, 2026
3953741
refactor: Try to make generate_run_id backward compatible when invoke…
dabla Mar 18, 2026
d554cb2
refactor: Reformatted imports
dabla Mar 18, 2026
4650b28
refactor: Moved import of MappedOperator into type checking block
dabla Mar 18, 2026
d28b678
refactor: Also init execution_date param for generate_run_id when Air…
dabla Mar 18, 2026
b5d3094
refactor: Refactored mock_xcom_get_one using pytest monkeypatch in Te…
dabla Mar 18, 2026
3d2487e
refactor: Refactored collect_futures to only yield elements and added…
dabla Mar 18, 2026
075ae3b
refactor: Make sure to take a copy of deferred_tasks before chaining …
dabla Mar 18, 2026
765fcfb
refactor: run_trigger should return immediately after first event
dabla Mar 18, 2026
52877cf
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 18, 2026
9291539
refactor: Removed unnecessary double quote
Mar 19, 2026
05cd784
refactor: Fix mypy type error in collect_futures asyncio future handling
dabla Mar 19, 2026
c55459b
refactor: Fixed bug in resume_execution
dabla Mar 19, 2026
3118bb7
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 19, 2026
af1a189
refactor: Removed assignment of airflow context vars to os environmen…
dabla Mar 19, 2026
17f9ed2
refactor: Renamed HybridExecutor to ConcurrentExecutor
dabla Mar 19, 2026
ad05e5f
refactor: Reformatted collect_futures
dabla Mar 19, 2026
e35bda7
refactor: Reformatted TestIterableOperator
dabla Mar 19, 2026
d592f3d
refactor: Added mypy ignore clause for Airflow 2.x fallback call to D…
dabla Mar 19, 2026
342216f
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 19, 2026
8476a42
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 19, 2026
de3c733
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 19, 2026
8f7c0f4
refactor: Fixed next_callable by using the functools partial method i…
dabla Mar 19, 2026
ac81932
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 19, 2026
d97e50d
refactor: Make sure original context cannot be mutated by iterated ta…
dabla Mar 19, 2026
ce949ce
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 19, 2026
64caf02
refactor: Added comment in __attrs_post_init__ method of MappedOperat…
dabla Mar 20, 2026
9f2c750
refactor: Replaced recursion in aexecute method of DecoratedDeferredA…
dabla Mar 20, 2026
3d42556
refactor: Replaced patching of XComArg in make_xcom_arg with re-assig…
dabla Mar 20, 2026
b2286c9
refactor: Removed new line
dabla Mar 20, 2026
01c062b
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 20, 2026
4fb56fd
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 20, 2026
fcfdf7b
refactor: Added fist version of DTM vs DTI documentation
dabla Mar 20, 2026
8fd4b82
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 20, 2026
916539c
refactor: Reformatted document
dabla Mar 20, 2026
68ad3b1
docs: Clarify difference between DTM and DTI
dabla Mar 20, 2026
24361db
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 20, 2026
58f54ad
docs: Removed duplicate new line
dabla Mar 20, 2026
3242037
refactor: Fixed test_parametrized_deferral_counts
dabla Mar 20, 2026
620da91
refactor: Use pytest.asyncio instead
dabla Mar 20, 2026
17f556e
refactor: Added myself as codeowner for executor and iterableoperator…
dabla Mar 24, 2026
9ac7c44
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 24, 2026
9ea1149
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 24, 2026
049a1fc
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 24, 2026
5993b6c
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 25, 2026
5f4f3a2
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 25, 2026
6b9a659
refactor: Do shallow copy of context to avoid pickling issues
dabla Mar 25, 2026
5b00c7f
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 25, 2026
17c4e9c
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 26, 2026
3fec813
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 26, 2026
bbef6a5
refactor: Added reference from deferred vs async operators doc to the…
dabla Mar 26, 2026
2eac580
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 26, 2026
4367327
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 26, 2026
88f3dae
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 27, 2026
bf5c818
Merge branch 'main' into feature/dynamic-task-iteration
dabla Mar 27, 2026
05b12e0
Merge branch 'main' into feature/dynamic-task-iteration
dabla Apr 1, 2026
9547d3a
Merge branch 'main' into feature/dynamic-task-iteration
dabla Apr 4, 2026
25f6c8d
Merge branch 'main' into feature/dynamic-task-iteration
dabla Apr 4, 2026
b94a09d
refactor: Make sure the IterableOperator also render templates of eac…
dabla Apr 15, 2026
0170304
refactor: Reformatted IterableOperator
Apr 16, 2026
6daaf41
refactor: Updated lockfile
Apr 16, 2026
f8736b3
refactor: Fixed MockedOperator not being assigned to a Dag
dabla Apr 17, 2026
bc46ad9
Merge branch 'main' into feature/dynamic-task-iteration
dabla Apr 17, 2026
1d42fcf
refactor: Use dag_maker in TestIterableOperator
dabla Apr 17, 2026
50bce34
refactor: Fixed test_exit_retry_boundary in TestTaskExecutor
dabla Apr 17, 2026
3d527b6
refactor: Fixed remaining tests with dag_maker in TestIterableOperator
dabla Apr 17, 2026
200e1d3
refactor: Removed task_concurrency parameter on IterableOperator as i…
dabla Apr 17, 2026
95093d8
refactor: Forgot to add @pytest.fixture(autouse=True) in TestIterable…
dabla Apr 17, 2026
fba2190
refactor: Reformatted files
dabla Apr 17, 2026
5cd8e8f
refactor: Removed pytest.fixture annotations on parametrized tests
dabla Apr 17, 2026
b7bd934
refactor: Added Dynamic Task Partitioning
dabla Apr 17, 2026
155ea61
refactor: Fixed import of prevent_duplicates in PartitionedOperator
dabla Apr 17, 2026
9eb6743
refactor: Refactored iter_values in PartitionedOperator to do the par…
dabla Apr 17, 2026
ec57e7f
refactor: Extracted _iterate from _expand
dabla Apr 17, 2026
075b219
refactor: Restored original expand and expand_kwargs method in Mapped…
dabla Apr 20, 2026
1c5355e
refactor: Reformatted files
dabla Apr 21, 2026
182548c
Merge branch 'main' into feature/dynamic-task-iteration
dabla Apr 21, 2026
298cfef
refactor: Reformatted iterate_kwargs in DecoratedPartitionedOperator
dabla Apr 21, 2026
430032a
refactor: Moved import of MappedOperator out of type checking block i…
dabla Apr 21, 2026
b901fe8
refactor: Fixed some static checks
dabla Apr 21, 2026
e174018
refactor: Fixed return types of iterate methods in MappedOperator
dabla Apr 21, 2026
ab46887
refactor: Introduced common abstract PartitionableOperator
dabla Apr 21, 2026
a9849ee
refactor: Make sure _expand method also has apply_upstream_relationsh…
dabla Apr 21, 2026
9f527c0
refactor: Added session fixture in TestIterableOperator
dabla Apr 21, 2026
ea2a696
refactor: Reformatted files
dabla Apr 22, 2026
1c99079
refactor: Set task_concurrency outside partial to avoid validation
dabla Apr 22, 2026
3890b4d
refactor: Replaced pytest.fixture decorators with pytest.mark.db_test…
dabla Apr 22, 2026
2885bbd
refactor: Fixed some docstrings in PartitionableOperator
dabla Apr 23, 2026
b835648
refactor: Return casted operator in iterate and iterate_kwargs
dabla Apr 23, 2026
7a9a261
refactor: Only render templated fields if operator has templated_fiel…
dabla Apr 23, 2026
aa5f40d
refactor: Removed template rendering from TaskExecutor, that should b…
dabla Apr 23, 2026
3e559db
refactor: Make sure context is copied before passing to _unmap_operat…
dabla Apr 23, 2026
211dd27
refactor: Reformatted IterableOperator
dabla Apr 23, 2026
6145338
refactor: Removed unused jinja2 import
dabla Apr 23, 2026
6959bc4
refactor: Explicitly pass empty set to seen_oids when calling _do_ren…
dabla Apr 23, 2026
96d1313
refactor: Ignore core imports check for partitionedoperator in task-sdk
dabla Apr 24, 2026
6cea105
Merge branch 'main' into feature/dynamic-task-iteration
dabla Apr 24, 2026
70cd4c2
refactor: Make sure XComIterable also takes into account map_index wh…
dabla Apr 27, 2026
ee9b29f
refactor: Re-added task_concurrency as valid argument for BaseOperator
dabla Apr 27, 2026
b855be9
refactor: Refactored MappedTaskInstance so we can distinguish map_ind…
dabla Apr 29, 2026
9da9742
refactor: Added PartitionedOperator as well in CODEOWNERS
dabla Apr 29, 2026
512987b
Merge branch 'main' into feature/dynamic-task-iteration
dabla Apr 29, 2026
85f5c3e
refactor: Fixed test_xcom_key_property_returns_xcom_key in TestTaskEx…
dabla Apr 29, 2026
19974bf
refactor: Removed newline
dabla Apr 29, 2026
e760592
Merge branch 'main' into feature/dynamic-task-iteration
dabla Apr 29, 2026
99a2ac3
Merge branch 'main' into feature/dynamic-task-iteration
dabla Apr 30, 2026
e0a47be
refactor: Make sure to also pass index of MappedTaskInstance in case …
dabla May 3, 2026
b5ebb1f
refactor: Fixed TestTaskExecutor instantiation with index instead of …
dabla May 3, 2026
e679c5c
Merge branch 'main' into feature/dynamic-task-iteration
dabla May 3, 2026
b9f7bcf
refactor: Pass index before map_index when creating mapped task from …
dabla May 3, 2026
da6ecf6
refactor: Fixed _make_mapped_ti in TestTaskExecutor so that map_index…
May 4, 2026
a45ecc7
refactor: Make sure index is used instead of map_index when it comes …
dabla May 6, 2026
52f06de
refactor: Fixed tests in TaskExecutor
dabla May 6, 2026
7940aff
refactor: Refactored MappedTaskInstance which now just delegates xcom…
dabla May 6, 2026
3c9194c
Merge branch 'main' into feature/dynamic-task-iteration
dabla May 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,9 @@ Dockerfile.ci @potiuk @ashb @gopidesupavan @amoghrajesh @jscheffl @bugraoz93 @ja
# AIP-72 - Task SDK
# Python SDK
/task-sdk/ @ashb @kaxil @amoghrajesh
/task-sdk/**/executor.py @dabla
/task-sdk/**/iterableoperator.py @dabla
/task-sdk/**/partitionedoperator.py @dabla

# Golang SDK
/go-sdk/ @ashb @amoghrajesh
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -515,6 +515,11 @@ def _(task: SerializedBaseOperator | TaskSDKBaseOperator, run_id: str, *, sessio
def _(task: SerializedMappedOperator | TaskSDKMappedOperator, run_id: str, *, session: Session) -> int:
from airflow.serialization.serialized_objects import BaseSerialization, _ExpandInputRef

partition_size = task.partial_kwargs.get("partition_size")

if partition_size is not None:
return partition_size

exp_input = task._get_specified_expand_input()
# TODO (GH-52141): 'task' here should be scheduler-bound and returns scheduler expand input.
if not hasattr(exp_input, "get_total_map_length"):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2698,6 +2698,7 @@ def test_operator_expand_serde():
"template_ext": [".sh", ".bash"],
"template_fields_renderers": {"bash_command": "bash", "env": "json"},
"ui_color": "#f0ede4",
"_apply_upstream_relationship": True,
"_disallow_kwargs_override": False,
"_expand_input_attr": "expand_input",
}
Expand Down Expand Up @@ -2741,6 +2742,7 @@ def test_operator_expand_xcomarg_serde():
},
"task_id": "task_2",
"template_fields": ["arg1", "arg2"],
"_apply_upstream_relationship": True,
"_disallow_kwargs_override": False,
"_expand_input_attr": "expand_input",
}
Expand Down Expand Up @@ -2796,6 +2798,7 @@ def test_operator_expand_kwargs_literal_serde(strict):
},
"task_id": "task_2",
"template_fields": ["arg1", "arg2"],
"_apply_upstream_relationship": True,
"_disallow_kwargs_override": strict,
"_expand_input_attr": "expand_input",
}
Expand Down Expand Up @@ -2843,6 +2846,7 @@ def test_operator_expand_kwargs_xcomarg_serde(strict):
},
"task_id": "task_2",
"template_fields": ["arg1", "arg2"],
"_apply_upstream_relationship": True,
"_disallow_kwargs_override": strict,
"_expand_input_attr": "expand_input",
}
Expand Down Expand Up @@ -2951,6 +2955,7 @@ def x(arg1, arg2, arg3):
"op_args": "py",
"op_kwargs": "py",
},
"_apply_upstream_relationship": True,
"_disallow_kwargs_override": False,
"_expand_input_attr": "op_kwargs_expand_input",
"python_callable_name": "test_taskflow_expand_serde.<locals>.x",
Expand Down Expand Up @@ -3044,6 +3049,7 @@ def x(arg1, arg2, arg3):
"op_args": "py",
"op_kwargs": "py",
},
"_apply_upstream_relationship": True,
"_disallow_kwargs_override": strict,
"_expand_input_attr": "op_kwargs_expand_input",
}
Expand Down Expand Up @@ -3155,6 +3161,7 @@ def operator_extra_links(self):
"partial_kwargs": {
"retry_delay": {"__type": "timedelta", "__var": 300.0},
},
"_apply_upstream_relationship": True,
"_disallow_kwargs_override": False,
"_expand_input_attr": "expand_input",
"_operator_extra_links": {"airflow": "_link_AirflowLink2"},
Expand Down
19 changes: 17 additions & 2 deletions devel-common/src/tests_common/test_utils/mock_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,29 @@
from typing import TYPE_CHECKING, Any
from unittest import mock

from airflow.models import DagRun
from airflow.utils.types import DagRunType

from tests_common.test_utils.compat import Context
from tests_common.test_utils.taskinstance import create_task_instance
from tests_common.test_utils.version_compat import AIRFLOW_V_3_0_PLUS, AIRFLOW_V_3_1_PLUS

if AIRFLOW_V_3_1_PLUS:
from airflow.sdk import timezone
else:
from airflow.utils import timezone # type: ignore[attr-defined,no-redef]

if TYPE_CHECKING:
from sqlalchemy.orm import Session


def mock_context(task) -> Context:
def generate_run_id() -> str:
if AIRFLOW_V_3_0_PLUS:
return DagRun.generate_run_id(run_type=DagRunType.MANUAL, run_after=timezone.utcnow())
return DagRun.generate_run_id(run_type=DagRunType.MANUAL, execution_date=timezone.utcnow()) # type: ignore[call-arg]


def mock_context(task, run_id: str | None = None) -> Context:
from airflow.models import TaskInstance
from airflow.utils.session import NEW_SESSION

Expand Down Expand Up @@ -64,6 +79,6 @@ def xcom_push(self, key: str, value: Any, session: Session = NEW_SESSION, **kwar
values[key] = value

values["ti"] = create_task_instance(task, dag_version_id=mock.MagicMock(), ti_type=MockedTaskInstance)
values["run_id"] = generate_run_id() if run_id is None else run_id

# See https://github.com/python/mypy/issues/8890 - mypy does not support passing typed dict to TypedDict
return Context(values) # type: ignore[misc]
2 changes: 2 additions & 0 deletions task-sdk/.pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@ repos:
^src/airflow/sdk/definitions/asset/__init__\.py$|
^src/airflow/sdk/definitions/asset/decorators\.py$|
^src/airflow/sdk/definitions/taskgroup\.py$|
^src/airflow/sdk/definitions/iterableoperator\.py$|
^src/airflow/sdk/definitions/mappedoperator\.py$|
^src/airflow/sdk/definitions/partitionedoperator\.py$|
^src/airflow/sdk/definitions/deadline\.py$|
^src/airflow/sdk/definitions/dag\.py$|
^src/airflow/sdk/definitions/_internal/types\.py$|
Expand Down
2 changes: 1 addition & 1 deletion task-sdk/docs/deferred-vs-async-operators.rst
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ concurrently using ``asyncio.gather`` while limiting concurrency with a semaphor

.. note::

The upcoming *Dynamic Task Iteration* feature will simplify patterns like this.
The new :ref:`Dynamic Task Iteration <sdk-dynamic-task-mapping-vs-iteration>`. feature will simplify patterns like this.
Instead of manually managing concurrency with constructs such as
``asyncio.gather`` and ``asyncio.Semaphore``, authors will be able to iterate
over asynchronous results directly in downstream tasks while still benefiting
Expand Down
Loading
Loading