Skip to content

default_args feature incompatible with Dynamic Task Mapping #29366

@m1racoli

Description

@m1racoli

Apache Airflow version

2.5.1

What happened

We use default_args to configure common parameters across our Airflow deployments. Some of those parameters are specific to certain operators or a group of operators.

When we use dynamic task mapping in addition to our default_args the DAG fails to parse.

What you think should happen instead

The DAG should success to parse.

How to reproduce

The DAG

from typing import List

from airflow import DAG
from airflow.decorators import task
from airflow.operators.bash import BashOperator
from airflow.utils.dates import days_ago

default_args = dict(
    start_date=days_ago(1),
    use_legacy_sql=False,
    something="else",
)


@task
def get_commands() -> List[str]:
    return [
        "echo hello",
        "echo world",
    ]


with DAG(
    "test_default_args",
    default_args=default_args,
    schedule=None,
) as dag:
    commands = get_commands()

    BashOperator.partial(
        task_id="run_bash",
    ).expand(
        bash_command=commands,
    )

will result in the following error

Broken DAG: [/usr/local/airflow/dags/test_dynamic_args.py] Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/airflow/models/mappedoperator.py", line 149, in __attrs_post_init__
    validate_mapping_kwargs(self.operator_class, "partial", self.kwargs)
  File "/usr/local/lib/python3.9/site-packages/airflow/models/mappedoperator.py", line 109, in validate_mapping_kwargs
    raise TypeError(f"{op.__name__}.{func}() got {error}")
TypeError: BashOperator.partial() got unexpected keyword arguments 'use_legacy_sql', 'something'

Operating System

Debian GNU/Linux 11 (bullseye)

Versions of Apache Airflow Providers

apache-airflow-providers-amazon==6.2.0
apache-airflow-providers-apache-hive==5.1.1
apache-airflow-providers-apache-livy==3.2.0
apache-airflow-providers-celery==3.1.0
apache-airflow-providers-cncf-kubernetes==5.1.1
apache-airflow-providers-common-sql==1.3.3
apache-airflow-providers-databricks==4.0.0
apache-airflow-providers-dbt-cloud==2.3.1
apache-airflow-providers-elasticsearch==4.3.3
apache-airflow-providers-ftp==3.3.0
apache-airflow-providers-google==8.8.0
apache-airflow-providers-http==4.1.1
apache-airflow-providers-imap==3.1.1
apache-airflow-providers-microsoft-azure==5.1.0
apache-airflow-providers-postgres==5.4.0
apache-airflow-providers-redis==3.1.0
apache-airflow-providers-sftp==4.2.1
apache-airflow-providers-snowflake==4.0.2
apache-airflow-providers-sqlite==3.3.1
apache-airflow-providers-ssh==3.4.0

Deployment

Astronomer

Deployment details

We use Astronomer Runtime 7.2.0.

Anything else

No response

Are you willing to submit PR?

  • Yes I am willing to submit a PR!

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions