From d92e493689230065051e73a2886fbc7c40d2c857 Mon Sep 17 00:00:00 2001 From: gilesb Date: Sun, 11 Jan 2026 20:38:19 +0000 Subject: [PATCH] Fix inputs JSON parsing in pending_runs database functions JSONB columns may return strings in some cases - explicitly parse inputs field to ensure it's always a list. Co-Authored-By: Claude Opus 4.5 --- database.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/database.py b/database.py index a0af580..8d9a99e 100644 --- a/database.py +++ b/database.py @@ -1428,12 +1428,16 @@ async def get_pending_run(run_id: str) -> Optional[dict]: run_id ) if row: + # Parse inputs if it's a string (JSONB should auto-parse but be safe) + inputs = row["inputs"] + if isinstance(inputs, str): + inputs = _json.loads(inputs) return { "run_id": row["run_id"], "celery_task_id": row["celery_task_id"], "status": row["status"], "recipe": row["recipe"], - "inputs": row["inputs"], + "inputs": inputs, "dag_json": row["dag_json"], "output_name": row["output_name"], "actor_id": row["actor_id"], @@ -1472,21 +1476,25 @@ async def list_pending_runs(actor_id: Optional[str] = None, status: Optional[str """, *params ) - return [ - { + results = [] + for row in rows: + # Parse inputs if it's a string + inputs = row["inputs"] + if isinstance(inputs, str): + inputs = _json.loads(inputs) + results.append({ "run_id": row["run_id"], "celery_task_id": row["celery_task_id"], "status": row["status"], "recipe": row["recipe"], - "inputs": row["inputs"], + "inputs": inputs, "output_name": row["output_name"], "actor_id": row["actor_id"], "error": row["error"], "created_at": row["created_at"].isoformat() if row["created_at"] else None, "updated_at": row["updated_at"].isoformat() if row["updated_at"] else None, - } - for row in rows - ] + }) + return results async def update_pending_run_status(run_id: str, status: str, error: Optional[str] = None) -> bool: