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

uranusjr 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 cc1e8c8c0b7 docs(task-sdk): add and link dynamic task mapping docs 
(#51871)
cc1e8c8c0b7 is described below

commit cc1e8c8c0b74406564ccf82e4edf1729180a1f5a
Author: Ankit Chaurasia <[email protected]>
AuthorDate: Mon Jun 23 12:45:20 2025 +0545

    docs(task-sdk): add and link dynamic task mapping docs (#51871)
    
    Co-authored-by: Tzu-ping Chung <[email protected]>
---
 task-sdk/docs/conf.py                  |  1 +
 task-sdk/docs/dynamic-task-mapping.rst | 99 ++++++++++++++++++++++++++++++++++
 task-sdk/docs/index.rst                |  1 +
 3 files changed, 101 insertions(+)

diff --git a/task-sdk/docs/conf.py b/task-sdk/docs/conf.py
index e3fbacae2ce..67cbda55f58 100644
--- a/task-sdk/docs/conf.py
+++ b/task-sdk/docs/conf.py
@@ -58,6 +58,7 @@ autodoc_typehints = "description"
 autoapi_file_patterns = ["*.pyi", "*.py"]
 
 html_theme = "sphinx_airflow_theme"
+html_sidebars = {"**": ["localtoc.html", "globaltoc.html", "searchbox.html", 
"relations.html"]}
 
 
 global_substitutions = {
diff --git a/task-sdk/docs/dynamic-task-mapping.rst 
b/task-sdk/docs/dynamic-task-mapping.rst
new file mode 100644
index 00000000000..84481bffcac
--- /dev/null
+++ b/task-sdk/docs/dynamic-task-mapping.rst
@@ -0,0 +1,99 @@
+ .. Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+ ..   http://www.apache.org/licenses/LICENSE-2.0
+
+ .. Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+.. _sdk-dynamic-task-mapping:
+
+Dynamic Task Mapping with Task SDK
+==================================
+
+Dynamic Task Mapping allows tasks defined with the Task SDK to generate
+a variable number of task instances at runtime based on upstream data.
+This is enabled via the ``expand()`` method on tasks, providing a way
+to parallelize execution without knowing the number of tasks ahead of time.
+
+Simple Mapping
+--------------
+
+Map over a Python list directly in the DAG:
+
+.. code-block:: python
+
+   from datetime import datetime
+
+   from airflow.sdk import DAG, task
+
+
+   @task
+   def add_one(x: int):
+       return x + 1
+
+
+   @task
+   def sum_it(values: list[int]):
+       print(f"Total was {sum(values)}")
+
+
+   with DAG(dag_id="dynamic-map-simple", start_date=datetime(2022, 1, 1)) as 
dag:
+       summed = sum_it(values=add_one.expand(x=[1, 2, 3, 4, 5]))
+
+Task-Generated Mapping
+----------------------
+
+Generate the list at runtime from an upstream task:
+
+.. code-block:: python
+
+   @task
+   def make_list():
+       # This could fetch data from an API, database, etc.
+       return ["a", "b", "c"]
+
+
+   @task
+   def consume(item: str):
+       print(item)
+
+
+   with DAG(dag_id="dynamic-map-generated", start_date=datetime(2022, 1, 1)) 
as dag:
+       consume.expand(item=make_list())
+
+Details
+-----------
+
+- Only keyword arguments can be passed to ``expand()``.
+- Mapped inputs are provided to tasks as lazy proxy objects. To force
+  evaluation into a concrete list, wrap the proxy in ``list()``.
+- Combine static parameters with mapped ones using ``partial()``:
+
+  .. code-block:: python
+
+     @task
+     def add(x: int, y: int):
+         return x + y
+
+
+     with DAG(dag_id="map-with-partial", start_date=datetime(2022, 1, 1)) as 
dag:
+         add.partial(y=10).expand(x=[1, 2, 3])
+
+Advanced Usage
+--------------
+
+For advanced patterns—such as repeated mapping, cross-product mapping,
+named mappings (via ``map_index_template``), and handling large
+datasets—see the Airflow Core documentation:
+
+`Dynamic Task Mapping in the Airflow Core docs 
<https://airflow.apache.org/docs/apache-airflow/stable/authoring-and-scheduling/dynamic-task-mapping.html>`_.
diff --git a/task-sdk/docs/index.rst b/task-sdk/docs/index.rst
index 6ff3650b587..24410cd4ece 100644
--- a/task-sdk/docs/index.rst
+++ b/task-sdk/docs/index.rst
@@ -88,4 +88,5 @@ Refer to :doc:`api` for the complete reference of all 
decorators and classes.
   :hidden:
 
   examples
+  dynamic-task-mapping
   api

Reply via email to