mxivideo/python_core/mock_services.py

275 lines
8.2 KiB
Python

"""
模拟服务模块 - 用于测试PyInstaller打包
当实际服务模块不可用时,提供基本的模拟功能
"""
import json
import time
from datetime import datetime
from pathlib import Path
class MockTemplateManager:
"""模拟模板管理器"""
@staticmethod
def get_templates(**kwargs):
"""获取模板列表"""
return {
"templates": [
{
"id": "template_001",
"name": "商业宣传模板",
"description": "适用于商业宣传的视频模板",
"duration": 30,
"created_at": "2024-01-01T00:00:00Z"
},
{
"id": "template_002",
"name": "教育培训模板",
"description": "适用于教育培训的视频模板",
"duration": 60,
"created_at": "2024-01-02T00:00:00Z"
}
],
"total": 2,
"timestamp": datetime.now().isoformat()
}
@staticmethod
def batch_import(**kwargs):
"""批量导入模板"""
folder_path = kwargs.get('folder_path', '')
return {
"imported_count": 5,
"failed_count": 0,
"imported_templates": [
f"template_{i:03d}" for i in range(1, 6)
],
"folder_path": folder_path,
"timestamp": datetime.now().isoformat()
}
class MockProjectManager:
"""模拟项目管理器"""
@staticmethod
def get_projects(**kwargs):
"""获取项目列表"""
return {
"projects": [
{
"id": "project_001",
"name": "春季促销视频",
"status": "active",
"created_at": "2024-01-01T00:00:00Z"
},
{
"id": "project_002",
"name": "产品介绍视频",
"status": "completed",
"created_at": "2024-01-02T00:00:00Z"
}
],
"total": 2,
"timestamp": datetime.now().isoformat()
}
@staticmethod
def create_project(**kwargs):
"""创建项目"""
name = kwargs.get('name', 'New Project')
return {
"id": f"project_{int(time.time())}",
"name": name,
"status": "active",
"created_at": datetime.now().isoformat()
}
class MockMediaManager:
"""模拟媒体管理器"""
@staticmethod
def get_media_list(**kwargs):
"""获取媒体列表"""
return {
"media": [
{
"id": "media_001",
"name": "background_music.mp3",
"type": "audio",
"size": 1024000,
"duration": 180
},
{
"id": "media_002",
"name": "intro_video.mp4",
"type": "video",
"size": 5120000,
"duration": 30
}
],
"total": 2,
"timestamp": datetime.now().isoformat()
}
class MockAudioManager:
"""模拟音频管理器"""
@staticmethod
def get_audio_list(**kwargs):
"""获取音频列表"""
return {
"audio_files": [
{
"id": "audio_001",
"name": "background_1.mp3",
"duration": 120,
"format": "mp3",
"sample_rate": 44100
},
{
"id": "audio_002",
"name": "effect_sound.wav",
"duration": 5,
"format": "wav",
"sample_rate": 48000
}
],
"total": 2,
"timestamp": datetime.now().isoformat()
}
class MockModelManager:
"""模拟模特管理器"""
@staticmethod
def get_models(**kwargs):
"""获取模特列表"""
return {
"models": [
{
"id": "model_001",
"name": "商务女性",
"category": "business",
"age_range": "25-35"
},
{
"id": "model_002",
"name": "时尚男性",
"category": "fashion",
"age_range": "20-30"
}
],
"total": 2,
"timestamp": datetime.now().isoformat()
}
class MockResourceCategoryManager:
"""模拟资源分类管理器"""
@staticmethod
def get_all_categories(**kwargs):
"""获取所有分类"""
return {
"categories": [
{
"id": "cat_001",
"name": "商业",
"description": "商业相关资源",
"color": "#FF6B6B"
},
{
"id": "cat_002",
"name": "教育",
"description": "教育相关资源",
"color": "#4ECDC4"
},
{
"id": "cat_003",
"name": "娱乐",
"description": "娱乐相关资源",
"color": "#45B7D1"
}
],
"total": 3,
"timestamp": datetime.now().isoformat()
}
class MockFileManager:
"""模拟文件管理器"""
@staticmethod
def list_files(**kwargs):
"""列出文件"""
path = kwargs.get('path', '.')
try:
path_obj = Path(path)
if path_obj.exists() and path_obj.is_dir():
files = []
for item in path_obj.iterdir():
files.append({
"name": item.name,
"type": "directory" if item.is_dir() else "file",
"size": item.stat().st_size if item.is_file() else 0,
"modified": datetime.fromtimestamp(item.stat().st_mtime).isoformat()
})
return {
"path": str(path_obj),
"files": files[:10], # 限制返回数量
"total": len(files),
"timestamp": datetime.now().isoformat()
}
else:
return {
"error": f"Path does not exist or is not a directory: {path}",
"timestamp": datetime.now().isoformat()
}
except Exception as e:
return {
"error": f"Failed to list files: {str(e)}",
"timestamp": datetime.now().isoformat()
}
class MockAIVideo:
"""模拟AI视频生成器"""
@staticmethod
def test_environment(**kwargs):
"""测试环境"""
return {
"python_version": "3.11.0",
"dependencies": {
"requests": "available",
"PIL": "available",
"json": "available"
},
"status": "ready",
"timestamp": datetime.now().isoformat()
}
@staticmethod
def get_status(**kwargs):
"""获取状态"""
return {
"service": "AI Video Generator",
"status": "running",
"version": "2.0.0",
"last_check": datetime.now().isoformat()
}
# 注册模拟服务
MOCK_SERVICES = {
'services.template_manager': MockTemplateManager,
'services.project_manager': MockProjectManager,
'services.media_manager': MockMediaManager,
'services.audio_manager': MockAudioManager,
'services.model_manager': MockModelManager,
'services.resource_category_manager': MockResourceCategoryManager,
'services.file_manager': MockFileManager,
'ai_video.video_generator': MockAIVideo,
}
def get_mock_service(module_path):
"""获取模拟服务"""
return MOCK_SERVICES.get(module_path)