This is an automated email from the ASF dual-hosted git repository.

ephraimanierobi pushed a commit to branch v2-7-test
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit 21ecb41ff6a06a4d9fb34a96b5ef1fb469e7b4f0
Author: Ephraim Anierobi <[email protected]>
AuthorDate: Mon Aug 14 21:58:53 2023 +0100

    Bring back the decision buttons on DAG trigger (#33394)
    
    When show_trigger_form_if_no_params is set to True, the decision
    buttons to trigger with or without config should be shown just like
    we had it in 2.6.3
    
    (cherry picked from commit 8cc68e244b511200f5b4ec29e3ae87e211493c28)
---
 airflow/www/templates/airflow/dag.html  | 31 +++++++++++++++++++++++++++++++
 airflow/www/templates/airflow/dags.html | 23 ++++++++++++++++++++++-
 airflow/www/views.py                    | 16 ++++++++++++++++
 3 files changed, 69 insertions(+), 1 deletion(-)

diff --git a/airflow/www/templates/airflow/dag.html 
b/airflow/www/templates/airflow/dag.html
index 4fc11ea138..d324199d1f 100644
--- a/airflow/www/templates/airflow/dag.html
+++ b/airflow/www/templates/airflow/dag.html
@@ -220,6 +220,36 @@
       </div>
       <div class="col-md-2">
         <div class="btn-group pull-right">
+          {% if show_trigger_form_if_no_params %}
+          <div class="dropdown">
+            <a aria-label="Trigger DAG" class="btn btn-default btn-icon-only{{ 
' disabled' if not dag.can_trigger }} trigger-dropdown-btn" 
data-toggle="dropdown">
+              <span class="material-icons" aria-hidden="true">play_arrow</span>
+              </a>
+            <ul class="dropdown-menu trigger-dropdown-menu">
+              <li>
+                <form method="POST" action="{{ url_for('Airflow.trigger', 
dag_id=dag.dag_id) }}">
+                  <input type="hidden" name="csrf_token" value="{{ 
csrf_token() }}">
+                  <input type="hidden" name="dag_id" value="{{ dag.dag_id }}">
+                  <input type="hidden" name="unpause" value="True">
+                  <!-- for task instance detail pages, dag_id is still a query 
param -->
+                  {% if 'dag_id' in request.args %}
+                    <input type="hidden" name="origin" value="{{ 
url_for(request.endpoint, **request.args) }}">
+                  {% else %}
+                    <input type="hidden" name="origin" value="{{ 
url_for(request.endpoint, dag_id=dag.dag_id, **request.args) }}">
+                  {% endif %}
+                  <button type="submit" class="dropdown-form-btn">Trigger 
DAG</button>
+                </form>
+              </li>
+              <li>
+                {% if 'dag_id' in request.args %}
+                  <a href="{{ url_for('Airflow.trigger', dag_id=dag.dag_id, 
origin=url_for(request.endpoint, **request.args)) }}">
+                {% else %}
+                  <a href="{{ url_for('Airflow.trigger', dag_id=dag.dag_id, 
origin=url_for(request.endpoint, dag_id=dag.dag_id, **request.args)) }}">
+                {% endif %}
+                Trigger DAG w/ config</a></li>
+            </ul>
+          </div>
+          {% else %}
           {% if 'dag_id' in request.args %}
             <a href="{{ url_for('Airflow.trigger', dag_id=dag.dag_id, 
origin=url_for(request.endpoint, **request.args)) }}"
           {% else %}
@@ -230,6 +260,7 @@
               class="btn btn-default btn-icon-only{{ ' disabled' if not 
dag.can_trigger }} trigger-dropdown-btn">
               <span class="material-icons" aria-hidden="true">play_arrow</span>
           </a>
+          {% endif %}
           <a href="{{ url_for('Airflow.delete', dag_id=dag.dag_id, 
redirect_url=url_for(request.endpoint, dag_id=dag.dag_id)) }}"
             title="Delete&nbsp;DAG"
             aria-label="Delete DAG"
