Files
geMoldInsight/src/main.py
T

133 lines
3.8 KiB
Python
Raw Normal View History

2026-02-11 22:40:35 +08:00
# main.py
import sys
import os
from pathlib import Path
# 添加项目根目录到Python路径
project_root = Path(__file__).parent.parent
src_root = Path(__file__).parent
sys.path.insert(0, str(project_root))
sys.path.insert(0, str(src_root))
# 确保当前工作目录是项目根目录
os.chdir(project_root)
# 打印调试信息
print(f"项目根目录: {project_root}")
print(f"Python路径: {sys.path}")
print(f"当前工作目录: {os.getcwd()}")
# 测试导入配置模块
try:
from config.settings import settings
print("[OK] 配置模块导入成功")
except ImportError as e:
print(f"[FAIL] 配置模块导入失败: {e}")
# 列出当前目录内容
print("当前目录内容:")
for item in os.listdir('.'):
print(f" - {item}")
# 列出config目录内容
if os.path.exists('config'):
print("config目录内容:")
for item in os.listdir('config'):
print(f" - {item}")
raise
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
import asyncio
from api.routes import router
from utils.logger import setup_logging
from database.init_db import init_database
# 设置日志
setup_logging()
# 创建FastAPI应用
app = FastAPI(
title="模具几何分析服务",
description="基于PythonOCC的STP文件几何分析和模具设计建议服务",
version="3.0.0"
)
# 启动时初始化数据库和RustFS
@app.on_event("startup")
async def startup_event():
"""应用启动时初始化数据库和RustFS"""
# 初始化数据库
success = await init_database()
if success:
print("[OK] 数据库初始化成功")
else:
print("[FAIL] 数据库初始化失败,服务将继续运行但数据库功能不可用")
# 初始化RustFS连接
try:
from storage.rustfs_storage import rustfs_manager
from config.settings import settings
await rustfs_manager.connect(
endpoint=settings.RUSTFS_ENDPOINT,
access_key=settings.RUSTFS_ACCESS_KEY,
secret_key=settings.RUSTFS_SECRET_KEY,
timeout=settings.RUSTFS_TIMEOUT
)
print("[OK] RustFS连接成功")
except Exception as e:
print(f"[FAIL] RustFS连接失败: {e}")
print("[WARN] 文件上传功能将不可用,但其他功能正常")
# 创建必要目录
UPLOAD_DIR = Path("uploads")
UPLOAD_DIR.mkdir(exist_ok=True)
TEMPLATES_DIR = Path("templates")
TEMPLATES_DIR.mkdir(exist_ok=True)
STATIC_DIR = Path("static")
STATIC_DIR.mkdir(exist_ok=True)
HTML_OUTPUT_DIR = Path("html_output")
HTML_OUTPUT_DIR.mkdir(exist_ok=True)
# 挂载静态文件
import os
2026-02-16 01:13:13 +08:00
# 使用当前工作目录下的static文件夹
static_dir = os.path.join(os.getcwd(), "static")
2026-02-11 22:40:35 +08:00
app.mount("/static", StaticFiles(directory=static_dir), name="static")
# 注册路由
app.include_router(router)
@app.get("/health")
async def health():
from database.database import db_manager
return {
"status": "healthy",
"service": "mold-geometry-analysis",
"database_connected": db_manager.is_connected
}
if __name__ == "__main__":
import uvicorn
2026-02-13 00:29:12 +08:00
# 从配置文件获取端口配置
from config.settings import settings
2026-02-11 22:40:35 +08:00
print("启动模具几何分析服务 v3.0...")
2026-02-13 00:29:12 +08:00
print(f"访问 http://localhost:{settings.PORT} 使用网页界面")
2026-02-11 22:40:35 +08:00
print("新增功能:")
print(" - STP文件解析为JSON数据")
print(" - 数据存储到PostgreSQL数据库")
print(" - 自动生成3D可视化HTML页面")
print(" - 源文件、JSON数据、HTML文件统一管理")
2026-02-13 00:29:12 +08:00
print(f"调试接口: http://localhost:{settings.PORT}/debug/tasks")
2026-02-11 22:40:35 +08:00
uvicorn.run(
"main:app",
2026-02-13 00:29:12 +08:00
host=settings.HOST,
port=settings.PORT,
2026-02-11 22:40:35 +08:00
reload=True
)