main.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. from ast import main
  2. import json
  3. import uuid
  4. from fastapi import FastAPI, HTTPException, Request
  5. from fastapi.responses import JSONResponse
  6. from pydantic import BaseModel
  7. from utils.params import TaskStatusParam, DecodeListParam
  8. from dotenv import load_dotenv
  9. from decode_task.decodeTask import get_decode_result_by_id
  10. from typing import List
  11. from models.decode_record import DecodeRecord
  12. from task_schedule import TaskScheduler
  13. from loguru import logger
  14. import sys
  15. logger.add(sink=sys.stderr, level="ERROR", backtrace=True, diagnose=True)
  16. load_dotenv()
  17. app = FastAPI()
  18. scheduler = TaskScheduler()
  19. @app.exception_handler(HTTPException)
  20. async def http_exception_handler(request: Request, exc: HTTPException):
  21. return JSONResponse(
  22. status_code=200,
  23. content={"code": exc.status_code, "message": exc.message, "data": None}
  24. )
  25. @app.on_event("startup")
  26. def startup_event():
  27. scheduler.start()
  28. @app.post("/decodeVideo/create")
  29. def decode_video(param:DecodeListParam):
  30. video_list = param.video_list
  31. data_list = []
  32. for video in video_list:
  33. video_id = video.channel_content_id
  34. video_url = video.video
  35. task_id = str(uuid.uuid4())
  36. DecodeRecord(
  37. task_id=task_id,
  38. video_id=video_id,
  39. video_url=video_url,
  40. task_status = 0
  41. ).save()
  42. data_list.append({
  43. "task_id": task_id,
  44. "video_id": video_id,
  45. })
  46. return {
  47. "code": 0,
  48. "message": "success",
  49. "data": data_list
  50. }
  51. @app.post("/decode/result")
  52. def get_decode_result_by_id(param: TaskStatusParam):
  53. result, status = get_decode_result_by_id(param.task_id)
  54. if result:
  55. return {
  56. "code": 0,
  57. "message": "success",
  58. "data": {
  59. "decode_result": result,
  60. "task_status": status
  61. }
  62. }
  63. else:
  64. return {
  65. "code": -1,
  66. "message": "error",
  67. "data": None
  68. }