fix UI 500 + slow backup with millions of processed_mails
- fix: Starlette 1.0 changed TemplateResponse signature — request is now the first positional argument, not nested inside the context dict. All HTML routes returned 500 (unhashable dict in jinja2 template cache) after the image rebuild picked up the new starlette version. - fix: processed_mails (1.7M rows in production: 1 account × 12 rules × 141k inbox mails) made backup export hit 558 MB / 90s. Moved to opt-in checkbox in the UI alongside the logs option, default off. - yield_per for streaming the processed_mails query when included. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+7
-8
@@ -89,31 +89,30 @@ def dashboard(request: Request, db: Session = Depends(get_db)):
|
||||
"last_poll_at": acc.last_poll_at,
|
||||
"filter_rule_count": len(acc.filter_rules),
|
||||
})
|
||||
return templates.TemplateResponse("dashboard.html", {"request": request, "accounts": account_list})
|
||||
return templates.TemplateResponse(request, "dashboard.html", {"accounts": account_list})
|
||||
|
||||
|
||||
@app.get("/accounts")
|
||||
def accounts_page(request: Request, db: Session = Depends(get_db)):
|
||||
accs = db.query(Account).order_by(Account.name).all()
|
||||
return templates.TemplateResponse("accounts.html", {"request": request, "accounts": accs})
|
||||
return templates.TemplateResponse(request, "accounts.html", {"accounts": accs})
|
||||
|
||||
|
||||
@app.get("/accounts/new")
|
||||
def new_account_page(request: Request):
|
||||
return templates.TemplateResponse("account_form.html", {"request": request, "account": None})
|
||||
return templates.TemplateResponse(request, "account_form.html", {"account": None})
|
||||
|
||||
|
||||
@app.get("/accounts/{account_id}/edit")
|
||||
def edit_account_page(account_id: int, request: Request, db: Session = Depends(get_db)):
|
||||
account = db.get(Account, account_id)
|
||||
return templates.TemplateResponse("account_form.html", {"request": request, "account": account})
|
||||
return templates.TemplateResponse(request, "account_form.html", {"account": account})
|
||||
|
||||
|
||||
@app.get("/filters")
|
||||
def filters_page(request: Request, account_id: int = 0, db: Session = Depends(get_db)):
|
||||
accs = db.query(Account).order_by(Account.name).all()
|
||||
return templates.TemplateResponse("filters.html", {
|
||||
"request": request,
|
||||
return templates.TemplateResponse(request, "filters.html", {
|
||||
"accounts": accs,
|
||||
"selected_account_id": account_id,
|
||||
})
|
||||
@@ -121,10 +120,10 @@ def filters_page(request: Request, account_id: int = 0, db: Session = Depends(ge
|
||||
|
||||
@app.get("/yaml")
|
||||
def yaml_page(request: Request):
|
||||
return templates.TemplateResponse("yaml.html", {"request": request})
|
||||
return templates.TemplateResponse(request, "yaml.html", {})
|
||||
|
||||
|
||||
@app.get("/logs")
|
||||
def logs_page(request: Request, db: Session = Depends(get_db)):
|
||||
accs = db.query(Account).order_by(Account.name).all()
|
||||
return templates.TemplateResponse("logs.html", {"request": request, "accounts": accs})
|
||||
return templates.TemplateResponse(request, "logs.html", {"accounts": accs})
|
||||
|
||||
Reference in New Issue
Block a user