base64_decode_task.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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 generate_unique_filename, base64_to_file
  9. logger = logging.getLogger(__name__)
  10. class Base64DecodeTask(BaseTask):
  11. def get_type(self) -> str:
  12. return "base64_decode"
  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 decoding")
  19. if not param.workspace:
  20. return TaskResult.failure("Workspace path is not provided")
  21. logger.info("[base64_decode] Starting: %d files to decode", len(files))
  22. t0 = time.time()
  23. decoded_files: list[str] = []
  24. for i, b64 in enumerate(files):
  25. try:
  26. name = generate_unique_filename(".png")
  27. rel_path = os.path.join(param.step_id, name)
  28. abs_path = os.path.join(param.workspace, rel_path)
  29. base64_to_file(b64, abs_path)
  30. decoded_files.append(rel_path)
  31. logger.info("[base64_decode] Decoded file %d/%d -> %s (base64_len=%d)",
  32. i + 1, len(files), rel_path, len(b64))
  33. except Exception as e:
  34. logger.error("[base64_decode] Failed to decode file %d/%d: %s", i + 1, len(files), e)
  35. if not decoded_files:
  36. return TaskResult.failure("No files were successfully decoded")
  37. logger.info("[base64_decode] Completed: %d/%d decoded in %.2fs",
  38. len(decoded_files), len(files), time.time() - t0)
  39. return TaskResult.success({"files": decoded_files})
  40. except Exception as e:
  41. logger.error("[base64_decode] Error: %s", e, exc_info=True)
  42. return TaskResult.failure(f"Base64 decoding failed: {e}")