You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by "jcobb-healx (via GitHub)" <gi...@apache.org> on 2023/02/03 14:40:06 UTC

[GitHub] [airflow] jcobb-healx opened a new issue, #29358: Cannot use TypedDict object when defining params

jcobb-healx opened a new issue, #29358:
URL: https://github.com/apache/airflow/issues/29358

   ### Apache Airflow version
   
   2.5.1
   
   ### What happened
   
   Context: I am attempting to use [TypedDict](https://docs.python.org/3/library/typing.html#typing.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
   
   ```Python
   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:
       pass
   ```
   
   ### Operating 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?
   
   - [X] Yes I am willing to submit a PR!
   
   ### Code of Conduct
   
   - [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [airflow] pierrejeambrun commented on issue #29358: Cannot use TypedDict object when defining params

Posted by "pierrejeambrun (via GitHub)" <gi...@apache.org>.
pierrejeambrun commented on issue #29358:
URL: https://github.com/apache/airflow/issues/29358#issuecomment-1445166734

   @jcobb-healx Are you still working on this ?


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [airflow] jcobb-healx commented on issue #29358: Cannot use TypedDict object when defining params

Posted by "jcobb-healx (via GitHub)" <gi...@apache.org>.
jcobb-healx commented on issue #29358:
URL: https://github.com/apache/airflow/issues/29358#issuecomment-1446280306

   @pierrejeambrun I've made the changes to use `MutableMapping` so that passing in a `ParamsDict` object works as expected. I've not changed anything that would allow my original case to work, so I've made no mention of `TypedDict` in the PR


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [airflow] boring-cyborg[bot] commented on issue #29358: Cannot use TypedDict object when defining params

Posted by "boring-cyborg[bot] (via GitHub)" <gi...@apache.org>.
boring-cyborg[bot] commented on issue #29358:
URL: https://github.com/apache/airflow/issues/29358#issuecomment-1415962009

   Thanks for opening your first issue here! Be sure to follow the issue template!
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [airflow] potiuk commented on issue #29358: Cannot use TypedDict object when defining params

Posted by "potiuk (via GitHub)" <gi...@apache.org>.
potiuk commented on issue #29358:
URL: https://github.com/apache/airflow/issues/29358#issuecomment-1416062014

   Feel free to work on it.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [airflow] jcobb-healx commented on issue #29358: Cannot use TypedDict object when defining params

Posted by "jcobb-healx (via GitHub)" <gi...@apache.org>.
jcobb-healx commented on issue #29358:
URL: https://github.com/apache/airflow/issues/29358#issuecomment-1446254058

   @pierrejeambrun Sorry, I hadn't gotten around to looking at this. Spent a bit of time on this today, and it looks like converting the type hint to `Mapping` isn't right, as the `params` are merged with the default params in an [`update` call](https://github.com/apache/airflow/blob/a5adb87ab4ee537eb37ef31aba755b40f6f29a1e/airflow/models/dag.py#L430), which isn't consistent with `TypedDict` behaviour.
   Given the earlier `mypy` discussion, it probably makes sense to use `MutableMapping` to allow generic inputs, and let users perform casts, i.e. _not_ accept `TypedDict` objects.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [airflow] jcobb-healx commented on issue #29358: Cannot use TypedDict object when defining params

Posted by "jcobb-healx (via GitHub)" <gi...@apache.org>.
jcobb-healx commented on issue #29358:
URL: https://github.com/apache/airflow/issues/29358#issuecomment-1416034175

   Relevant mypy discussion on passing `TypedDict` as args annotated with `Dict`: https://github.com/python/mypy/issues/4976


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [airflow] potiuk closed issue #29358: Cannot use TypedDict object when defining params

Posted by "potiuk (via GitHub)" <gi...@apache.org>.
potiuk closed issue #29358: Cannot use TypedDict object when defining params
URL: https://github.com/apache/airflow/issues/29358


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org