-
Notifications
You must be signed in to change notification settings - Fork 16.4k
Closed
Labels
affected_version:2.5Issues Reported for 2.5Issues Reported for 2.5area:coregood first issuekind:bugThis is a clearly a bugThis is a clearly a bug
Description
Apache Airflow version
2.5.1
What happened
Context: I am attempting to use TypedDict objects to maintain the keys used in DAG params in a single place, and check for key names across multiple DAGs that use the params.
This raises an error with mypy as params expects an Optional[Dict]. Due to the invariance of Dict, this does not accept TypedDict objects.
What happened: I passed a TypedDict to the params arg of DAG and got a TypeError.
What you think should happen instead
TypedDict objects should be accepted by DAG, which should accept Optional[Mapping[str, Any]].
Unless I'm mistaken, params are converted to a ParamsDict class and therefore the appropriate type hint is a generic Mapping type.
How to reproduce
Steps to reproduce
from typing import TypedDict
from airflow import DAG
from airflow.models import Param
class ParamsTypedDict(TypedDict):
str_param: Param
params: ParamsTypedDict = {
"str_param": Param("", type="str")
}
with DAG(
dag_id="mypy-error-dag",
# The line below raises a mypy error
# Argument "params" to "DAG" has incompatible type "ParamsTypedDict"; expected "Optional[Dict[Any, Any]]" [arg-type]
params=params,
) as dag:
passOperating System
Amazon Linux
Versions of Apache Airflow Providers
No response
Deployment
Docker-Compose
Deployment details
No response
Anything else
No response
Are you willing to submit PR?
- Yes I am willing to submit a PR!
Code of Conduct
- I agree to follow this project's Code of Conduct
Metadata
Metadata
Assignees
Labels
affected_version:2.5Issues Reported for 2.5Issues Reported for 2.5area:coregood first issuekind:bugThis is a clearly a bugThis is a clearly a bug