base64_encode_task.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import logging
  2. import os
  3. import time
  4. from typing import Any
  5. from app.service.task.base_task import BaseTask
  6. from app.service.task.task_param import TaskParam
  7. from app.service.task.task_result import TaskResult
  8. from app.util.file_util import base64_content
  9. logger = logging.getLogger(__name__)
  10. class Base64EncodeTask(BaseTask):
  11. def get_type(self) -> str:
  12. return "base64_encode"
  13. def execute(self, param: TaskParam) -> TaskResult:
  14. try:
  15. files_obj = param.inputs.get("files")
  16. files: list[str] = files_obj if isinstance(files_obj, list) else []
  17. if not files:
  18. return TaskResult.failure("No files provided for base64 encoding")
  19. if not param.workspace:
  20. return TaskResult.failure("Workspace path is not provided")
  21. logger.info("[base64_encode] Starting: %d files to encode", len(files))
  22. t0 = time.time()
  23. encoded: list[str] = []
  24. for i, fp in enumerate(files):
  25. try:
  26. full_path = os.path.join(param.workspace, fp)
  27. if not os.path.isfile(full_path):
  28. logger.warning("[base64_encode] File %d/%d does not exist: %s", i + 1, len(files), full_path)
  29. continue
  30. file_size = os.path.getsize(full_path)
  31. b64 = base64_content(full_path)
  32. encoded.append(b64)
  33. logger.info("[base64_encode] Encoded file %d/%d: %s (file_size=%d, base64_len=%d)",
  34. i + 1, len(files), fp, file_size, len(b64))
  35. except Exception as e:
  36. logger.error("[base64_encode] Failed to encode file %d/%d %s: %s", i + 1, len(files), fp, e)
  37. if not encoded:
  38. return TaskResult.failure("No files were successfully encoded")
  39. logger.info("[base64_encode] Completed: %d/%d encoded in %.2fs",
  40. len(encoded), len(files), time.time() - t0)
  41. return TaskResult.success({"files": encoded})
  42. except Exception as e:
  43. logger.error("[base64_encode] Error: %s", e, exc_info=True)
  44. return TaskResult.failure(f"Base64 encoding failed: {e}")