Files
2026-06-12 19:18:11 +08:00

53 lines
1.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import asyncio
from contextlib import asynccontextmanager, suppress
from fastapi import FastAPI
from src.router import v1_router
from src.utils.draft_downloader import download_draft
from src.utils.logger import logger
from src.middlewares import PrepareMiddleware, ResponseMiddleware, TraceContextMiddleware
@asynccontextmanager
async def lifespan(app: FastAPI):
from src.utils.deferred_delete import deferred_delete_background_loop
from src.utils.draft_cleanup import draft_cleanup_background_loop
cleanup_task = asyncio.create_task(draft_cleanup_background_loop())
deferred_delete_task = asyncio.create_task(deferred_delete_background_loop())
try:
yield
finally:
for bg_task in (cleanup_task, deferred_delete_task):
bg_task.cancel()
with suppress(asyncio.CancelledError):
await bg_task
# 1. 创建 FastAPI 应用
app: FastAPI = FastAPI(title="CapCut Mate API", version="1.0", lifespan=lifespan)
# 2. 注册路由
app.include_router(router=v1_router, prefix="/openapi/capcut-mate", tags=["capcut-mate"])
# 3. 添加中间件(最后注册的 TraceContextMiddleware 最先处理请求,用于 W3C trace_id
app.add_middleware(middleware_class=PrepareMiddleware)
app.add_middleware(middleware_class=ResponseMiddleware)
app.add_middleware(middleware_class=TraceContextMiddleware)
# 4. 打印所有路由
for r in app.routes:
# 1. 取 HTTP 方法列表
methods = getattr(r, "methods", None) or [getattr(r, "method", "WS")]
# 2. 安全地取路径
path = getattr(r, "path", "<unknown>")
# 3. 安全地取函数名
name = getattr(r, "name", "<unnamed>")
logger.info("Route: %s %s -> %s", ",".join(sorted(methods)), path, name)
logger.info("CapCut Mate API")
# 5. 启动
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=30000, log_config=None, log_level="info")