From befca95d3258a37a7fc2a0d60e7fe1721b802ff6 Mon Sep 17 00:00:00 2001 From: Pradip-p Date: Tue, 8 Oct 2024 10:44:21 +0545 Subject: [PATCH] feat: updated the task as completed after process from s3 --- src/backend/app/projects/image_processing.py | 19 +++++++++++++++++++ src/backend/app/projects/project_logic.py | 8 ++++++-- src/backend/app/projects/project_routes.py | 6 +++++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/backend/app/projects/image_processing.py b/src/backend/app/projects/image_processing.py index 09215ec8..d36d3424 100644 --- a/src/backend/app/projects/image_processing.py +++ b/src/backend/app/projects/image_processing.py @@ -2,10 +2,14 @@ import tempfile import shutil from pathlib import Path +from app.tasks import task_logic +from app.models.enums import State +from app.utils import timestamp from pyodm import Node from app.s3 import get_file_from_bucket, list_objects_from_bucket, add_file_to_bucket from loguru import logger as log from concurrent.futures import ThreadPoolExecutor +from psycopg import Connection class DroneImageProcessor: @@ -14,6 +18,8 @@ def __init__( node_odm_url: str, project_id: uuid.UUID, task_id: uuid.UUID, + user_id: str, + db: Connection, ): """ Initializes the connection to the ODM node. @@ -22,6 +28,8 @@ def __init__( self.node = Node.from_url(node_odm_url) self.project_id = project_id self.task_id = task_id + self.user_id = user_id + self.db = db def options_list_to_dict(self, options=[]): """ @@ -147,6 +155,17 @@ def process_images_from_s3(self, bucket_name, name=None, options=[]): # Upload the results into s3 s3_path = f"projects/{self.project_id}/{self.task_id}/assets.zip" add_file_to_bucket(bucket_name, path_to_download, s3_path) + # now update the task as completed in Db. + task_logic.update_task_state( + self.db, + self.project_id, + self.task_id, + self.user_id, + "Task completed.", + State.LOCKED_FOR_MAPPING, + State.UNLOCKED_DONE, + timestamp(), + ) return task finally: diff --git a/src/backend/app/projects/project_logic.py b/src/backend/app/projects/project_logic.py index 624337b3..d5a5dfc8 100644 --- a/src/backend/app/projects/project_logic.py +++ b/src/backend/app/projects/project_logic.py @@ -165,9 +165,13 @@ async def preview_split_by_square(boundary: str, meters: int): ) -def process_drone_images(project_id: uuid.UUID, task_id: uuid.UUID): +def process_drone_images( + project_id: uuid.UUID, task_id: uuid.UUID, user_id: str, db: Connection +): # Initialize the processor - processor = DroneImageProcessor(settings.NODE_ODM_URL, project_id, task_id) + processor = DroneImageProcessor( + settings.NODE_ODM_URL, project_id, task_id, user_id, db + ) # Define processing options options = [ diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index 24df12f1..2227611b 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -349,8 +349,12 @@ async def process_imagery( ], user_data: Annotated[AuthUser, Depends(login_required)], background_tasks: BackgroundTasks, + db: Annotated[Connection, Depends(database.get_db)], ): - background_tasks.add_task(project_logic.process_drone_images, project.id, task_id) + user_id = user_data.id + background_tasks.add_task( + project_logic.process_drone_images, project.id, task_id, user_id, db + ) return {"message": "Processing started"}