tasks.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from __future__ import annotations
  2. from pydantic import ValidationError
  3. from quart import Blueprint, jsonify
  4. from app.api.service import TaskManager, TaskScheduler
  5. from app.api.v1.utils import ApiDependencies
  6. from app.api.v1.utils import RunTaskRequest, TaskListRequest
  7. from app.api.v1.utils import parse_json, validation_error_response
  8. from app.infra.shared.tools import generate_task_trace_id
  9. def create_tasks_bp(deps: ApiDependencies) -> Blueprint:
  10. bp = Blueprint("tasks", __name__)
  11. @bp.route("/run_task", methods=["POST"])
  12. async def run_task():
  13. trace_id = generate_task_trace_id()
  14. try:
  15. _, body = await parse_json(RunTaskRequest)
  16. except ValidationError as e:
  17. payload, status = validation_error_response(e)
  18. return jsonify(payload), status
  19. scheduler = TaskScheduler(body, deps.log, deps.db, trace_id, deps.config)
  20. result = await scheduler.deal()
  21. return jsonify(result)
  22. @bp.route("/tasks", methods=["POST"])
  23. async def list_tasks():
  24. try:
  25. _, body = await parse_json(TaskListRequest)
  26. except ValidationError as e:
  27. payload, status = validation_error_response(e)
  28. return jsonify(payload), status
  29. manager = TaskManager(pool=deps.db, data=body, config=deps.config)
  30. result = await manager.list_tasks()
  31. return jsonify(result)
  32. return bp