[ 
https://issues.apache.org/jira/browse/AIRFLOW-1252?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sergio Herrera updated AIRFLOW-1252:
------------------------------------
                Flags: Important
    Affects Version/s: 2.0.0
                       1.10.0
                       1.9.0
          Description: 
When someones calls to the endpoint _POST 
<host>:<port>/api/experimental/dags/<dag_id>/dag_runs {}_, Airflow never run 
that request if the body of that contains _conf_.
 This occurs due to a mismatch between types when calling function 
_trigger_dag()_, which is also used by *CLI*. That function perform a 
_json.loads(conf)_ because from CLI the type of conf is _string_, but, in the 
other side, from *experimental API*, that type is _dict_ (because _Json_ is 
processed before to get all data, such as execution_date).

There are two possibilities:
 1. Look for every use of _trigger_dag()_ function and put _Json_ formatting 
from outside the function.
 2. In the *experimental API*, put the conf in a string (with _json.dumps()_) 
to allow _trigger_dag()_ transform into _dict_.

I have implemented the second option, so I can make a PR with that if you want.

Thank you a lot

EDIT: Also, there are no tests which uses conf in the Json passed through 
request currently.

Examples:
 - Before fix:
{{POST /api/experimental/dags/test_conf/dag_runs HTTP/1.1}}
{{Content-Type: application/json}}
{{{}}
{{  "conf": {}}
{{    \"k1\": \"v1\",}}
{{    \"k2\": \"v2\",}}{{  }}
{{    \"k3\": {{[\"av1\", \"av2\", \"av3\"]}},}}{{  }}
{{    \"k4\": }}{{{ }}
{{      \"sk1\": \"sv1\",}}
{{       \"sk2\": \"sv2\" }}
{{    }}}
{{  }}}
{{ }}}

 - After fix:
{{POST /api/experimental/dags/test_conf/dag_runs HTTP/1.1}}
{{Content-Type: application/json}}{{ }}
{{{}}{{ }}
{{  "conf": {}}
{{    "k1": "v1",}}
{{    "k2": "v2",}}{{  }}
{{    "k3": {{["av1", "av2", "av3"]}},}}{{  }}
{{    "k4": }}{{{ }}
{{      "sk1": "sv1", }}
{{      "sk2": "sv2" }}
{{    }}}
{{  }}}
{{}}}

 

  was:
When someones calls to the endpoint _POST 
<host>:<port>/api/experimental/dags/<dag_id>/dag_runs {}_, Airflow never run 
that request if the body of that contains _conf_.
This occurs due to a mismatch between types when calling function 
_trigger_dag()_, which is also used by *CLI*. That function perform a 
_json.loads(conf)_ because from CLI the type of conf is _string_, but, in the 
other side, from *experimental API*, that type is _dict_ (because _Json_ is 
processed before to get all data, such as execution_date).

There are two possibilities:
1. Look for every use of _trigger_dag()_ function and put _Json_ formatting 
from outside the function.
2. In the *experimental API*, put the conf in a string (with _json.dumps()_) to 
allow _trigger_dag()_ transform into _dict_.

I have implemented the second option, so I can make a PR with that if you want.

Thank you a lot

EDIT: Also, there are no tests which uses conf in the Json passed through 
request currently.


> Experimental API - exception when conf is present in JSON body
> --------------------------------------------------------------
>
>                 Key: AIRFLOW-1252
>                 URL: https://issues.apache.org/jira/browse/AIRFLOW-1252
>             Project: Apache Airflow
>          Issue Type: Bug
>          Components: api
>    Affects Versions: Airflow 1.8, 1.8.1, 1.9.0, 1.10.0, 2.0.0
>            Reporter: Sergio Herrera
>            Assignee: Sergio Herrera
>            Priority: Major
>              Labels: api
>
> When someones calls to the endpoint _POST 
> <host>:<port>/api/experimental/dags/<dag_id>/dag_runs {}_, Airflow never run 
> that request if the body of that contains _conf_.
>  This occurs due to a mismatch between types when calling function 
> _trigger_dag()_, which is also used by *CLI*. That function perform a 
> _json.loads(conf)_ because from CLI the type of conf is _string_, but, in the 
> other side, from *experimental API*, that type is _dict_ (because _Json_ is 
> processed before to get all data, such as execution_date).
> There are two possibilities:
>  1. Look for every use of _trigger_dag()_ function and put _Json_ formatting 
> from outside the function.
>  2. In the *experimental API*, put the conf in a string (with _json.dumps()_) 
> to allow _trigger_dag()_ transform into _dict_.
> I have implemented the second option, so I can make a PR with that if you 
> want.
> Thank you a lot
> EDIT: Also, there are no tests which uses conf in the Json passed through 
> request currently.
> Examples:
>  - Before fix:
> {{POST /api/experimental/dags/test_conf/dag_runs HTTP/1.1}}
> {{Content-Type: application/json}}
> {{{}}
> {{  "conf": {}}
> {{    \"k1\": \"v1\",}}
> {{    \"k2\": \"v2\",}}{{  }}
> {{    \"k3\": {{[\"av1\", \"av2\", \"av3\"]}},}}{{  }}
> {{    \"k4\": }}{{{ }}
> {{      \"sk1\": \"sv1\",}}
> {{       \"sk2\": \"sv2\" }}
> {{    }}}
> {{  }}}
> {{ }}}
>  - After fix:
> {{POST /api/experimental/dags/test_conf/dag_runs HTTP/1.1}}
> {{Content-Type: application/json}}{{ }}
> {{{}}{{ }}
> {{  "conf": {}}
> {{    "k1": "v1",}}
> {{    "k2": "v2",}}{{  }}
> {{    "k3": {{["av1", "av2", "av3"]}},}}{{  }}
> {{    "k4": }}{{{ }}
> {{      "sk1": "sv1", }}
> {{      "sk2": "sv2" }}
> {{    }}}
> {{  }}}
> {{}}}
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to