task_executor.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import logging
  2. from typing import Callable
  3. from app.service.task.base_task import BaseTask
  4. from app.service.task.task_param import TaskParam
  5. from app.service.task.task_result import TaskResult
  6. logger = logging.getLogger(__name__)
  7. class _NoopTask(BaseTask):
  8. def get_type(self) -> str:
  9. return "noop"
  10. def execute(self, param: TaskParam) -> TaskResult:
  11. logger.warning("[noop] No task implementation found for type=%s, returning empty success", param.type)
  12. return TaskResult.success({})
  13. class TaskExecutor:
  14. def __init__(self):
  15. self._registry: dict[str, BaseTask] = {}
  16. def register(self, type_name: str, task: BaseTask) -> "TaskExecutor":
  17. self._registry[type_name] = task
  18. return self
  19. def resolve(self, type_name: str) -> BaseTask:
  20. task = self._registry.get(type_name)
  21. if task is None:
  22. logger.warning("No registered task for type '%s', using NoopTask", type_name)
  23. return _NoopTask()
  24. return task
  25. def registered_types(self) -> set[str]:
  26. return set(self._registry.keys())
  27. @classmethod
  28. def create_default(cls) -> "TaskExecutor":
  29. from app.service.task.impl.kontext_pro_task import KontextProTask
  30. from app.service.task.impl.kontext_max_task import KontextMaxTask
  31. from app.service.task.impl.keling_image2video_task import KelingImage2VideoTask
  32. from app.service.task.impl.keling_video2effect_task import KelingVideo2EffectTask
  33. from app.service.task.impl.smart_beauty_task import SmartBeautyTask
  34. from app.service.task.impl.video_editor_task import VideoEditorTask
  35. from app.service.task.impl.image_editor_task import ImageEditorTask
  36. from app.service.task.impl.file_download_task import FileDownloadTask
  37. from app.service.task.impl.file_upload_task import FileUploadTask
  38. from app.service.task.impl.base64_decode_task import Base64DecodeTask
  39. from app.service.task.impl.base64_encode_task import Base64EncodeTask
  40. from app.service.task.impl.nano_banana_task import NanoBananaTask
  41. from app.service.task.impl.google_veo3_task import GoogleVeo3Task
  42. from app.service.task.impl.seedance_video_task import SeedanceVideoTask
  43. from app.service.task.impl.seedream_image_task import SeedreamImageTask
  44. executor = cls()
  45. tasks: list[BaseTask] = [
  46. KontextProTask(),
  47. KontextMaxTask(),
  48. KelingImage2VideoTask(),
  49. KelingVideo2EffectTask(),
  50. SmartBeautyTask(),
  51. VideoEditorTask(),
  52. ImageEditorTask(),
  53. FileDownloadTask(),
  54. FileUploadTask(),
  55. Base64DecodeTask(),
  56. Base64EncodeTask(),
  57. NanoBananaTask(),
  58. GoogleVeo3Task(),
  59. SeedanceVideoTask(),
  60. SeedreamImageTask(),
  61. ]
  62. for t in tasks:
  63. executor.register(t.get_type(), t)
  64. return executor