diff --git a/airflow/www/templates/airflow/dags.html 
b/airflow/www/templates/airflow/dags.html
index 93d1d8189e..c2ccb03e5d 100644
--- a/airflow/www/templates/airflow/dags.html
+++ b/airflow/www/templates/airflow/dags.html
@@ -364,13 +364,34 @@
               <div class="btn-group">
                 {# Use dag_id instead of dag.dag_id, because the DAG might not 
exist in the webserver's DagBag #}
                 {% if dag %}
+                {% if show_trigger_form_if_no_params %}
+                <div class="dropdown">
+                    <a aria-label="Trigger DAG"
+                       class="btn btn-sm btn-default btn-icon-only{{ ' 
disabled' if not dag.can_trigger }} trigger-dropdown-btn"
+                       data-toggle="dropdown">
+                      <span class="material-icons" 
aria-hidden="true">play_arrow</span>
+                    </a>
+                    <ul class="dropdown-menu trigger-dropdown-menu">
+                      <li>
+                        <form method="POST" action="{{ 
url_for('Airflow.trigger', dag_id=dag.dag_id, 
redirect_url=url_for(request.endpoint)) }}">
+                          <input type="hidden" name="csrf_token" value="{{ 
csrf_token() }}">
+                          <input type="hidden" name="dag_id" value="{{ 
dag.dag_id }}">
+                          <input type="hidden" name="unpause" value="True">
+                          <button type="submit" 
class="dropdown-form-btn">Trigger DAG</button>
+                        </form>
+                      </li>
+                      <li><a href="{{ url_for('Airflow.trigger', 
dag_id=dag.dag_id, redirect_url=url_for(request.endpoint)) }}">Trigger DAG w/ 
config</a></li>
+                    </ul>
+                  </div>
+                {% else %}
                   <a href="{{ url_for('Airflow.trigger', dag_id=dag.dag_id, 
redirect_url=url_for(request.endpoint)) }}"
                     title="Trigger&nbsp;DAG"
                     aria-label="Trigger DAG"
                     class="btn btn-sm btn-default btn-icon-only{{ ' disabled' 
if not dag.can_trigger }} trigger-dropdown-btn">
                     <span class="material-icons" 
aria-hidden="true">play_arrow</span>
                   </a>
-                  <a href="{{ url_for('Airflow.delete', dag_id=dag.dag_id, 
redirect_url=url_for(request.endpoint)) }}"
+                {% endif %}
+                <a href="{{ url_for('Airflow.delete', dag_id=dag.dag_id, 
redirect_url=url_for(request.endpoint)) }}"
                     onclick="return confirmDeleteDag(this, '{{ dag.dag_id 
}}')" title="Delete&nbsp;DAG"
                     aria-label="Delete DAG"
                     class="btn btn-sm btn-default btn-icon-only{{ ' disabled' 
