|
|
|
# from flask import Flask, request, jsonify, Response
|
|
|
|
import os
|
|
|
|
from checkPlaceName import checkPlaceName
|
|
|
|
from checkRepeatText import checkRepeatText
|
|
|
|
from checkCompanyName import checkCompanyName
|
|
|
|
from checkDocumentError import checkDocumentError
|
|
|
|
from checkTitleName import checkTitleName
|
|
|
|
# from flask_cors import CORS
|
|
|
|
import qwen_agenttext
|
|
|
|
from myLogger import outLog
|
|
|
|
import time
|
|
|
|
# app = Flask(__name__)
|
|
|
|
# cros = CORS(app)
|
|
|
|
import uvicorn
|
|
|
|
from fastapi import FastAPI, Request, File, UploadFile, HTTPException
|
|
|
|
from fastapi.responses import JSONResponse
|
|
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
|
|
from sse_starlette.sse import EventSourceResponse
|
|
|
|
import asyncio
|
|
|
|
|
|
|
|
app = FastAPI()
|
|
|
|
# 允许所有来源的跨域请求
|
|
|
|
app.add_middleware(
|
|
|
|
CORSMiddleware,
|
|
|
|
allow_origins=["*"],
|
|
|
|
allow_credentials=True,
|
|
|
|
allow_methods=["*"],
|
|
|
|
allow_headers=["*"]
|
|
|
|
)
|
|
|
|
|
|
|
|
UPLOAD_FOLDER = 'uploads'
|
|
|
|
if not os.path.exists(UPLOAD_FOLDER):
|
|
|
|
os.makedirs(UPLOAD_FOLDER)
|
|
|
|
|
|
|
|
|
|
|
|
# @app.route('/upload', methods=['POST'])
|
|
|
|
# def upload_file():
|
|
|
|
# if 'file' not in request.files:
|
|
|
|
# return jsonify({"error": "No file part"}), 400
|
|
|
|
# file = request.files['file']
|
|
|
|
# if file.filename == '':
|
|
|
|
# return jsonify({"error": "No selected file"}), 400
|
|
|
|
# if file:
|
|
|
|
# filename = file.filename
|
|
|
|
# file.save(os.path.join(UPLOAD_FOLDER, filename))
|
|
|
|
# return jsonify({"message": "File uploaded successfully"}), 200
|
|
|
|
@app.post("/sse/upload")
|
|
|
|
async def upload_file(file: UploadFile = File(...)):
|
|
|
|
if not file.filename:
|
|
|
|
raise HTTPException(status_code=400, detail="No selected file")
|
|
|
|
|
|
|
|
# 保存文件
|
|
|
|
try:
|
|
|
|
file_location = os.path.join(UPLOAD_FOLDER, file.filename)
|
|
|
|
with open(file_location, "wb") as f:
|
|
|
|
content = await file.read()
|
|
|
|
f.write(content)
|
|
|
|
return JSONResponse(content={"message": "文件上传成功"}, status_code=200)
|
|
|
|
except Exception as e:
|
|
|
|
raise HTTPException(status_code=500, detail="文件上传失败,错误信息:" + str(e))
|
|
|
|
|
|
|
|
|
|
|
|
@app.get("/sse")
|
|
|
|
async def root(request: Request):
|
|
|
|
async def event_generator(request: Request):
|
|
|
|
res_str = "七夕情人节即将来临,我们为您准备了精美的鲜花和美味的蛋糕"
|
|
|
|
for i in res_str:
|
|
|
|
if await request.is_disconnected():
|
|
|
|
print("连接已中断")
|
|
|
|
break
|
|
|
|
yield {
|
|
|
|
"event": "message",
|
|
|
|
"id": "7",
|
|
|
|
"data": f"{i}"
|
|
|
|
}
|
|
|
|
|
|
|
|
await asyncio.sleep(0.1)
|
|
|
|
|
|
|
|
g = event_generator(request)
|
|
|
|
return EventSourceResponse(g)
|
|
|
|
|
|
|
|
|
|
|
|
# def stream_numbers():
|
|
|
|
# context = request.args.get('context')
|
|
|
|
# # def generate_numbers():
|
|
|
|
# # event_id=0
|
|
|
|
# # for number in range(1, 10):
|
|
|
|
# # json_data = json.dumps({"number": number})
|
|
|
|
# # print(json_data)
|
|
|
|
# # event_id += 1
|
|
|
|
# # yield f"id: {event_id}\n"
|
|
|
|
# # yield f"event: time-update\n"
|
|
|
|
# # yield f"data: {json_data}\n\n" # 每次生成一个数字就发送
|
|
|
|
# # time.sleep(0.5) # 为了演示,加入短暂延迟
|
|
|
|
# # json_data = json.dumps({"number": "done"})
|
|
|
|
# # yield f"id: {1}\n"
|
|
|
|
# # yield f"event: time-update\n"
|
|
|
|
# # yield f"data: {json_data}\n\n" # 发送完成信号
|
|
|
|
|
|
|
|
# headers = {
|
|
|
|
# "Content-Type": "text/event-stream",
|
|
|
|
# "Cache-Control": "no-cache",
|
|
|
|
# "X-Accel-Buffering": "no",
|
|
|
|
# "Access-Control-Allow-Origin": "*",
|
|
|
|
# "Access-Control-Allow-Methods": "GET,POST",
|
|
|
|
# "Access-Control-Allow-Headers": "x-requested-with,content-type",
|
|
|
|
# }
|
|
|
|
# return Response(qwen_agenttext.getxinx(context), headers=headers)
|
|
|
|
|
|
|
|
@app.get("/sse/checkRepeatText")
|
|
|
|
async def checkRepeatTextWeb(filename, userId, request: Request):
|
|
|
|
async def generate_checkRepeatText(filename, userId, request: Request):
|
|
|
|
global outLog
|
|
|
|
id = 0
|
|
|
|
for i in checkRepeatText(filename, userId, outLog):
|
|
|
|
id += 1
|
|
|
|
if await request.is_disconnected():
|
|
|
|
yield {
|
|
|
|
"id": f"{id}",
|
|
|
|
"event": "checkRepeatText",
|
|
|
|
"data": "checkRepeatText连接已中断"
|
|
|
|
}
|
|
|
|
break
|
|
|
|
yield {
|
|
|
|
"id": f"{id}",
|
|
|
|
"event": "checkRepeatText",
|
|
|
|
"data": i
|
|
|
|
}
|
|
|
|
|
|
|
|
g = generate_checkRepeatText(filename, userId, request)
|
|
|
|
return EventSourceResponse(g)
|
|
|
|
|
|
|
|
|
|
|
|
@app.get('/sse/checkPlaceName')
|
|
|
|
def checkPlaceNameWebSse(filename, userId, request: Request):
|
|
|
|
async def generate_checkPlaceName(filename, userId, request: Request):
|
|
|
|
id = 0
|
|
|
|
global outLog
|
|
|
|
for i in checkPlaceName(filename, userId, outLog):
|
|
|
|
id += 1
|
|
|
|
if await request.is_disconnected():
|
|
|
|
yield {
|
|
|
|
"id": f"{id}",
|
|
|
|
"event": "checkPlaceName",
|
|
|
|
"data": "checkPlaceName连接已中断"
|
|
|
|
}
|
|
|
|
break
|
|
|
|
yield {
|
|
|
|
"id": f"{id}",
|
|
|
|
"event": "checkPlaceName",
|
|
|
|
"data": i
|
|
|
|
}
|
|
|
|
|
|
|
|
g = generate_checkPlaceName(filename, userId, request)
|
|
|
|
return EventSourceResponse(g)
|
|
|
|
|
|
|
|
|
|
|
|
@app.get('/sse/checkCompanyName')
|
|
|
|
def checkCompanyNameWebSse(filename, userId, request: Request):
|
|
|
|
async def generate_checkCompanyName(filename, userId, request: Request):
|
|
|
|
id = 0
|
|
|
|
global outLog
|
|
|
|
for i in checkCompanyName(filename, userId, outLog):
|
|
|
|
id += 1
|
|
|
|
if await request.is_disconnected():
|
|
|
|
yield {
|
|
|
|
"id": f"{id}",
|
|
|
|
"event": "checkCompanyName",
|
|
|
|
"data": "checkCompanyName连接已中断"
|
|
|
|
}
|
|
|
|
break
|
|
|
|
yield {
|
|
|
|
"id": f"{id}",
|
|
|
|
"event": "checkCompanyName",
|
|
|
|
"data": i
|
|
|
|
}
|
|
|
|
|
|
|
|
g = generate_checkCompanyName(filename, userId, request)
|
|
|
|
return EventSourceResponse(g)
|
|
|
|
|
|
|
|
|
|
|
|
@app.get('/sse/checkDocumentErrorWeb')
|
|
|
|
def checkDocumentErrorWebSse(filename, userId, request: Request):
|
|
|
|
async def generate_checkDocumentError(filename, userId, request: Request):
|
|
|
|
id = 0
|
|
|
|
global outLog
|
|
|
|
for i in checkDocumentError(filename, userId, outLog):
|
|
|
|
id += 1
|
|
|
|
if await request.is_disconnected():
|
|
|
|
yield {
|
|
|
|
"id": f"{id}",
|
|
|
|
"event": "checkDocumentError",
|
|
|
|
"data": "checkDocumentError连接已中断"
|
|
|
|
}
|
|
|
|
break
|
|
|
|
yield {
|
|
|
|
"id": f"{id}",
|
|
|
|
"event": "checkDocumentError",
|
|
|
|
"data": i
|
|
|
|
}
|
|
|
|
|
|
|
|
g = generate_checkDocumentError(filename, userId, request)
|
|
|
|
return EventSourceResponse(g)
|
|
|
|
|
|
|
|
|
|
|
|
@app.get('/sse/checkTitleName')
|
|
|
|
def checkTitleNameWebSse(filename, userId, request: Request):
|
|
|
|
async def generate_checkTitleName(filename, userId, request: Request):
|
|
|
|
id = 0
|
|
|
|
global outLog
|
|
|
|
for i in checkTitleName(filename, userId, outLog):
|
|
|
|
id += 1
|
|
|
|
if await request.is_disconnected():
|
|
|
|
yield {
|
|
|
|
"id": f"{id}",
|
|
|
|
"event": "checkTitleName",
|
|
|
|
"data": "checkTitleName连接已中断"
|
|
|
|
}
|
|
|
|
break
|
|
|
|
yield {
|
|
|
|
"id": f"{id}",
|
|
|
|
"event": "checkTitleName",
|
|
|
|
"data": i
|
|
|
|
}
|
|
|
|
|
|
|
|
g = generate_checkTitleName(filename, userId, request)
|
|
|
|
return EventSourceResponse(g)
|
|
|
|
|
|
|
|
|
|
|
|
@app.get("/sse/getLog")
|
|
|
|
# @app.route('/sse/getLog', methods=['GET'])
|
|
|
|
async def getlog(userId, request: Request):
|
|
|
|
# userId = request.args.get("userId")
|
|
|
|
async def generate_getLog(userId):
|
|
|
|
id = 0
|
|
|
|
global outLog
|
|
|
|
await asyncio.sleep(5)
|
|
|
|
while True:
|
|
|
|
isbreak = outLog.is_done(userId)
|
|
|
|
if isbreak:
|
|
|
|
break # 完成了
|
|
|
|
text = outLog.get_queueData(userId)
|
|
|
|
if await request.is_disconnected():
|
|
|
|
yield {
|
|
|
|
"id": f"{id}",
|
|
|
|
"event": "checkTitleName",
|
|
|
|
"data": "checkTitleName连接已中断"
|
|
|
|
}
|
|
|
|
break
|
|
|
|
if text:
|
|
|
|
id += 1
|
|
|
|
yield {
|
|
|
|
"id": id,
|
|
|
|
"event": "getlog",
|
|
|
|
"data": text
|
|
|
|
}
|
|
|
|
# yield f"id: {id}\n"
|
|
|
|
# yield f"event: getlog\n"
|
|
|
|
# yield f"data: {text}\n\n" # 发送完成信号
|
|
|
|
# yield f"id: {id}\n"
|
|
|
|
# yield f"event: getlog\n"
|
|
|
|
# yield f"data: 任务结束!!!!!\n\n" # 发送完成信号
|
|
|
|
yield {
|
|
|
|
"id": id,
|
|
|
|
"event": "getlog",
|
|
|
|
"data": "任务结束!!!!"
|
|
|
|
}
|
|
|
|
outLog.del_queue(userId)
|
|
|
|
|
|
|
|
# headers = {
|
|
|
|
# "Content-Type": "text/event-stream",
|
|
|
|
# "Cache-Control": "no-cache",
|
|
|
|
# "X-Accel-Buffering": "no",
|
|
|
|
# "Access-Control-Allow-Origin": "*",
|
|
|
|
# "Access-Control-Allow-Methods": "GET,POST",
|
|
|
|
# "Access-Control-Allow-Headers": "x-requested-with,content-type",
|
|
|
|
# }
|
|
|
|
g = generate_getLog(userId)
|
|
|
|
return EventSourceResponse(g)
|
|
|
|
# return Response(generate_getLog(userId), headers=headers)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
# app.run(host="0.0.0.0", port=80,threaded=True)
|
|
|
|
# uvicorn.run(app='main:app', host="0.0.0.0", port=80,workers=1)
|
|
|
|
app.run()
|