You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

287 lines
9.4 KiB

4 months ago
# from flask import Flask, request, jsonify, Response
5 months ago
import os
from checkPlaceName import checkPlaceName
from checkRepeatText import checkRepeatText
from checkCompanyName import checkCompanyName
4 months ago
from checkDocumentError import checkDocumentError
5 months ago
from checkTitleName import checkTitleName
4 months ago
# from flask_cors import CORS
5 months ago
import qwen_agenttext
4 months ago
from myLogger import outLog
import time
4 months ago
# 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=["*"]
)
5 months ago
UPLOAD_FOLDER = 'uploads'
if not os.path.exists(UPLOAD_FOLDER):
os.makedirs(UPLOAD_FOLDER)
4 months ago
4 months ago
# @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
4 months ago
id = 0
4 months ago
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):
4 months ago
id = 0
4 months ago
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):
5 months ago
id = 0
4 months ago
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):
5 months ago
id = 0
4 months ago
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):
5 months ago
id = 0
4 months ago
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):
4 months ago
id = 0
4 months ago
global outLog
await asyncio.sleep(5)
4 months ago
while True:
4 months ago
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连接已中断"
}
4 months ago
break
4 months ago
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": "任务结束!!!!"
}
4 months ago
outLog.del_queue(userId)
4 months ago
# 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)
5 months ago
if __name__ == '__main__':
4 months ago
# 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()