Sangun-Lee-6 opened a new pull request, #66617:
URL: https://github.com/apache/airflow/pull/66617
<!-- SPDX-License-Identifier: Apache-2.0
https://www.apache.org/licenses/LICENSE-2.0 -->
<!--
Thank you for contributing!
Please provide above a brief description of the changes made in this pull
request.
Write a good git commit message following this guide:
http://chris.beams.io/posts/git-commit/
Please make sure that your code changes are covered with tests.
And in case of new features or big changes remember to adjust the
documentation.
Feel free to ping (in general) for the review if you do not see reaction for
a few days
(72 Hours is the minimum reaction time you can expect from volunteers) - we
sometimes miss notifications.
In case of an existing issue, reference it using one of the following:
* closes: #ISSUE
* related: #ISSUE
-->
## Problem
`airflow dags trigger --conf` currently accepts any value that is valid JSON.
This means values such as arrays, strings, numbers, and booleans can be
accepted by the CLI:
```bash
airflow dags trigger example --conf='[1]'
airflow dags trigger example --conf='"value"'
airflow dags trigger example --conf='1'
```
This is inconsistent with the REST API, where `conf` is validated as `dict |
None`.
Allowing non-object JSON values into `DagRun.conf` can cause runtime issues
later, because downstream code commonly treats `dag_run.conf` as a mapping, for
example: `dag_run.conf.get(...)`
## Problematic Code
The issue was in `airflow.api.common.trigger_dag._trigger_dag()`.
The previous logic used a truthiness check:
```Python
run_conf = None
if conf:
run_conf = conf if isinstance(conf, dict) else json.loads(conf)
```
This made it hard to distinguish between:
- `conf` not being provided
- an empty JSON object: `{}`
- an explicit JSON `null`
- invalid JSON
- valid JSON with the wrong type, such as `[]`, `"str"`, `1`, or `false`
It also parsed JSON strings without validating that the parsed value was a
JSON object or `null`.
## Solution
This PR updates the common Dag trigger path to normalize and validate conf
explicitly.
The new behavior is:
- omitted `conf` keeps the existing default behavior
- `{}` is accepted
- JSON `null` is accepted
- invalid JSON is rejected
- valid JSON values that are not objects or `null` are rejected with a clear
error
The implementation uses Airflow’s existing `NOTSET` sentinel pattern to
distinguish an omitted `conf` argument from an explicitly provided value. After
parsing string input with `json.loads()`, the result is validated so only
`dict` or `None` is accepted.
CLI tests were added to cover:
- empty object `conf`
- JSON `null` `conf`
- invalid JSON
- non-object JSON values such as arrays, strings, numbers, and booleans
---
##### Was generative AI tooling used to co-author this PR?
<!--
If generative AI tooling has been used in the process of authoring this PR,
please
change below checkbox to `[X]` followed by the name of the tool, uncomment
the "Generated-by".
-->
- [x] Yes
Generated-by: [GPT 5.5] following [the
guidelines](https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#gen-ai-assisted-contributions)
---
* Read the **[Pull Request
Guidelines](https://github.com/apache/airflow/blob/main/contributing-docs/05_pull_requests.rst#pull-request-guidelines)**
for more information. Note: commit author/co-author name and email in commits
become permanently public when merged.
* For fundamental code changes, an Airflow Improvement Proposal
([AIP](https://cwiki.apache.org/confluence/display/AIRFLOW/Airflow+Improvement+Proposals))
is needed.
* When adding dependency, check compliance with the [ASF 3rd Party License
Policy](https://www.apache.org/legal/resolved.html#category-x).
* For significant user-facing changes create newsfragment:
`{pr_number}.significant.rst`, in
[airflow-core/newsfragments](https://github.com/apache/airflow/tree/main/airflow-core/newsfragments).
You can add this file in a follow-up commit after the PR is created so you
know the PR number.
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]