main.py 8.2 KB

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