You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by GitBox <gi...@apache.org> on 2022/02/24 04:15:54 UTC

[GitHub] [airflow] josh-fell commented on issue #21765: Unable to pass parameters which aren’t strings while triggering external data in airflow 2.1.4

josh-fell commented on issue #21765:
URL: https://github.com/apache/airflow/issues/21765#issuecomment-1049478442


   Starting with Airflow 2.1, there was a new parameter introduced called `render_template_as_native_obj` which will render templated values as native Python types rather than strings or stringified versions of native types. You can check out more info in the [Operator concepts documentation](https://airflow.apache.org/docs/apache-airflow/stable/concepts/operators.html#rendering-fields-as-native-python-objects).
   
   Let's take the below DAGs as an example.
   ```python
   from pendulum import datetime
   from typing import Dict
   
   from airflow.decorators import dag, task
   from airflow.models import DAG
   from airflow.operators.trigger_dagrun import TriggerDagRunOperator
   
   # DAG performing the triggering of another.
   @dag(
       dag_id="parent_dag",
       start_date=datetime(2021, 1, 1),
       schedule_interval=None,
       render_template_as_native_obj=True
   )
   def parent_dag():
       @task
       def xcom_push() -> Dict:
           return {
               "gcs_bucket": "my_bucket",
               "gcs_objects_list": [1, 2, 3],
               "bq_auto_detect_schema": True,
               "bq_schema": None,
           }
   
       t = xcom_push()
   
       trigger_child_dag = TriggerDagRunOperator(
           task_id="trigger_child_dag",
           trigger_dag_id="child_dag",
           conf={
               "gcs_bucket": "{{ ti.xcom_pull(key='gcs_bucket', task_ids='xcom_push') }}",
               "gcs_objects_list": "{{ ti.xcom_pull(key='gcs_objects_list', task_ids='xcom_push') }}",
               "bq_auto_detect_schema": "{{ ti.xcom_pull(key='bq_auto_detect_schema', task_ids='xcom_push') }}",
               "bq_schema": "{{ ti.xcom_pull(key='bq_schema', task_ids='xcom_push') }}",
           },
           retries=1,
       )
   
       t >> trigger_child_dag
   
   
   _parent_dag = parent_dag()
   
   # DAG to be triggered.
   @dag(
       start_date=datetime(2021, 1, 1),
       schedule_interval=None,
   )
   def child_dag():
       @task
       def get_trigger_conf(dag_run=None):
           from pprint import pprint
   
           pprint(dag_run.conf)
   
       t = get_trigger_conf()
   
   
   _child_dag = child_dag()
   ```
   
   When the `child_dag` is triggered, the output printed from the "get_trigger_conf" task is:
   <img width="710" alt="image" src="https://user-images.githubusercontent.com/48934154/155456720-5a4bb9f0-c672-4529-82dd-2a9393318d17.png">
   
   Notice that the values for `gcs_bucket`, `gcs_objects_list`, `bq_auto_detect_schema`, and `bq_schema` are native Python types rather than the stringified versions that you are running into now.
   
   Can you try setting `render_template_as_native_obj=True` on the triggering DAG and see if this helps? I ran the above example on 2.1.4 and using the `main` branch with the same result so hopefully this works for you as well.


-- 
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