This is an automated email from the ASF dual-hosted git repository.
ephraimanierobi pushed a commit to branch v3-1-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
commit 3b92bdf942962aa1fafed6cd480e5386fceb3bed
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Sat Nov 1 19:32:10 2025 +0100
[v3-1-test] Refactor trigger method (#57678) (#57687)
(cherry picked from commit 974a37be00c3f4787b185ecb40bfceb0478ea42b)
Co-authored-by: Bugra Ozturk <[email protected]>
---
airflow-ctl/docs/images/command_hashes.txt | 4 +-
airflow-ctl/docs/images/output_dagrun.svg | 70 ++++++-------
airflow-ctl/docs/images/output_dags.svg | 114 +++++++++++----------
airflow-ctl/src/airflowctl/api/operations.py | 28 ++---
.../tests/airflow_ctl/api/test_operations.py | 61 ++++++++---
5 files changed, 155 insertions(+), 122 deletions(-)
diff --git a/airflow-ctl/docs/images/command_hashes.txt
b/airflow-ctl/docs/images/command_hashes.txt
index 80a7ac0cbf4..1a017304f15 100644
--- a/airflow-ctl/docs/images/command_hashes.txt
+++ b/airflow-ctl/docs/images/command_hashes.txt
@@ -4,8 +4,8 @@ auth:f396d4bce90215599dde6ad0a8f30f29
backfill:bbce9859a2d1ce054ad22db92dea8c05
config:cb175bedf29e8a2c2c6a2ebd13d770a7
connections:a16225e1c7d28488d0da612752669b4b
-dags:6928d0192e95fde5b0c092e0ea5a0703
-dagrun:ec1b6098822419967e621687bd7e5e4b
+dags:4c2ae65c76b32efcd86b5fd0c1831a2e
+dagrun:f47ed2a89ed0f8c71f79dba53a3a3882
jobs:7f8680afff230eb9940bc7fca727bd52
pools:03fc7d948cbecf16ff8d640eb8f0ce43
providers:1c0afb2dff31d93ab2934b032a2250ab
diff --git a/airflow-ctl/docs/images/output_dagrun.svg
b/airflow-ctl/docs/images/output_dagrun.svg
index f668da30299..a56fba6d5e5 100644
--- a/airflow-ctl/docs/images/output_dagrun.svg
+++ b/airflow-ctl/docs/images/output_dagrun.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 811 342.79999999999995"
xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 811 318.4"
xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -19,86 +19,82 @@
font-weight: 700;
}
- .terminal-3012060912-matrix {
+ .terminal-894902431-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
- .terminal-3012060912-title {
+ .terminal-894902431-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
- .terminal-3012060912-r1 { fill: #ff8700 }
-.terminal-3012060912-r2 { fill: #c5c8c6 }
-.terminal-3012060912-r3 { fill: #808080 }
-.terminal-3012060912-r4 { fill: #68a0b3 }
+ .terminal-894902431-r1 { fill: #ff8700 }
+.terminal-894902431-r2 { fill: #c5c8c6 }
+.terminal-894902431-r3 { fill: #808080 }
+.terminal-894902431-r4 { fill: #68a0b3 }
</style>
<defs>
- <clipPath id="terminal-3012060912-clip-terminal">
- <rect x="0" y="0" width="792.0" height="291.79999999999995" />
+ <clipPath id="terminal-894902431-clip-terminal">
+ <rect x="0" y="0" width="792.0" height="267.4" />
</clipPath>
- <clipPath id="terminal-3012060912-line-0">
+ <clipPath id="terminal-894902431-line-0">
<rect x="0" y="1.5" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3012060912-line-1">
+<clipPath id="terminal-894902431-line-1">
<rect x="0" y="25.9" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3012060912-line-2">
+<clipPath id="terminal-894902431-line-2">
<rect x="0" y="50.3" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3012060912-line-3">
+<clipPath id="terminal-894902431-line-3">
<rect x="0" y="74.7" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3012060912-line-4">
+<clipPath id="terminal-894902431-line-4">
<rect x="0" y="99.1" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3012060912-line-5">
+<clipPath id="terminal-894902431-line-5">
<rect x="0" y="123.5" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3012060912-line-6">
+<clipPath id="terminal-894902431-line-6">
<rect x="0" y="147.9" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3012060912-line-7">
+<clipPath id="terminal-894902431-line-7">
<rect x="0" y="172.3" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3012060912-line-8">
+<clipPath id="terminal-894902431-line-8">
<rect x="0" y="196.7" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3012060912-line-9">
+<clipPath id="terminal-894902431-line-9">
<rect x="0" y="221.1" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3012060912-line-10">
- <rect x="0" y="245.5" width="793" height="24.65"/>
- </clipPath>
</defs>
- <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="809" height="340.8" rx="8"/>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="809" height="316.4" rx="8"/>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
<circle cx="44" cy="0" r="7" fill="#28c840"/>
</g>
- <g transform="translate(9, 41)"
clip-path="url(#terminal-3012060912-clip-terminal)">
+ <g transform="translate(9, 41)"
clip-path="url(#terminal-894902431-clip-terminal)">
- <g class="terminal-3012060912-matrix">
- <text class="terminal-3012060912-r1" x="0" y="20" textLength="73.2"
clip-path="url(#terminal-3012060912-line-0)">Usage:</text><text
class="terminal-3012060912-r3" x="85.4" y="20" textLength="207.4"
clip-path="url(#terminal-3012060912-line-0)">airflowctl dagrun</text><text
class="terminal-3012060912-r2" x="292.8" y="20" textLength="24.4"
clip-path="url(#terminal-3012060912-line-0)"> [</text><text
class="terminal-3012060912-r4" x="317.2" y="20" textLength="24.4" clip-path="ur
[...]
-</text><text class="terminal-3012060912-r2" x="793" y="44.4" textLength="12.2"
clip-path="url(#terminal-3012060912-line-1)">
-</text><text class="terminal-3012060912-r2" x="0" y="68.8" textLength="305"
clip-path="url(#terminal-3012060912-line-2)">Perform DagRun operations</text><text
class="terminal-3012060912-r2" x="793" y="68.8" textLength="12.2"
clip-path="url(#terminal-3012060912-line-2)">
-</text><text class="terminal-3012060912-r2" x="793" y="93.2" textLength="12.2"
clip-path="url(#terminal-3012060912-line-3)">
-</text><text class="terminal-3012060912-r1" x="0" y="117.6" textLength="256.2"
clip-path="url(#terminal-3012060912-line-4)">Positional Arguments:</text><text
class="terminal-3012060912-r2" x="793" y="117.6" textLength="12.2"
clip-path="url(#terminal-3012060912-line-4)">
-</text><text class="terminal-3012060912-r4" x="24.4" y="142" textLength="85.4"
clip-path="url(#terminal-3012060912-line-5)">COMMAND</text><text
class="terminal-3012060912-r2" x="793" y="142" textLength="12.2"
clip-path="url(#terminal-3012060912-line-5)">
-</text><text class="terminal-3012060912-r4" x="48.8" y="166.4"
textLength="36.6" clip-path="url(#terminal-3012060912-line-6)">get</text><text
class="terminal-3012060912-r2" x="170.8" y="166.4" textLength="256.2"
clip-path="url(#terminal-3012060912-line-6)">Perform get operation</text><text
class="terminal-3012060912-r2" x="793" y="166.4" textLength="12.2"
clip-path="url(#terminal-3012060912-line-6)">
-</text><text class="terminal-3012060912-r4" x="48.8" y="190.8"
textLength="48.8" clip-path="url(#terminal-3012060912-line-7)">list</text><text
class="terminal-3012060912-r2" x="170.8" y="190.8" textLength="268.4"
clip-path="url(#terminal-3012060912-line-7)">Perform list operation</text><text
class="terminal-3012060912-r2" x="793" y="190.8" textLength="12.2"
clip-path="url(#terminal-3012060912-line-7)">
-</text><text class="terminal-3012060912-r4" x="48.8" y="215.2"
textLength="85.4"
clip-path="url(#terminal-3012060912-line-8)">trigger</text><text
class="terminal-3012060912-r2" x="170.8" y="215.2" textLength="305"
clip-path="url(#terminal-3012060912-line-8)">Perform trigger operation</text><text
class="terminal-3012060912-r2" x="793" y="215.2" textLength="12.2"
clip-path="url(#terminal-3012060912-line-8)">
-</text><text class="terminal-3012060912-r2" x="793" y="239.6"
textLength="12.2" clip-path="url(#terminal-3012060912-line-9)">
-</text><text class="terminal-3012060912-r1" x="0" y="264" textLength="97.6"
clip-path="url(#terminal-3012060912-line-10)">Options:</text><text
class="terminal-3012060912-r2" x="793" y="264" textLength="12.2"
clip-path="url(#terminal-3012060912-line-10)">
-</text><text class="terminal-3012060912-r4" x="24.4" y="288.4"
textLength="24.4" clip-path="url(#terminal-3012060912-line-11)">-h</text><text
class="terminal-3012060912-r2" x="48.8" y="288.4" textLength="24.4"
clip-path="url(#terminal-3012060912-line-11)">, </text><text
class="terminal-3012060912-r4" x="73.2" y="288.4" textLength="73.2"
clip-path="url(#terminal-3012060912-line-11)">--help</text><text
class="terminal-3012060912-r2" x="170.8" y="288.4" textLength="378.2"
clip-path="ur [...]
+ <g class="terminal-894902431-matrix">
+ <text class="terminal-894902431-r1" x="0" y="20" textLength="73.2"
clip-path="url(#terminal-894902431-line-0)">Usage:</text><text
class="terminal-894902431-r3" x="85.4" y="20" textLength="207.4"
clip-path="url(#terminal-894902431-line-0)">airflowctl dagrun</text><text
class="terminal-894902431-r2" x="292.8" y="20" textLength="24.4"
clip-path="url(#terminal-894902431-line-0)"> [</text><text
class="terminal-894902431-r4" x="317.2" y="20" textLength="24.4"
clip-path="url(#term [...]
+</text><text class="terminal-894902431-r2" x="793" y="44.4" textLength="12.2"
clip-path="url(#terminal-894902431-line-1)">
+</text><text class="terminal-894902431-r2" x="0" y="68.8" textLength="305"
clip-path="url(#terminal-894902431-line-2)">Perform DagRun operations</text><text
class="terminal-894902431-r2" x="793" y="68.8" textLength="12.2"
clip-path="url(#terminal-894902431-line-2)">
+</text><text class="terminal-894902431-r2" x="793" y="93.2" textLength="12.2"
clip-path="url(#terminal-894902431-line-3)">
+</text><text class="terminal-894902431-r1" x="0" y="117.6" textLength="256.2"
clip-path="url(#terminal-894902431-line-4)">Positional Arguments:</text><text
class="terminal-894902431-r2" x="793" y="117.6" textLength="12.2"
clip-path="url(#terminal-894902431-line-4)">
+</text><text class="terminal-894902431-r4" x="24.4" y="142" textLength="85.4"
clip-path="url(#terminal-894902431-line-5)">COMMAND</text><text
class="terminal-894902431-r2" x="793" y="142" textLength="12.2"
clip-path="url(#terminal-894902431-line-5)">
+</text><text class="terminal-894902431-r4" x="48.8" y="166.4"
textLength="36.6" clip-path="url(#terminal-894902431-line-6)">get</text><text
class="terminal-894902431-r2" x="170.8" y="166.4" textLength="256.2"
clip-path="url(#terminal-894902431-line-6)">Perform get operation</text><text
class="terminal-894902431-r2" x="793" y="166.4" textLength="12.2"
clip-path="url(#terminal-894902431-line-6)">
+</text><text class="terminal-894902431-r4" x="48.8" y="190.8"
textLength="48.8" clip-path="url(#terminal-894902431-line-7)">list</text><text
class="terminal-894902431-r2" x="170.8" y="190.8" textLength="268.4"
clip-path="url(#terminal-894902431-line-7)">Perform list operation</text><text
class="terminal-894902431-r2" x="793" y="190.8" textLength="12.2"
clip-path="url(#terminal-894902431-line-7)">
+</text><text class="terminal-894902431-r2" x="793" y="215.2" textLength="12.2"
clip-path="url(#terminal-894902431-line-8)">
+</text><text class="terminal-894902431-r1" x="0" y="239.6" textLength="97.6"
clip-path="url(#terminal-894902431-line-9)">Options:</text><text
class="terminal-894902431-r2" x="793" y="239.6" textLength="12.2"
clip-path="url(#terminal-894902431-line-9)">
+</text><text class="terminal-894902431-r4" x="24.4" y="264" textLength="24.4"
clip-path="url(#terminal-894902431-line-10)">-h</text><text
class="terminal-894902431-r2" x="48.8" y="264" textLength="24.4"
clip-path="url(#terminal-894902431-line-10)">, </text><text
class="terminal-894902431-r4" x="73.2" y="264" textLength="73.2"
clip-path="url(#terminal-894902431-line-10)">--help</text><text
class="terminal-894902431-r2" x="170.8" y="264" textLength="378.2"
clip-path="url(#terminal-894 [...]
</text>
</g>
</g>
diff --git a/airflow-ctl/docs/images/output_dags.svg
b/airflow-ctl/docs/images/output_dags.svg
index 73c7b63a48f..496fa8d995c 100644
--- a/airflow-ctl/docs/images/output_dags.svg
+++ b/airflow-ctl/docs/images/output_dags.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 811 586.8"
xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 811 611.1999999999999"
xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -19,126 +19,130 @@
font-weight: 700;
}
- .terminal-3052996798-matrix {
+ .terminal-111300623-matrix {
font-family: Fira Code, monospace;
font-size: 20px;
line-height: 24.4px;
font-variant-east-asian: full-width;
}
- .terminal-3052996798-title {
+ .terminal-111300623-title {
font-size: 18px;
font-weight: bold;
font-family: arial;
}
- .terminal-3052996798-r1 { fill: #ff8700 }
-.terminal-3052996798-r2 { fill: #c5c8c6 }
-.terminal-3052996798-r3 { fill: #808080 }
-.terminal-3052996798-r4 { fill: #68a0b3 }
+ .terminal-111300623-r1 { fill: #ff8700 }
+.terminal-111300623-r2 { fill: #c5c8c6 }
+.terminal-111300623-r3 { fill: #808080 }
+.terminal-111300623-r4 { fill: #68a0b3 }
</style>
<defs>
- <clipPath id="terminal-3052996798-clip-terminal">
- <rect x="0" y="0" width="792.0" height="535.8" />
+ <clipPath id="terminal-111300623-clip-terminal">
+ <rect x="0" y="0" width="792.0" height="560.1999999999999" />
</clipPath>
- <clipPath id="terminal-3052996798-line-0">
+ <clipPath id="terminal-111300623-line-0">
<rect x="0" y="1.5" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-1">
+<clipPath id="terminal-111300623-line-1">
<rect x="0" y="25.9" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-2">
+<clipPath id="terminal-111300623-line-2">
<rect x="0" y="50.3" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-3">
+<clipPath id="terminal-111300623-line-3">
<rect x="0" y="74.7" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-4">
+<clipPath id="terminal-111300623-line-4">
<rect x="0" y="99.1" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-5">
+<clipPath id="terminal-111300623-line-5">
<rect x="0" y="123.5" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-6">
+<clipPath id="terminal-111300623-line-6">
<rect x="0" y="147.9" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-7">
+<clipPath id="terminal-111300623-line-7">
<rect x="0" y="172.3" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-8">
+<clipPath id="terminal-111300623-line-8">
<rect x="0" y="196.7" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-9">
+<clipPath id="terminal-111300623-line-9">
<rect x="0" y="221.1" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-10">
+<clipPath id="terminal-111300623-line-10">
<rect x="0" y="245.5" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-11">
+<clipPath id="terminal-111300623-line-11">
<rect x="0" y="269.9" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-12">
+<clipPath id="terminal-111300623-line-12">
<rect x="0" y="294.3" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-13">
+<clipPath id="terminal-111300623-line-13">
<rect x="0" y="318.7" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-14">
+<clipPath id="terminal-111300623-line-14">
<rect x="0" y="343.1" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-15">
+<clipPath id="terminal-111300623-line-15">
<rect x="0" y="367.5" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-16">
+<clipPath id="terminal-111300623-line-16">
<rect x="0" y="391.9" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-17">
+<clipPath id="terminal-111300623-line-17">
<rect x="0" y="416.3" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-18">
+<clipPath id="terminal-111300623-line-18">
<rect x="0" y="440.7" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-19">
+<clipPath id="terminal-111300623-line-19">
<rect x="0" y="465.1" width="793" height="24.65"/>
</clipPath>
-<clipPath id="terminal-3052996798-line-20">
+<clipPath id="terminal-111300623-line-20">
<rect x="0" y="489.5" width="793" height="24.65"/>
</clipPath>
+<clipPath id="terminal-111300623-line-21">
+ <rect x="0" y="513.9" width="793" height="24.65"/>
+ </clipPath>
</defs>
- <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="809" height="584.8" rx="8"/>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="809" height="609.2" rx="8"/>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
<circle cx="44" cy="0" r="7" fill="#28c840"/>
</g>
- <g transform="translate(9, 41)"
clip-path="url(#terminal-3052996798-clip-terminal)">
+ <g transform="translate(9, 41)"
clip-path="url(#terminal-111300623-clip-terminal)">
- <g class="terminal-3052996798-matrix">
- <text class="terminal-3052996798-r1" x="0" y="20" textLength="73.2"
clip-path="url(#terminal-3052996798-line-0)">Usage:</text><text
class="terminal-3052996798-r3" x="85.4" y="20" textLength="183"
clip-path="url(#terminal-3052996798-line-0)">airflowctl dags</text><text
class="terminal-3052996798-r2" x="268.4" y="20" textLength="24.4"
clip-path="url(#terminal-3052996798-line-0)"> [</text><text
class="terminal-3052996798-r4" x="292.8" y="20" textLength="24.4"
clip-path="url(#t [...]
-</text><text class="terminal-3052996798-r2" x="793" y="44.4" textLength="12.2"
clip-path="url(#terminal-3052996798-line-1)">
-</text><text class="terminal-3052996798-r2" x="0" y="68.8" textLength="280.6"
clip-path="url(#terminal-3052996798-line-2)">Perform Dags operations</text><text
class="terminal-3052996798-r2" x="793" y="68.8" textLength="12.2"
clip-path="url(#terminal-3052996798-line-2)">
-</text><text class="terminal-3052996798-r2" x="793" y="93.2" textLength="12.2"
clip-path="url(#terminal-3052996798-line-3)">
-</text><text class="terminal-3052996798-r1" x="0" y="117.6" textLength="256.2"
clip-path="url(#terminal-3052996798-line-4)">Positional Arguments:</text><text
class="terminal-3052996798-r2" x="793" y="117.6" textLength="12.2"
clip-path="url(#terminal-3052996798-line-4)">
-</text><text class="terminal-3052996798-r4" x="24.4" y="142" textLength="85.4"
clip-path="url(#terminal-3052996798-line-5)">COMMAND</text><text
class="terminal-3052996798-r2" x="793" y="142" textLength="12.2"
clip-path="url(#terminal-3052996798-line-5)">
-</text><text class="terminal-3052996798-r4" x="48.8" y="166.4"
textLength="73.2"
clip-path="url(#terminal-3052996798-line-6)">delete</text><text
class="terminal-3052996798-r2" x="268.4" y="166.4" textLength="292.8"
clip-path="url(#terminal-3052996798-line-6)">Perform delete operation</text><text
class="terminal-3052996798-r2" x="793" y="166.4" textLength="12.2"
clip-path="url(#terminal-3052996798-line-6)">
-</text><text class="terminal-3052996798-r4" x="48.8" y="190.8"
textLength="36.6" clip-path="url(#terminal-3052996798-line-7)">get</text><text
class="terminal-3052996798-r2" x="268.4" y="190.8" textLength="256.2"
clip-path="url(#terminal-3052996798-line-7)">Perform get operation</text><text
class="terminal-3052996798-r2" x="793" y="190.8" textLength="12.2"
clip-path="url(#terminal-3052996798-line-7)">
-</text><text class="terminal-3052996798-r4" x="48.8" y="215.2"
textLength="134.2"
clip-path="url(#terminal-3052996798-line-8)">get-details</text><text
class="terminal-3052996798-r2" x="268.4" y="215.2" textLength="353.8"
clip-path="url(#terminal-3052996798-line-8)">Perform get_details operation</text><text
class="terminal-3052996798-r2" x="793" y="215.2" textLength="12.2"
clip-path="url(#terminal-3052996798-line-8)">
-</text><text class="terminal-3052996798-r4" x="48.8" y="239.6"
textLength="195.2"
clip-path="url(#terminal-3052996798-line-9)">get-import-error</text><text
class="terminal-3052996798-r2" x="268.4" y="239.6" textLength="414.8"
clip-path="url(#terminal-3052996798-line-9)">Perform get_import_error operation</text><text
class="terminal-3052996798-r2" x="793" y="239.6" textLength="12.2"
clip-path="url(#terminal-3052996798-line-9)">
-</text><text class="terminal-3052996798-r4" x="48.8" y="264"
textLength="109.8"
clip-path="url(#terminal-3052996798-line-10)">get-stats</text><text
class="terminal-3052996798-r2" x="268.4" y="264" textLength="329.4"
clip-path="url(#terminal-3052996798-line-10)">Perform get_stats operation</text><text
class="terminal-3052996798-r2" x="793" y="264" textLength="12.2"
clip-path="url(#terminal-3052996798-line-10)">
-</text><text class="terminal-3052996798-r4" x="48.8" y="288.4"
textLength="97.6"
clip-path="url(#terminal-3052996798-line-11)">get-tags</text><text
class="terminal-3052996798-r2" x="268.4" y="288.4" textLength="317.2"
clip-path="url(#terminal-3052996798-line-11)">Perform get_tags operation</text><text
class="terminal-3052996798-r2" x="793" y="288.4" textLength="12.2"
clip-path="url(#terminal-3052996798-line-11)">
-</text><text class="terminal-3052996798-r4" x="48.8" y="312.8"
textLength="134.2"
clip-path="url(#terminal-3052996798-line-12)">get-version</text><text
class="terminal-3052996798-r2" x="268.4" y="312.8" textLength="353.8"
clip-path="url(#terminal-3052996798-line-12)">Perform get_version operation</text><text
class="terminal-3052996798-r2" x="793" y="312.8" textLength="12.2"
clip-path="url(#terminal-3052996798-line-12)">
-</text><text class="terminal-3052996798-r4" x="48.8" y="337.2"
textLength="48.8"
clip-path="url(#terminal-3052996798-line-13)">list</text><text
class="terminal-3052996798-r2" x="268.4" y="337.2" textLength="268.4"
clip-path="url(#terminal-3052996798-line-13)">Perform list operation</text><text
class="terminal-3052996798-r2" x="793" y="337.2" textLength="12.2"
clip-path="url(#terminal-3052996798-line-13)">
-</text><text class="terminal-3052996798-r4" x="48.8" y="361.6"
textLength="219.6"
clip-path="url(#terminal-3052996798-line-14)">list-import-errors</text><text
class="terminal-3052996798-r2" x="793" y="361.6" textLength="12.2"
clip-path="url(#terminal-3052996798-line-14)">
-</text><text class="terminal-3052996798-r2" x="268.4" y="386"
textLength="439.2"
clip-path="url(#terminal-3052996798-line-15)">Perform list_import_errors operation</text><text
class="terminal-3052996798-r2" x="793" y="386" textLength="12.2"
clip-path="url(#terminal-3052996798-line-15)">
-</text><text class="terminal-3052996798-r4" x="48.8" y="410.4"
textLength="146.4"
clip-path="url(#terminal-3052996798-line-16)">list-version</text><text
class="terminal-3052996798-r2" x="268.4" y="410.4" textLength="366"
clip-path="url(#terminal-3052996798-line-16)">Perform list_version operation</text><text
class="terminal-3052996798-r2" x="793" y="410.4" textLength="12.2"
clip-path="url(#terminal-3052996798-line-16)">
-</text><text class="terminal-3052996798-r4" x="48.8" y="434.8"
textLength="146.4"
clip-path="url(#terminal-3052996798-line-17)">list-warning</text><text
class="terminal-3052996798-r2" x="268.4" y="434.8" textLength="366"
clip-path="url(#terminal-3052996798-line-17)">Perform list_warning operation</text><text
class="terminal-3052996798-r2" x="793" y="434.8" textLength="12.2"
clip-path="url(#terminal-3052996798-line-17)">
-</text><text class="terminal-3052996798-r4" x="48.8" y="459.2"
textLength="73.2"
clip-path="url(#terminal-3052996798-line-18)">update</text><text
class="terminal-3052996798-r2" x="268.4" y="459.2" textLength="292.8"
clip-path="url(#terminal-3052996798-line-18)">Perform update operation</text><text
class="terminal-3052996798-r2" x="793" y="459.2" textLength="12.2"
clip-path="url(#terminal-3052996798-line-18)">
-</text><text class="terminal-3052996798-r2" x="793" y="483.6"
textLength="12.2" clip-path="url(#terminal-3052996798-line-19)">
-</text><text class="terminal-3052996798-r1" x="0" y="508" textLength="97.6"
clip-path="url(#terminal-3052996798-line-20)">Options:</text><text
class="terminal-3052996798-r2" x="793" y="508" textLength="12.2"
clip-path="url(#terminal-3052996798-line-20)">
-</text><text class="terminal-3052996798-r4" x="24.4" y="532.4"
textLength="24.4" clip-path="url(#terminal-3052996798-line-21)">-h</text><text
class="terminal-3052996798-r2" x="48.8" y="532.4" textLength="24.4"
clip-path="url(#terminal-3052996798-line-21)">, </text><text
class="terminal-3052996798-r4" x="73.2" y="532.4" textLength="73.2"
clip-path="url(#terminal-3052996798-line-21)">--help</text><text
class="terminal-3052996798-r2" x="268.4" y="532.4" textLength="378.2"
clip-path="ur [...]
+ <g class="terminal-111300623-matrix">
+ <text class="terminal-111300623-r1" x="0" y="20" textLength="73.2"
clip-path="url(#terminal-111300623-line-0)">Usage:</text><text
class="terminal-111300623-r3" x="85.4" y="20" textLength="183"
clip-path="url(#terminal-111300623-line-0)">airflowctl dags</text><text
class="terminal-111300623-r2" x="268.4" y="20" textLength="24.4"
clip-path="url(#terminal-111300623-line-0)"> [</text><text
class="terminal-111300623-r4" x="292.8" y="20" textLength="24.4"
clip-path="url(#terminal [...]
+</text><text class="terminal-111300623-r2" x="793" y="44.4" textLength="12.2"
clip-path="url(#terminal-111300623-line-1)">
+</text><text class="terminal-111300623-r2" x="0" y="68.8" textLength="280.6"
clip-path="url(#terminal-111300623-line-2)">Perform Dags operations</text><text
class="terminal-111300623-r2" x="793" y="68.8" textLength="12.2"
clip-path="url(#terminal-111300623-line-2)">
+</text><text class="terminal-111300623-r2" x="793" y="93.2" textLength="12.2"
clip-path="url(#terminal-111300623-line-3)">
+</text><text class="terminal-111300623-r1" x="0" y="117.6" textLength="256.2"
clip-path="url(#terminal-111300623-line-4)">Positional Arguments:</text><text
class="terminal-111300623-r2" x="793" y="117.6" textLength="12.2"
clip-path="url(#terminal-111300623-line-4)">
+</text><text class="terminal-111300623-r4" x="24.4" y="142" textLength="85.4"
clip-path="url(#terminal-111300623-line-5)">COMMAND</text><text
class="terminal-111300623-r2" x="793" y="142" textLength="12.2"
clip-path="url(#terminal-111300623-line-5)">
+</text><text class="terminal-111300623-r4" x="48.8" y="166.4"
textLength="73.2"
clip-path="url(#terminal-111300623-line-6)">delete</text><text
class="terminal-111300623-r2" x="268.4" y="166.4" textLength="292.8"
clip-path="url(#terminal-111300623-line-6)">Perform delete operation</text><text
class="terminal-111300623-r2" x="793" y="166.4" textLength="12.2"
clip-path="url(#terminal-111300623-line-6)">
+</text><text class="terminal-111300623-r4" x="48.8" y="190.8"
textLength="36.6" clip-path="url(#terminal-111300623-line-7)">get</text><text
class="terminal-111300623-r2" x="268.4" y="190.8" textLength="256.2"
clip-path="url(#terminal-111300623-line-7)">Perform get operation</text><text
class="terminal-111300623-r2" x="793" y="190.8" textLength="12.2"
clip-path="url(#terminal-111300623-line-7)">
+</text><text class="terminal-111300623-r4" x="48.8" y="215.2"
textLength="134.2"
clip-path="url(#terminal-111300623-line-8)">get-details</text><text
class="terminal-111300623-r2" x="268.4" y="215.2" textLength="353.8"
clip-path="url(#terminal-111300623-line-8)">Perform get_details operation</text><text
class="terminal-111300623-r2" x="793" y="215.2" textLength="12.2"
clip-path="url(#terminal-111300623-line-8)">
+</text><text class="terminal-111300623-r4" x="48.8" y="239.6"
textLength="195.2"
clip-path="url(#terminal-111300623-line-9)">get-import-error</text><text
class="terminal-111300623-r2" x="268.4" y="239.6" textLength="414.8"
clip-path="url(#terminal-111300623-line-9)">Perform get_import_error operation</text><text
class="terminal-111300623-r2" x="793" y="239.6" textLength="12.2"
clip-path="url(#terminal-111300623-line-9)">
+</text><text class="terminal-111300623-r4" x="48.8" y="264" textLength="109.8"
clip-path="url(#terminal-111300623-line-10)">get-stats</text><text
class="terminal-111300623-r2" x="268.4" y="264" textLength="329.4"
clip-path="url(#terminal-111300623-line-10)">Perform get_stats operation</text><text
class="terminal-111300623-r2" x="793" y="264" textLength="12.2"
clip-path="url(#terminal-111300623-line-10)">
+</text><text class="terminal-111300623-r4" x="48.8" y="288.4"
textLength="97.6"
clip-path="url(#terminal-111300623-line-11)">get-tags</text><text
class="terminal-111300623-r2" x="268.4" y="288.4" textLength="317.2"
clip-path="url(#terminal-111300623-line-11)">Perform get_tags operation</text><text
class="terminal-111300623-r2" x="793" y="288.4" textLength="12.2"
clip-path="url(#terminal-111300623-line-11)">
+</text><text class="terminal-111300623-r4" x="48.8" y="312.8"
textLength="134.2"
clip-path="url(#terminal-111300623-line-12)">get-version</text><text
class="terminal-111300623-r2" x="268.4" y="312.8" textLength="353.8"
clip-path="url(#terminal-111300623-line-12)">Perform get_version operation</text><text
class="terminal-111300623-r2" x="793" y="312.8" textLength="12.2"
clip-path="url(#terminal-111300623-line-12)">
+</text><text class="terminal-111300623-r4" x="48.8" y="337.2"
textLength="48.8" clip-path="url(#terminal-111300623-line-13)">list</text><text
class="terminal-111300623-r2" x="268.4" y="337.2" textLength="268.4"
clip-path="url(#terminal-111300623-line-13)">Perform list operation</text><text
class="terminal-111300623-r2" x="793" y="337.2" textLength="12.2"
clip-path="url(#terminal-111300623-line-13)">
+</text><text class="terminal-111300623-r4" x="48.8" y="361.6"
textLength="219.6"
clip-path="url(#terminal-111300623-line-14)">list-import-errors</text><text
class="terminal-111300623-r2" x="793" y="361.6" textLength="12.2"
clip-path="url(#terminal-111300623-line-14)">
+</text><text class="terminal-111300623-r2" x="268.4" y="386"
textLength="439.2"
clip-path="url(#terminal-111300623-line-15)">Perform list_import_errors operation</text><text
class="terminal-111300623-r2" x="793" y="386" textLength="12.2"
clip-path="url(#terminal-111300623-line-15)">
+</text><text class="terminal-111300623-r4" x="48.8" y="410.4"
textLength="146.4"
clip-path="url(#terminal-111300623-line-16)">list-version</text><text
class="terminal-111300623-r2" x="268.4" y="410.4" textLength="366"
clip-path="url(#terminal-111300623-line-16)">Perform list_version operation</text><text
class="terminal-111300623-r2" x="793" y="410.4" textLength="12.2"
clip-path="url(#terminal-111300623-line-16)">
+</text><text class="terminal-111300623-r4" x="48.8" y="434.8"
textLength="146.4"
clip-path="url(#terminal-111300623-line-17)">list-warning</text><text
class="terminal-111300623-r2" x="268.4" y="434.8" textLength="366"
clip-path="url(#terminal-111300623-line-17)">Perform list_warning operation</text><text
class="terminal-111300623-r2" x="793" y="434.8" textLength="12.2"
clip-path="url(#terminal-111300623-line-17)">
+</text><text class="terminal-111300623-r4" x="48.8" y="459.2"
textLength="85.4"
clip-path="url(#terminal-111300623-line-18)">trigger</text><text
class="terminal-111300623-r2" x="268.4" y="459.2" textLength="305"
clip-path="url(#terminal-111300623-line-18)">Perform trigger operation</text><text
class="terminal-111300623-r2" x="793" y="459.2" textLength="12.2"
clip-path="url(#terminal-111300623-line-18)">
+</text><text class="terminal-111300623-r4" x="48.8" y="483.6"
textLength="73.2"
clip-path="url(#terminal-111300623-line-19)">update</text><text
class="terminal-111300623-r2" x="268.4" y="483.6" textLength="292.8"
clip-path="url(#terminal-111300623-line-19)">Perform update operation</text><text
class="terminal-111300623-r2" x="793" y="483.6" textLength="12.2"
clip-path="url(#terminal-111300623-line-19)">
+</text><text class="terminal-111300623-r2" x="793" y="508" textLength="12.2"
clip-path="url(#terminal-111300623-line-20)">
+</text><text class="terminal-111300623-r1" x="0" y="532.4" textLength="97.6"
clip-path="url(#terminal-111300623-line-21)">Options:</text><text
class="terminal-111300623-r2" x="793" y="532.4" textLength="12.2"
clip-path="url(#terminal-111300623-line-21)">
+</text><text class="terminal-111300623-r4" x="24.4" y="556.8"
textLength="24.4" clip-path="url(#terminal-111300623-line-22)">-h</text><text
class="terminal-111300623-r2" x="48.8" y="556.8" textLength="24.4"
clip-path="url(#terminal-111300623-line-22)">, </text><text
class="terminal-111300623-r4" x="73.2" y="556.8" textLength="73.2"
clip-path="url(#terminal-111300623-line-22)">--help</text><text
class="terminal-111300623-r2" x="268.4" y="556.8" textLength="378.2"
clip-path="url(#term [...]
</text>
</g>
</g>
diff --git a/airflow-ctl/src/airflowctl/api/operations.py
b/airflow-ctl/src/airflowctl/api/operations.py
index a2cb27eafc4..31e0298a19d 100644
--- a/airflow-ctl/src/airflowctl/api/operations.py
+++ b/airflow-ctl/src/airflowctl/api/operations.py
@@ -521,6 +521,20 @@ class DagsOperations(BaseOperations):
def list_warning(self) -> DAGWarningCollectionResponse |
ServerResponseError:
return super().execute_list(path="dagWarnings",
data_model=DAGWarningCollectionResponse)
+ def trigger(
+ self, dag_id: str, trigger_dag_run: TriggerDAGRunPostBody
+ ) -> DAGRunResponse | ServerResponseError:
+ """Create a dag run."""
+ if trigger_dag_run.conf is None:
+ trigger_dag_run.conf = {}
+ try:
+ self.response = self.client.post(
+ f"dags/{dag_id}/dagRuns",
json=trigger_dag_run.model_dump(mode="json")
+ )
+ return DAGRunResponse.model_validate_json(self.response.content)
+ except ServerResponseError as e:
+ raise e
+
class DagRunOperations(BaseOperations):
"""Dag run operations."""
@@ -553,20 +567,6 @@ class DagRunOperations(BaseOperations):
path=f"/dags/{dag_id}/dagRuns",
data_model=DAGRunCollectionResponse, params=params
)
- def trigger(
- self, dag_id: str, trigger_dag_run: TriggerDAGRunPostBody
- ) -> DAGRunResponse | ServerResponseError:
- """Create a dag run."""
- if trigger_dag_run.conf is None:
- trigger_dag_run.conf = {}
- try:
- self.response = self.client.post(
- f"dags/{dag_id}/dagRuns",
json=trigger_dag_run.model_dump(mode="json")
- )
- return DAGRunResponse.model_validate_json(self.response.content)
- except ServerResponseError as e:
- raise e
-
class JobsOperations(BaseOperations):
"""Job operations."""
diff --git a/airflow-ctl/tests/airflow_ctl/api/test_operations.py
b/airflow-ctl/tests/airflow_ctl/api/test_operations.py
index 785fed87dcc..01df0de6577 100644
--- a/airflow-ctl/tests/airflow_ctl/api/test_operations.py
+++ b/airflow-ctl/tests/airflow_ctl/api/test_operations.py
@@ -775,6 +775,44 @@ class TestDagOperations:
is_paused=True,
)
+ # DagRun related
+ trigger_dag_run = TriggerDAGRunPostBody(
+ conf=None,
+ note=None,
+ )
+
+ dag_id = "dag_id"
+ dag_run_id = "dag_run_id"
+ dag_run_response = DAGRunResponse(
+ dag_display_name=dag_run_id,
+ dag_run_id=dag_run_id,
+ dag_id=dag_id,
+ logical_date=datetime.datetime(2025, 1, 1, 0, 0, 0),
+ queued_at=datetime.datetime(2025, 1, 1, 0, 0, 0),
+ start_date=datetime.datetime(2025, 1, 1, 0, 0, 0),
+ end_date=datetime.datetime(2025, 1, 1, 0, 0, 0),
+ data_interval_start=datetime.datetime(2025, 1, 1, 0, 0, 0),
+ data_interval_end=datetime.datetime(2025, 1, 1, 0, 0, 0),
+ last_scheduling_decision=datetime.datetime(2025, 1, 1, 0, 0, 0),
+ run_after=datetime.datetime(2025, 1, 1, 0, 0, 0),
+ run_type=DagRunType.MANUAL,
+ state=DagRunState.RUNNING,
+ triggered_by=DagRunTriggeredByType.UI,
+ conf={},
+ note=None,
+ dag_versions=[
+ DagVersionResponse(
+ id=uuid.uuid4(),
+ version_number=1,
+ dag_id=dag_id,
+ bundle_name="bundle_name",
+ bundle_version="1",
+ created_at=datetime.datetime(2025, 1, 1, 0, 0, 0),
+ dag_display_name=dag_id,
+ )
+ ],
+ )
+
def test_get(self):
def handle_request(request: httpx.Request) -> httpx.Response:
assert request.url.path == "/api/v2/dags/dag_id"
@@ -889,6 +927,15 @@ class TestDagOperations:
response = client.dags.list_warning()
assert response == self.dag_warning_collection_response
+ def test_trigger(self):
+ def handle_request(request: httpx.Request) -> httpx.Response:
+ assert request.url.path == f"/api/v2/dags/{self.dag_id}/dagRuns"
+ return httpx.Response(200,
json=json.loads(self.dag_run_response.model_dump_json()))
+
+ client = make_api_client(transport=httpx.MockTransport(handle_request))
+ response = client.dags.trigger(dag_id=self.dag_id,
trigger_dag_run=self.trigger_dag_run)
+ assert response == self.dag_run_response
+
class TestDagRunOperations:
dag_id = "dag_id"
@@ -928,11 +975,6 @@ class TestDagRunOperations:
total_entries=1,
)
- trigger_dag_run = TriggerDAGRunPostBody(
- conf=None,
- note=None,
- )
-
def test_get(self):
def handle_request(request: httpx.Request) -> httpx.Response:
assert request.url.path ==
f"/api/v2/dags/{self.dag_id}/dagRuns/{self.dag_run_id}"
@@ -957,15 +999,6 @@ class TestDagRunOperations:
)
assert response == self.dag_run_collection_response
- def test_trigger(self):
- def handle_request(request: httpx.Request) -> httpx.Response:
- assert request.url.path == f"/api/v2/dags/{self.dag_id}/dagRuns"
- return httpx.Response(200,
json=json.loads(self.dag_run_response.model_dump_json()))
-
- client = make_api_client(transport=httpx.MockTransport(handle_request))
- response = client.dag_runs.trigger(dag_id=self.dag_id,
trigger_dag_run=self.trigger_dag_run)
- assert response == self.dag_run_response
-
class TestJobsOperations:
job_response = JobResponse(