add waas modal部署
This commit is contained in:
@@ -1,14 +1,24 @@
|
||||
import aiohttp
|
||||
from workflow_service import comfyui_client
|
||||
from workflow_service import database
|
||||
import json
|
||||
import os
|
||||
from workflow_service import s3_client
|
||||
import uuid
|
||||
from workflow_service import workflow_parser
|
||||
from typing import Optional, List, Dict, Any, Set
|
||||
|
||||
import uvicorn
|
||||
from fastapi import FastAPI, Request, HTTPException, Path
|
||||
from fastapi.responses import JSONResponse
|
||||
from typing import Optional, List, Dict, Any, Set
|
||||
import json, uuid, os, shutil, aiohttp, database, workflow_parser, comfyui_client, s3_client
|
||||
from config import settings
|
||||
|
||||
app = FastAPI(title="ComfyUI Workflow Service & Management API")
|
||||
from workflow_service.config import Settings
|
||||
settings = Settings()
|
||||
|
||||
web_app = FastAPI(title="ComfyUI Workflow Service & Management API")
|
||||
|
||||
|
||||
@app.on_event("startup")
|
||||
@web_app.on_event("startup")
|
||||
async def startup_event(): await database.init_db(); os.makedirs(settings.COMFYUI_INPUT_DIR,
|
||||
exist_ok=True); os.makedirs(
|
||||
settings.COMFYUI_OUTPUT_DIR, exist_ok=True)
|
||||
@@ -19,17 +29,20 @@ async def startup_event(): await database.init_db(); os.makedirs(settings.COMFYU
|
||||
BASE_MANAGEMENT_PATH = "/api/workflow"
|
||||
|
||||
|
||||
@app.post(BASE_MANAGEMENT_PATH, status_code=200)
|
||||
@web_app.post(BASE_MANAGEMENT_PATH, status_code=200)
|
||||
async def publish_workflow_endpoint(request: Request):
|
||||
try:
|
||||
data = await request.json(); name, wf_json = data.get("name"), data.get(
|
||||
"workflow"); await database.save_workflow(name, json.dumps(wf_json)); return JSONResponse(
|
||||
data = await request.json();
|
||||
name, wf_json = data.get("name"), data.get(
|
||||
"workflow");
|
||||
await database.save_workflow(name, json.dumps(wf_json));
|
||||
return JSONResponse(
|
||||
content={"status": "success", "message": f"Workflow '{name}' published."}, status_code=200)
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=f"Failed to save workflow: {e}")
|
||||
|
||||
|
||||
@app.get(BASE_MANAGEMENT_PATH, response_model=List[dict])
|
||||
@web_app.get(BASE_MANAGEMENT_PATH, response_model=List[dict])
|
||||
async def get_all_workflows_endpoint():
|
||||
try:
|
||||
return await database.get_all_workflows()
|
||||
@@ -37,7 +50,7 @@ async def get_all_workflows_endpoint():
|
||||
raise HTTPException(status_code=500, detail=f"Failed to get workflows: {e}")
|
||||
|
||||
|
||||
@app.delete(f"{BASE_MANAGEMENT_PATH}/{{workflow_name:path}}")
|
||||
@web_app.delete(f"{BASE_MANAGEMENT_PATH}/{{workflow_name:path}}")
|
||||
async def delete_workflow_endpoint(workflow_name: str = Path(..., title="...")):
|
||||
try:
|
||||
success = await database.delete_workflow(workflow_name);
|
||||
@@ -75,7 +88,7 @@ async def handle_file_upload(file_path: str, base_name: str) -> str:
|
||||
return await s3_client.upload_file_to_s3(file_path, settings.S3_BUCKET_NAME, s3_object_name)
|
||||
|
||||
|
||||
@app.post("/api/run/{base_name}")
|
||||
@web_app.post("/api/run/{base_name}")
|
||||
async def execute_workflow_endpoint(base_name: str, request_data_raw: Dict[str, Any], version: Optional[str] = None):
|
||||
cleanup_paths = []
|
||||
try:
|
||||
@@ -102,7 +115,8 @@ async def execute_workflow_endpoint(base_name: str, request_data_raw: Dict[str,
|
||||
save_path = os.path.join(settings.COMFYUI_INPUT_DIR, filename)
|
||||
try:
|
||||
await download_file_from_url(session, image_url, save_path);
|
||||
request_data[param_name] = filename; cleanup_paths.append(save_path)
|
||||
request_data[param_name] = filename;
|
||||
cleanup_paths.append(save_path)
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500,
|
||||
detail=f"Failed to download file for '{param_name}' from {image_url}. Error: {e}")
|
||||
@@ -187,7 +201,7 @@ async def execute_workflow_endpoint(base_name: str, request_data_raw: Dict[str,
|
||||
|
||||
# --- Section 3: 工作流元数据/规范API (无改动) ---
|
||||
# ... (此部分代码与上一版完全相同) ...
|
||||
@app.get("/api/spec/{base_name}")
|
||||
@web_app.get("/api/spec/{base_name}")
|
||||
async def get_workflow_spec_endpoint(base_name: str, version: Optional[str] = None):
|
||||
# ...
|
||||
if version:
|
||||
@@ -204,9 +218,9 @@ async def get_workflow_spec_endpoint(base_name: str, version: Optional[str] = No
|
||||
raise HTTPException(status_code=500, detail=f"Failed to parse workflow specification: {e}")
|
||||
|
||||
|
||||
@app.get("/")
|
||||
@web_app.get("/")
|
||||
def read_root(): return {"message": "Welcome to the ComfyUI Workflow Service API!"}
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
uvicorn.run(app, host="127.0.0.1", port=18000)
|
||||
uvicorn.run(web_app, host="127.0.0.1", port=18000)
|
||||
|
||||
Reference in New Issue
Block a user