fix
This commit is contained in:
274
python_core/mock_services.py
Normal file
274
python_core/mock_services.py
Normal file
@@ -0,0 +1,274 @@
|
||||
"""
|
||||
模拟服务模块 - 用于测试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)
|
||||
Reference in New Issue
Block a user