main.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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 decode_task.scriptTask import get_script_result_by_id
  11. from typing import List
  12. from models.decode_record import DecodeRecord
  13. from task_schedule import TaskScheduler
  14. from loguru import logger
  15. import sys
  16. logger.add(sink=sys.stderr, level="ERROR", backtrace=True, diagnose=True)
  17. load_dotenv()
  18. app = FastAPI()
  19. scheduler = TaskScheduler()
  20. @app.exception_handler(HTTPException)
  21. async def http_exception_handler(request: Request, exc: HTTPException):
  22. return JSONResponse(
  23. status_code=200,
  24. content={"code": exc.status_code, "message": exc.message, "data": None}
  25. )
  26. @app.on_event("startup")
  27. def startup_event():
  28. scheduler.start()
  29. @app.post("/decodeVideo/create")
  30. def decode_video(param:DecodeListParam):
  31. task_id = str(uuid.uuid4())
  32. DecodeRecord(
  33. task_id=task_id,
  34. task_params=json.dumps(param.model_dump()),
  35. decode_result=None,
  36. script_result=None,
  37. task_status = 1
  38. ).save()
  39. return {
  40. "code": 0,
  41. "message": "success",
  42. "data": {
  43. "task_id": task_id
  44. }
  45. }
  46. @app.post("/decode/result")
  47. def get_decode_result(param: TaskStatusParam):
  48. decode_result, task_status = get_decode_result_by_id(param.task_id)
  49. if decode_result:
  50. return {
  51. "code": 0,
  52. "message": "success",
  53. "data": {
  54. "decode_result": decode_result,
  55. "task_status": task_status
  56. }
  57. }
  58. else:
  59. return {
  60. "code": -1,
  61. "message": "error",
  62. "data": None
  63. }
  64. @app.post("/script/result")
  65. def get_script_result(param: TaskStatusParam):
  66. decode_result,script_result, task_status = get_script_result_by_id(param.task_id)
  67. if script_result:
  68. return {
  69. "code": 0,
  70. "message": "success",
  71. "data": {
  72. "script_result": script_result,
  73. "decode_result": decode_result,
  74. "task_status": task_status
  75. }
  76. }
  77. else:
  78. return {
  79. "code": -1,
  80. "message": "error",
  81. "data": None
  82. }