From 2edf7bb628932f36107f538e1f5b3580db51831d Mon Sep 17 00:00:00 2001 From: Samir Boulahtit Date: Sat, 20 Dec 2025 13:49:36 +0100 Subject: [PATCH] fix: use sqlalchemy.case() instead of func.case() for conditional aggregation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit func.case() is not valid SQLAlchemy - case() must be imported directly from sqlalchemy. This was causing TypeError on /api/v1/admin/background-tasks/tasks/stats. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- app/services/background_tasks_service.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/services/background_tasks_service.py b/app/services/background_tasks_service.py index 68c5b409..46c66d3c 100644 --- a/app/services/background_tasks_service.py +++ b/app/services/background_tasks_service.py @@ -6,7 +6,7 @@ Service for monitoring background tasks across the system from datetime import UTC, datetime -from sqlalchemy import desc, func +from sqlalchemy import case, desc, func from sqlalchemy.orm import Session from models.database.marketplace_import_job import MarketplaceImportJob @@ -55,10 +55,10 @@ class BackgroundTasksService: stats = db.query( func.count(MarketplaceImportJob.id).label("total"), func.sum( - func.case((MarketplaceImportJob.status == "processing", 1), else_=0) + case((MarketplaceImportJob.status == "processing", 1), else_=0) ).label("running"), func.sum( - func.case( + case( ( MarketplaceImportJob.status.in_( ["completed", "completed_with_errors"] @@ -69,7 +69,7 @@ class BackgroundTasksService: ) ).label("completed"), func.sum( - func.case((MarketplaceImportJob.status == "failed", 1), else_=0) + case((MarketplaceImportJob.status == "failed", 1), else_=0) ).label("failed"), ).first() @@ -96,14 +96,14 @@ class BackgroundTasksService: stats = db.query( func.count(TestRun.id).label("total"), - func.sum(func.case((TestRun.status == "running", 1), else_=0)).label( + func.sum(case((TestRun.status == "running", 1), else_=0)).label( "running" ), - func.sum(func.case((TestRun.status == "passed", 1), else_=0)).label( + func.sum(case((TestRun.status == "passed", 1), else_=0)).label( "completed" ), func.sum( - func.case((TestRun.status.in_(["failed", "error"]), 1), else_=0) + case((TestRun.status.in_(["failed", "error"]), 1), else_=0) ).label("failed"), func.avg(TestRun.duration_seconds).label("avg_duration"), ).first()