tasks.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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.deps import ApiDependencies
  6. from app.api.v1.utils import parse_json, validation_error_response
  7. from app.api.v1.utils import RunTaskRequest, TaskListRequest
  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({"code": 0, "message": "success", "data": result})
  32. return bp