main.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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,EvaluateListParam
  8. from dotenv import load_dotenv
  9. from decode_task.decodeTask import get_decode_result_by_id as get_decode_result_by_id_db
  10. from typing import List
  11. from models.decode_record import DecodeRecord
  12. from models.evaluate_record import EvaluateRecord
  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. video_list = param.video_list
  32. logger.info(f"数据池数据 = {video_list}")
  33. data_list = []
  34. for video in video_list:
  35. video_id = video.channel_content_id
  36. video_url = video.video
  37. task_id = str(uuid.uuid4())
  38. DecodeRecord(
  39. task_id=task_id,
  40. video_id=video_id,
  41. video_url=video_url,
  42. task_status = 0
  43. ).save()
  44. data_list.append({
  45. "task_id": task_id,
  46. "video_id": video_id,
  47. })
  48. return {
  49. "code": 0,
  50. "message": "success",
  51. "data": data_list
  52. }
  53. @app.post("/decode/result")
  54. def get_decode_result(param: TaskStatusParam):
  55. db_res = get_decode_result_by_id_db(param.task_id)
  56. logger.info(f"\n查询结构结果的task_id = {param.task_id}")
  57. if not db_res:
  58. return {
  59. "code": -1,
  60. "message": '结构失败',
  61. "data": None
  62. }
  63. result, status,error_reason,search_keywords = db_res
  64. if status == 2:
  65. return {
  66. "code": 0,
  67. "message": "success",
  68. "data": {
  69. "result": result,
  70. "status": status,
  71. "searchKeyword":search_keywords
  72. }
  73. }
  74. else:
  75. return {
  76. "code": -1,
  77. "message": error_reason,
  78. "data": None
  79. }
  80. @app.post("/evaluate/create")
  81. def evaluate_video(param:EvaluateListParam):
  82. evaluate_list = param.evaluate_list
  83. logger.info(f"创建评估数据 = {evaluate_list}")
  84. data_list = []
  85. for evaluate in evaluate_list:
  86. evaluate_id = str(uuid.uuid4())
  87. task_id = evaluate.task_id
  88. channel_content_id = evaluate.channel_content_id
  89. EvaluateRecord(
  90. evaluate_id=evaluate_id,
  91. task_id=task_id,
  92. search_result= json.dumps(evaluate.result),
  93. evaluate_result=None,
  94. error_reason=None,
  95. status = 0
  96. ).save()
  97. data_list.append({
  98. "task_id": task_id,
  99. "evaluate_id": evaluate_id,
  100. "channel_content_id":channel_content_id
  101. })
  102. return {
  103. "code": 0,
  104. "message": "success",
  105. "data": data_list
  106. }