Add typed task input forms

This commit is contained in:
ajp_anton
2026-08-08 18:39:09 +00:00
parent 56d6194324
commit 0549ed1b0d
8 changed files with 521 additions and 16 deletions
+32 -4
View File
@@ -10,6 +10,7 @@ from flask import Flask, abort, redirect, render_template, request, url_for
from .config import Settings
from .discovery import TaskCatalog
from .inputs import validate_inputs
from .runner import RunManager
from .store import RunStore
@@ -53,8 +54,12 @@ def create_app(settings: Settings | None = None) -> Flask:
return ""
return datetime.fromisoformat(value).astimezone().strftime("%Y-%m-%d %H:%M:%S %Z")
@app.get("/")
def index():
def render_index(
*,
form_values: dict[str, dict[str, list[str]]] | None = None,
input_errors: dict[str, dict[str, str]] | None = None,
status: int = 200,
):
groups = catalog.groups()
latest = {
("group", group.id): store.last_run("group", group.id) for group in groups
@@ -62,14 +67,37 @@ def create_app(settings: Settings | None = None) -> Flask:
for group in groups:
for task in group.tasks:
latest[("task", task.id)] = store.last_run("task", task.id)
return render_template("index.html", groups=groups, latest=latest)
return (
render_template(
"index.html",
groups=groups,
latest=latest,
form_values=form_values or {},
input_errors=input_errors or {},
),
status,
)
@app.get("/")
def index():
return render_index()
@app.post("/tasks/<path:task_id>/run")
def run_task(task_id: str):
task = catalog.task(task_id)
if task is None:
abort(404)
run, _ = manager.run_task(task)
submitted_values = {
field.name: request.form.getlist(field.name) for field in task.inputs
}
input_data, errors = validate_inputs(task.inputs, submitted_values)
if errors:
return render_index(
form_values={task.id: submitted_values},
input_errors={task.id: errors},
status=400,
)
run, _ = manager.run_task(task, input_data)
return redirect(url_for("run_detail", run_id=run.id))
@app.post("/groups/<path:group_id>/run")