项目文件夹

文件
wehub-resource-sync 41b710f9c7
CI / Backend tests (push) Failing after 1s
CI / Frontend checks (push) Failing after 0s
I18n Documentation Sync / sync-docs (push) Failing after 0s
chore: import upstream snapshot with attribution
2026-07-13 12:28:40 +08:00

173 行
5.8 KiB
Python

#!/usr/bin/env python3
"""
按照原有架构执行真实流水线的脚本
使用PipelineAdapter和原有的流水线步骤
"""
import sys
import os
import json
import asyncio
from pathlib import Path
from typing import Dict, List, Any
# 添加项目根目录到Python路径
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))
from ..core.database import SessionLocal
from ..models.project import Project, ProjectStatus
from ..models.task import Task, TaskStatus
from ..services.pipeline_adapter import create_pipeline_adapter_sync
import logging
# 设置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
async def execute_real_pipeline(project_id: str):
"""按照原有架构执行真实流水线"""
logger.info(f"开始执行项目 {project_id} 的真实流水线")
try:
# 创建数据库会话
db = SessionLocal()
try:
# 验证项目是否存在
project = db.query(Project).filter(Project.id == project_id).first()
if not project:
raise ValueError(f"项目 {project_id} 不存在")
logger.info(f"验证项目存在: {project.name}")
# 创建任务记录
task = Task(
name=f"真实流水线处理",
description=f"使用原有架构处理项目 {project_id}",
task_type="VIDEO_PROCESSING",
project_id=project_id,
status=TaskStatus.RUNNING,
progress=0,
current_step="初始化",
total_steps=6
)
db.add(task)
db.commit()
db.refresh(task)
logger.info(f"任务记录已创建: {task.id}")
# 准备文件路径
data_root = project_root / "data" / "projects" / project_id
input_video_path = data_root / "raw" / "input.mp4"
input_srt_path = data_root / "raw" / "input.srt"
# 验证文件存在
if not input_video_path.exists():
raise FileNotFoundError(f"视频文件不存在: {input_video_path}")
if not input_srt_path.exists():
raise FileNotFoundError(f"字幕文件不存在: {input_srt_path}")
logger.info(f"文件路径验证成功:")
logger.info(f" 视频: {input_video_path}")
logger.info(f" 字幕: {input_srt_path}")
# 创建Pipeline适配器
pipeline_adapter = create_pipeline_adapter_sync(db, str(task.id), project_id)
# 验证流水线前置条件
logger.info("验证流水线前置条件...")
errors = pipeline_adapter.validate_pipeline_prerequisites()
if errors:
error_msg = "; ".join(errors)
logger.error(f"流水线前置条件验证失败: {error_msg}")
raise ValueError(f"流水线前置条件验证失败: {error_msg}")
logger.info("流水线前置条件验证通过")
# 执行完整的流水线处理
logger.info("开始执行完整流水线...")
result = pipeline_adapter.process_project_sync(
project_id=project_id,
input_video_path=str(input_video_path),
input_srt_path=str(input_srt_path)
)
# 检查处理结果
if result.get('status') == 'failed':
error_msg = result.get('message', '处理失败')
logger.error(f"流水线处理失败: {error_msg}")
# 更新任务状态为失败
task.status = TaskStatus.FAILED
task.error_message = error_msg
db.commit()
return {
"success": False,
"error": error_msg,
"result": result
}
else:
# 处理成功
logger.info("🎉 流水线处理成功!")
logger.info(f"处理结果: {result}")
# 更新任务状态为完成
task.status = TaskStatus.COMPLETED
task.progress = 100
task.current_step = "处理完成"
db.commit()
return {
"success": True,
"result": result,
"message": "流水线处理完成"
}
finally:
db.close()
except Exception as e:
error_msg = f"执行流水线失败: {str(e)}"
logger.error(error_msg)
# 尝试更新任务状态
try:
db = SessionLocal()
task = db.query(Task).filter(Task.project_id == project_id).order_by(Task.created_at.desc()).first()
if task:
task.status = TaskStatus.FAILED
task.error_message = error_msg
db.commit()
db.close()
except Exception as db_error:
logger.error(f"更新任务状态失败: {db_error}")
return {
"success": False,
"error": error_msg
}
async def main():
"""主函数"""
if len(sys.argv) != 2:
print("使用方法: python execute_real_pipeline.py <project_id>")
sys.exit(1)
project_id = sys.argv[1]
result = await execute_real_pipeline(project_id)
if result["success"]:
print(f"✅ 流水线执行成功!")
print(f"📊 结果: {result['result']}")
else:
print(f"❌ 流水线执行失败: {result['error']}")
sys.exit(1)
if __name__ == "__main__":
asyncio.run(main())