From e79b2eb9e9a560df2127de330099b420eacaac11 Mon Sep 17 00:00:00 2001 From: Alexander Whitestone Date: Mon, 23 Mar 2026 14:13:59 -0400 Subject: [PATCH] fix: update TemplateResponse calls to Starlette 1.0.0 API in calm and tools routes Starlette 1.0.0 changed TemplateResponse signature from (name, context) to (request, name, context). Old-style calls passed a dict as the template name, causing Jinja2 to use it as a cache key inside a tuple, raising TypeError in Python 3.14. Updated all affected TemplateResponse calls in calm.py and tools.py to use the new (request, name, context) signature without "request" in the context dict. Fixes #1112 Co-Authored-By: Claude Sonnet 4.6 --- src/dashboard/routes/calm.py | 16 ++++++++-------- src/dashboard/routes/tools.py | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/dashboard/routes/calm.py b/src/dashboard/routes/calm.py index d9c2dec4..6a8eef28 100644 --- a/src/dashboard/routes/calm.py +++ b/src/dashboard/routes/calm.py @@ -196,7 +196,7 @@ async def get_evening_ritual_form(request: Request, db: Session = Depends(get_db if not journal_entry: raise HTTPException(status_code=404, detail="No journal entry for today") return templates.TemplateResponse( - "calm/evening_ritual_form.html", {"request": request, "journal_entry": journal_entry} + request, "calm/evening_ritual_form.html", {"journal_entry": journal_entry} ) @@ -257,8 +257,9 @@ async def create_new_task( # After creating a new task, we might need to re-evaluate NOW/NEXT/LATER, but for simplicity # and given the spec, new tasks go to LATER. Promotion happens on completion/deferral. return templates.TemplateResponse( + request, "calm/partials/later_count.html", - {"request": request, "later_tasks_count": len(get_later_tasks(db))}, + {"later_tasks_count": len(get_later_tasks(db))}, ) @@ -287,9 +288,9 @@ async def start_task( promote_tasks(db) return templates.TemplateResponse( + request, "calm/partials/now_next_later.html", { - "request": request, "now_task": get_now_task(db), "next_task": get_next_task(db), "later_tasks_count": len(get_later_tasks(db)), @@ -316,9 +317,9 @@ async def complete_task( promote_tasks(db) return templates.TemplateResponse( + request, "calm/partials/now_next_later.html", { - "request": request, "now_task": get_now_task(db), "next_task": get_next_task(db), "later_tasks_count": len(get_later_tasks(db)), @@ -345,9 +346,9 @@ async def defer_task( promote_tasks(db) return templates.TemplateResponse( + request, "calm/partials/now_next_later.html", { - "request": request, "now_task": get_now_task(db), "next_task": get_next_task(db), "later_tasks_count": len(get_later_tasks(db)), @@ -360,8 +361,7 @@ async def get_later_tasks_list(request: Request, db: Session = Depends(get_db)): """Render the expandable list of LATER tasks.""" later_tasks = get_later_tasks(db) return templates.TemplateResponse( - "calm/partials/later_tasks_list.html", - {"request": request, "later_tasks": later_tasks}, + request, "calm/partials/later_tasks_list.html", {"later_tasks": later_tasks} ) @@ -404,9 +404,9 @@ async def reorder_tasks( # Re-render the relevant parts of the UI return templates.TemplateResponse( + request, "calm/partials/now_next_later.html", { - "request": request, "now_task": get_now_task(db), "next_task": get_next_task(db), "later_tasks_count": len(get_later_tasks(db)), diff --git a/src/dashboard/routes/tools.py b/src/dashboard/routes/tools.py index d65ed9a4..0325e956 100644 --- a/src/dashboard/routes/tools.py +++ b/src/dashboard/routes/tools.py @@ -40,9 +40,9 @@ async def tools_page(request: Request): total_calls = 0 return templates.TemplateResponse( + request, "tools.html", { - "request": request, "available_tools": available_tools, "agent_tools": agent_tools, "total_calls": total_calls,