| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- import logging
- import time
- from typing import Any
- from app.service.task.base_task import BaseTask
- from app.service.task.task_param import TaskParam
- from app.service.task.task_result import TaskResult
- from app.util.download_util import download_files
- logger = logging.getLogger(__name__)
- class FileDownloadTask(BaseTask):
- def get_type(self) -> str:
- return "file_download"
- def execute(self, param: TaskParam) -> TaskResult:
- try:
- files_obj = param.inputs.get("files")
- files: list[str] = files_obj if isinstance(files_obj, list) else []
- if not files:
- return TaskResult.failure("No files provided for download")
- if not param.workspace:
- return TaskResult.failure("Workspace path is not provided")
- logger.info("[file_download] Starting: %d files to download, workspace=%s", len(files), param.workspace)
- t0 = time.time()
- downloaded = download_files(files, param.workspace, param.step_id)
- elapsed = time.time() - t0
- if not downloaded:
- logger.warning("[file_download] No files were successfully downloaded in %.2fs", elapsed)
- return TaskResult.failure("No files were successfully downloaded")
- logger.info("[file_download] Completed: %d/%d files downloaded in %.2fs",
- len(downloaded), len(files), elapsed)
- return TaskResult.success({"files": downloaded})
- except Exception as e:
- logger.error("[file_download] Error: %s", e, exc_info=True)
- return TaskResult.failure(f"File download failed: {e}")
|