返回 VideoClaw
app.py
1 import os
2 import sys
3 import logging
4 from contextlib import asynccontextmanager
5
6 from fastapi import FastAPI
7 from fastapi.middleware.cors import CORSMiddleware
8 from fastapi.staticfiles import StaticFiles
9
10 _backend_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
11 if _backend_dir not in sys.path:
12 sys.path.insert(0, _backend_dir)
13
14 from config import settings
15 from api.logging_config import setup_concurrent_logging
16
17 setup_concurrent_logging()
18
19 logger = logging.getLogger(__name__)
20
21 from api.routers import (
22 files_router,
23 health_router,
24 sandbox_router,
25 sessions_router,
26 stages_router,
27 workflow_router,
28 pipelines_router,
29 configuration_router,
30 )
31
32
33 @asynccontextmanager
34 async def lifespan(app: FastAPI):
35 logger.info("Starting Video-Claw API")
36 logger.info("Code directory mounted at /code: %s", settings.CODE_DIR)
37 yield
38 logger.info("Video-Claw API shutdown complete")
39
40
41 app = FastAPI(title="Video-Claw", version="2.0.0", lifespan=lifespan)
42
43 app.add_middleware(
44 CORSMiddleware,
45 allow_origins=["*"],
46 allow_credentials=True,
47 allow_methods=["*"],
48 allow_headers=["*"],
49 )
50 logger.info("CORS enabled for origins: %s", ["*"])
51
52 os.makedirs(settings.CODE_DIR, exist_ok=True)
53 app.mount("/code", StaticFiles(directory=settings.CODE_DIR), name="code")
54
55 app.include_router(health_router)
56 app.include_router(files_router)
57 app.include_router(workflow_router)
58 app.include_router(sessions_router)
59 app.include_router(stages_router)
60 app.include_router(sandbox_router)
61 app.include_router(pipelines_router)
62 app.include_router(configuration_router)
63 logger.info("API routers registered")
64
65
66 @app.get("/")
67 async def root():
68 return {"service": "Video-Claw", "version": "2.0.0", "health": "/api/health"}
69
69 lines PYTHON