main.py 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  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 fastapi.middleware.cors import CORSMiddleware
  7. from pydantic import BaseModel
  8. from utils.params import TaskStatusParam, DecodeListParam,TopicListParam,EvaluateListParam,EvaluateStatusParam,DecodeWorkflowParam
  9. from dotenv import load_dotenv, find_dotenv
  10. from decode_task.decodeTask import get_decode_result_by_id as get_decode_result_by_id_db
  11. from decode_task.evaluateTask import get_evaluate_result_by_id as get_evaluate_result_by_id_db
  12. from decode_task.topicTask import get_topic_result_by_id as get_topic_result_by_id_db
  13. from decode_task.topicTask import update_topic_result_by_id as update_topic_result_by_id_db
  14. from decode_task.topicTask import search_topic_list as search_topic_list_db
  15. from typing import List
  16. from models.decode_record import DecodeRecord
  17. from models.evaluate_record import EvaluateRecord
  18. from models.decode_workflow import DecodeWorkflow
  19. from task_schedule import TaskScheduler
  20. from loguru import logger
  21. import sys
  22. logger.add(sink=sys.stderr, level="ERROR", backtrace=True, diagnose=True)
  23. load_dotenv(find_dotenv(), override=False)
  24. app = FastAPI()
  25. scheduler = TaskScheduler()
  26. app.add_middleware(
  27. CORSMiddleware,
  28. allow_origins=["*"],
  29. allow_credentials=True,
  30. allow_methods=["*"],
  31. allow_headers=["*"],
  32. )
  33. @app.exception_handler(HTTPException)
  34. async def http_exception_handler(request: Request, exc: HTTPException):
  35. return JSONResponse(
  36. status_code=200,
  37. content={"code": exc.status_code, "message": exc.message, "data": None}
  38. )
  39. @app.on_event("startup")
  40. def startup_event():
  41. scheduler.start()
  42. @app.post("/decodeWorkflow/create")
  43. def decode_list():
  44. logger.info(f"数据池数据 = {video_list}")
  45. data_list = []
  46. for video in video_list:
  47. video_id = video.video_id
  48. video_url = video.video_url
  49. video_title = video.title
  50. task_id = str(uuid.uuid4())
  51. DecodeWorkflow(
  52. task_id=task_id,
  53. video_id=video_id,
  54. video_url=video_url,
  55. title=video_title,
  56. type=param.type,
  57. result=None,
  58. ).save()
  59. data_list.append({
  60. "task_id": task_id,
  61. "video_id": video_id,
  62. "video_url": video_url,
  63. "title": video_title,
  64. "task_status": 0,
  65. "type": param.type,
  66. })
  67. return {
  68. "code": 0,
  69. "message": "success",
  70. "data":{
  71. "type": param.type,
  72. "tasks": data_list
  73. }
  74. }
  75. @app.post("/decodeWorkflow/create")
  76. def decode_topic(param:TopicListParam):
  77. video_list = param.video_list
  78. logger.info(f"数据池数据 = {video_list}")
  79. data_list = []
  80. for video in video_list:
  81. video_id = video.video_id
  82. video_url = video.video_url
  83. video_title = video.title
  84. task_id = str(uuid.uuid4())
  85. DecodeWorkflow(
  86. task_id=task_id,
  87. video_id=video_id,
  88. video_url=video_url,
  89. title=video_title,
  90. type=param.type,
  91. result=None,
  92. ).save()
  93. data_list.append({
  94. "task_id": task_id,
  95. "video_id": video_id,
  96. "video_url": video_url,
  97. "title": video_title,
  98. "task_status": 0,
  99. "type": param.type,
  100. })
  101. return {
  102. "code": 0,
  103. "message": "success",
  104. "data":{
  105. "type": param.type,
  106. "tasks": data_list
  107. }
  108. }
  109. @app.post("/decodeWorkflow/update")
  110. def update_topic_result(param: DecodeWorkflowParam):
  111. db_res = update_topic_result_by_id_db(param)
  112. logger.info(f"\n查询结构结果的task_id = {param.task_id}")
  113. if not db_res:
  114. return {
  115. "code": -1,
  116. "message": '任务不存在',
  117. "data": None
  118. }
  119. result, status,error_reason,video_url,title = db_res
  120. return {
  121. "code": 0,
  122. "message": status == 2 and "success" or error_reason,
  123. "data": {
  124. "result": result,
  125. "status": status,
  126. "error":error_reason,
  127. "video_url":video_url,
  128. "title":title,
  129. }
  130. }
  131. @app.post("/decodeWorkflow/result")
  132. def get_topic_result(param: TaskStatusParam):
  133. db_res = get_topic_result_by_id_db(param.task_id)
  134. logger.info(f"\n查询结构结果的task_id = {param.task_id}")
  135. if not db_res:
  136. return {
  137. "code": -1,
  138. "message": '任务不存在',
  139. "data": None
  140. }
  141. result, status,error_reason = db_res
  142. return {
  143. "code": 0,
  144. "message": status == 2 and "success" or error_reason,
  145. "data": {
  146. "result": result,
  147. "status": status,
  148. "error":error_reason,
  149. }
  150. }
  151. @app.post("/decodeWorkflow/list")
  152. def search_topic_list(param:DecodeWorkflowParam):
  153. tasks = search_topic_list_db(param)
  154. if not tasks:
  155. return {
  156. "code": -1,
  157. "message": "任务不存在",
  158. "data": []
  159. }
  160. return {
  161. "code": 0,
  162. "message": "success",
  163. "data": tasks
  164. }
  165. @app.post("/decodeVideo/create")
  166. def decode_video(param:DecodeListParam):
  167. video_list = param.video_list
  168. logger.info(f"数据池数据 = {video_list}")
  169. data_list = []
  170. for video in video_list:
  171. video_id = video.channel_content_id
  172. video_url = video.video
  173. task_id = str(uuid.uuid4())
  174. DecodeRecord(
  175. task_id=task_id,
  176. video_id=video_id,
  177. video_url=video_url,
  178. task_status = 0
  179. ).save()
  180. data_list.append({
  181. "task_id": task_id,
  182. "video_id": video_id,
  183. })
  184. return {
  185. "code": 0,
  186. "message": "success",
  187. "data": data_list
  188. }
  189. @app.post("/decode/result")
  190. def get_decode_result(param: TaskStatusParam):
  191. db_res = get_decode_result_by_id_db(param.task_id)
  192. logger.info(f"\n查询结构结果的task_id = {param.task_id}")
  193. if not db_res:
  194. return {
  195. "code": -1,
  196. "message": '任务不存在',
  197. "data": None
  198. }
  199. result, status,error_reason,search_keywords = db_res
  200. return {
  201. "code": 0,
  202. "message": status == 2 and "success" or error_reason,
  203. "data": {
  204. "result": result,
  205. "status": status,
  206. "error":error_reason,
  207. "searchKeyword":search_keywords
  208. }
  209. }
  210. @app.post("/evaluate/create")
  211. def evaluate_video(param:EvaluateListParam):
  212. evaluate_list = param.evaluate_list
  213. logger.info(f"创建评估数据 = {evaluate_list}")
  214. data_list = []
  215. for evaluate in evaluate_list:
  216. evaluate_id = str(uuid.uuid4())
  217. task_id = evaluate.task_id
  218. channel_content_id = evaluate.channel_content_id
  219. EvaluateRecord(
  220. evaluate_id=evaluate_id,
  221. task_id=task_id,
  222. search_result= json.dumps(evaluate.result),
  223. evaluate_result=None,
  224. error_reason=None,
  225. status = 0
  226. ).save()
  227. data_list.append({
  228. "task_id": task_id,
  229. "evaluate_id": evaluate_id,
  230. "channel_content_id":channel_content_id
  231. })
  232. return {
  233. "code": 0,
  234. "message": "success",
  235. "data": data_list
  236. }
  237. @app.post("/evaluate/result")
  238. def get_evaluate_result(param: EvaluateStatusParam):
  239. db_res = get_evaluate_result_by_id_db(param.evaluate_id)
  240. logger.info(f"\n查询评估结果的evaluate_id = {param.evaluate_id}")
  241. if not db_res:
  242. return {
  243. "code": -1,
  244. "message": '评估不存在',
  245. "data": None
  246. }
  247. result, status,error_reason = db_res
  248. return {
  249. "code": 0,
  250. "message": status == 2 and "success" or error_reason,
  251. "data": {
  252. "result": result,
  253. "status": status,
  254. "error":error_reason,
  255. }
  256. }