if not dag.can_delete }}">
diff --git a/airflow/www/views.py b/airflow/www/views.py
index ad9a9da98a..59c9bd31a7 100644
--- a/airflow/www/views.py
+++ b/airflow/www/views.py
@@ -989,6 +989,7 @@ class Airflow(AirflowBaseView):
         return self.render_template(
             "airflow/dags.html",
             dags=dags,
+            show_trigger_form_if_no_params=conf.getboolean("webserver", 
"show_trigger_form_if_no_params"),
             dashboard_alerts=dashboard_alerts,
             
migration_moved_data_alerts=sorted(set(_iter_parsed_moved_data_table_names())),
             current_page=current_page,
@@ -1405,6 +1406,7 @@ class Airflow(AirflowBaseView):
         return self.render_template(
             "airflow/dag_details.html",
             dag=dag,
+            show_trigger_form_if_no_params=conf.getboolean("webserver", 
"show_trigger_form_if_no_params"),
             dag_model=dag_model,
             title=title,
             root=root,
@@ -1460,6 +1462,9 @@ class Airflow(AirflowBaseView):
                 flash(f"there is no task instance with the provided map_index 
{map_index}", "error")
                 return self.render_template(
                     "airflow/ti_code.html",
+                    show_trigger_form_if_no_params=conf.getboolean(
+                        "webserver", "show_trigger_form_if_no_params"
+                    ),
                     html_dict=html_dict,
                     dag=dag,
                     task_id=task_id,
@@ -1518,6 +1523,7 @@ class Airflow(AirflowBaseView):
 
         return self.render_template(
             "airflow/ti_code.html",
+            show_trigger_form_if_no_params=conf.getboolean("webserver", 
"show_trigger_form_if_no_params"),
             html_dict=html_dict,
             dag=dag,
             task_id=task_id,
@@ -1582,6 +1588,7 @@ class Airflow(AirflowBaseView):
 
         return self.render_template(
             "airflow/ti_code.html",
+            show_trigger_form_if_no_params=conf.getboolean("webserver", 
"show_trigger_form_if_no_params"),
             html_dict={"k8s": content},
             dag=dag,
             task_id=task_id,
@@ -1717,6 +1724,7 @@ class Airflow(AirflowBaseView):
         root = request.args.get("root", "")
         return self.render_template(
             "airflow/ti_log.html",
+            show_trigger_form_if_no_params=conf.getboolean("webserver", 
"show_trigger_form_if_no_params"),
             logs=logs,
             dag=dag_model,
             title="Log by attempts",
@@ -1884,6 +1892,7 @@ class Airflow(AirflowBaseView):
         title = "Task Instance Details"
         return self.render_template(
             "airflow/task.html",
+            show_trigger_form_if_no_params=conf.getboolean("webserver", 
"show_trigger_form_if_no_params"),
             task_attrs=task_attrs,
             ti_attrs=ti_attrs,
             failed_dep_reasons=failed_dep_reasons or no_failed_deps_result,
@@ -1939,6 +1948,7 @@ class Airflow(AirflowBaseView):
         title = "XCom"
         return self.render_template(
             "airflow/xcom.html",
+            show_trigger_form_if_no_params=conf.getboolean("webserver", 
"show_trigger_form_if_no_params"),
             attributes=attributes,
             task_id=task_id,
             execution_date=execution_date,
@@ -2925,6 +2935,7 @@ class Airflow(AirflowBaseView):
 
         return self.render_template(
             "airflow/grid.html",
+            show_trigger_form_if_no_params=conf.getboolean("webserver", 
"show_trigger_form_if_no_params"),
             root=root,
             dag=dag,
             doc_md=doc_md,
@@ -3072,6 +3083,7 @@ class Airflow(AirflowBaseView):
         return self.render_template(
             "airflow/calendar.html",
             dag=dag,
+            show_trigger_form_if_no_params=conf.getboolean("webserver", 
"show_trigger_form_if_no_params"),
             doc_md=wwwutils.wrapped_markdown(getattr(dag, "doc_md", None)),
             data=htmlsafe_json_dumps(data, separators=(",", ":")),  # Avoid 
spaces to reduce payload size.
             root=root,
@@ -3275,6 +3287,7 @@ class Airflow(AirflowBaseView):
         return self.render_template(
             "airflow/duration_chart.html",
             dag=dag,
+            show_trigger_form_if_no_params=conf.getboolean("webserver", 
"show_trigger_form_if_no_params"),
             root=root,
             form=form,
             chart=Markup(chart.htmlcontent),
@@ -3370,6 +3383,7 @@ class Airflow(AirflowBaseView):
         return self.render_template(
             "airflow/chart.html",
             dag=dag,
+            show_trigger_form_if_no_params=conf.getboolean("webserver", 
"show_trigger_form_if_no_params"),
             root=root,
             form=form,
             chart=Markup(chart.htmlcontent),
@@ -3476,6 +3490,7 @@ class Airflow(AirflowBaseView):
         return self.render_template(
             "airflow/chart.html",
             dag=dag,
+            show_trigger_form_if_no_params=conf.getboolean("webserver", 
"show_trigger_form_if_no_params"),
             chart=Markup(chart.htmlcontent),
             height=f"{chart_height + 100}px",
             root=root,
@@ -4019,6 +4034,7 @@ class Airflow(AirflowBaseView):
         return self.render_template(
             "airflow/dag_audit_log.html",
             dag=dag,
+            show_trigger_form_if_no_params=conf.getboolean("webserver", 
"show_trigger_form_if_no_params"),
             dag_model=dag_model,
             root=request.args.get("root"),
             dag_id=dag_id,

Reply via email to