From f91ad4c3f12d9b1a9c0dafd93336c2a02432eeb8 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Thu, 27 Nov 2025 11:25:36 +0000 Subject: [PATCH] implemented tasks/subtasks for the first time --- backend/app/db/functions/tasks/Tasks.py | 7 +++++-- backend/engine/engine.py | 5 +++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/backend/app/db/functions/tasks/Tasks.py b/backend/app/db/functions/tasks/Tasks.py index 5a3ae699..12a2e51b 100644 --- a/backend/app/db/functions/tasks/Tasks.py +++ b/backend/app/db/functions/tasks/Tasks.py @@ -25,17 +25,20 @@ class SubTaskInterface: # -------------------------------------------------------- # CREATE SUBTASK # -------------------------------------------------------- - def create_subtask(self, task_id: UUID, inputs: Optional[Dict[str, Any]] = None): + def create_subtask(self, task_id: UUID, inputs: Optional[Dict[str, Any]] = None, status=None): with get_db_session() as session: task = session.get(Task, task_id) if not task: raise ValueError(f"Task {task_id} not found") + # We treat waiting as the default status + status = "waiting" if status is None else status + subtask = SubTask( task_id=task_id, inputs=json.dumps(inputs) if inputs else None, - status="waiting", + status=status, job_started=None, job_completed=None, ) diff --git a/backend/engine/engine.py b/backend/engine/engine.py index a172972a..be770d8e 100644 --- a/backend/engine/engine.py +++ b/backend/engine/engine.py @@ -5,6 +5,7 @@ from datetime import datetime from tqdm import tqdm import pandas as pd import numpy as np +from uuid import UUID from backend.Funding import Funding from backend.SearchEpc import SearchEpc @@ -17,6 +18,7 @@ from starlette.responses import Response from backend.app.config import get_settings, get_prediction_buckets from backend.app.db.connection import db_engine import backend.app.db.functions as db_funcs +from backend.app.db.functions.tasks.Tasks import SubTaskInterface from backend.app.db.models.portfolio import rating_lookup from backend.app.plan.schemas import PlanTriggerRequest, WALL_INSULATION_MEASURES, ROOF_INSULATION_MEASURES @@ -1277,6 +1279,9 @@ async def model_engine(body: PlanTriggerRequest): finally: session.close() + # Mark the subtask as successful + SubTaskInterface().update_subtask_status(subtask_id=UUID(body.subtask_id), status="failed") + logger.info("Model Engine completed successfully") return Response(status_code=200)