file_download_task.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import logging
  2. import time
  3. from typing import Any
  4. from app.service.task.base_task import BaseTask
  5. from app.service.task.task_param import TaskParam
  6. from app.service.task.task_result import TaskResult
  7. from app.util.download_util import download_files
  8. logger = logging.getLogger(__name__)
  9. class FileDownloadTask(BaseTask):
  10. def get_type(self) -> str:
  11. return "file_download"
  12. def execute(self, param: TaskParam) -> TaskResult:
  13. try:
  14. files_obj = param.inputs.get("files")
  15. files: list[str] = files_obj if isinstance(files_obj, list) else []
  16. if not files:
  17. return TaskResult.failure("No files provided for download")
  18. if not param.workspace:
  19. return TaskResult.failure("Workspace path is not provided")
  20. logger.info("[file_download] Starting: %d files to download, workspace=%s", len(files), param.workspace)
  21. t0 = time.time()
  22. downloaded = download_files(files, param.workspace, param.step_id)
  23. elapsed = time.time() - t0
  24. if not downloaded:
  25. logger.warning("[file_download] No files were successfully downloaded in %.2fs", elapsed)
  26. return TaskResult.failure("No files were successfully downloaded")
  27. logger.info("[file_download] Completed: %d/%d files downloaded in %.2fs",
  28. len(downloaded), len(files), elapsed)
  29. return TaskResult.success({"files": downloaded})
  30. except Exception as e:
  31. logger.error("[file_download] Error: %s", e, exc_info=True)
  32. return TaskResult.failure(f"File download failed: {e}")