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
+18 -1
View File
@@ -3,6 +3,7 @@
from __future__ import annotations
import os
import json
import signal
import subprocess
import threading
@@ -23,11 +24,16 @@ class RunManager:
self._processes: dict[int, subprocess.Popen[bytes]] = {}
self._lock = threading.Lock()
def run_task(self, task: Task) -> tuple[Run, bool]:
def run_task(
self,
task: Task,
input_data: dict[str, str | int | list[str]] | None = None,
) -> tuple[Run, bool]:
run, created = self.store.enqueue(
target_kind="task",
target_path=task.id,
queue_group=task.group_id,
input_data=input_data,
)
if created:
self._wake_worker(task.group_id)
@@ -143,11 +149,22 @@ class RunManager:
task_state.mkdir(parents=True, exist_ok=True)
log_path = self.settings.state_root / "runs" / f"{run.id}.log"
log_path.parent.mkdir(parents=True, exist_ok=True)
input_path = self.settings.state_root / "runs" / f"{run.id}.input.json"
try:
input_path.write_text(run.input_json + "\n", encoding="utf-8")
input_path.chmod(0o600)
except OSError as error:
return self.store.finish(
run.id,
status="failed",
message=f"Could not prepare task input: {error}",
)
environment = {
"PATH": "/usr/local/bin:/usr/bin:/bin",
"PYTHONUNBUFFERED": "1",
"SERVER_MAINTENANCE_CREDENTIALS": str(self.settings.credentials_root),
"SERVER_MAINTENANCE_STATE": str(task_state),
"SERVER_MAINTENANCE_INPUT": str(input_path),
}
if self.settings.timezone_name:
environment["TZ"] = self.settings.timezone_name