275 lines
8.2 KiB
Python
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)
|