#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 测试配置管理器和pydantic模型的兼容性 """ import os import json import tempfile from pathlib import Path from core.config.manager import ConfigManager from core.config.models import ( BaseConfig, AIModelConfig, SystemConfig, GenerateTopicConfig, ResourceConfig, GenerateContentConfig, PosterConfig, ContentConfig, ReferItem, ReferConfig ) def test_config_creation(): """测试创建配置实例""" print("测试创建配置实例...") # 创建各种配置实例 ai_config = AIModelConfig(model="test-model", api_key="test-key") print(f"AI配置: {ai_config.model}, {ai_config.api_key}") # 测试嵌套配置 resource_config = ResourceConfig( resource_dirs=["resource"], refer=ReferConfig( refer_list=[ ReferItem(path="path1", sampling_rate=0.5, step="topic"), ReferItem(path="path2", sampling_rate=0.8, step="content") ] ) ) # 验证嵌套配置 print(f"资源目录: {resource_config.resource_dirs}") print(f"Refer项数量: {len(resource_config.refer.refer_list)}") print(f"第一个Refer项: {resource_config.refer.refer_list[0].path}, {resource_config.refer.refer_list[0].sampling_rate}") # 测试序列化 config_dict = resource_config.to_dict() print(f"序列化后的字典: {json.dumps(config_dict, indent=2)}") return True def test_config_manager(): """测试配置管理器""" print("\n测试配置管理器...") # 创建临时目录 with tempfile.TemporaryDirectory() as temp_dir: # 创建测试配置文件 ai_config_path = Path(temp_dir) / "ai_model.json" ai_config = { "model": "test-model", "api_key": "test-key", "temperature": 0.8 } with open(ai_config_path, "w") as f: json.dump(ai_config, f) # 创建嵌套配置文件 resource_config_path = Path(temp_dir) / "resource.json" resource_config = { "resource_dirs": ["test_resource"], "refer": { "refer_list": [ {"path": "test_path", "sampling_rate": 0.7, "step": "judge"} ] } } with open(resource_config_path, "w") as f: json.dump(resource_config, f) # 初始化配置管理器 config_manager = ConfigManager() config_manager.load_from_directory(temp_dir) # 获取并验证AI配置 ai_model_config = config_manager.get_config("ai_model", AIModelConfig) print(f"加载的AI配置: {ai_model_config.model}, {ai_model_config.api_key}, {ai_model_config.temperature}") assert ai_model_config.model == "test-model" assert ai_model_config.api_key == "test-key" assert ai_model_config.temperature == 0.8 # 获取并验证资源配置 resource_config = config_manager.get_config("resource", ResourceConfig) print(f"加载的资源配置: {resource_config.resource_dirs}") print(f"加载的Refer项: {resource_config.refer.refer_list[0].path}, {resource_config.refer.refer_list[0].sampling_rate}") assert resource_config.resource_dirs == ["test_resource"] assert len(resource_config.refer.refer_list) == 1 assert resource_config.refer.refer_list[0].path == "test_path" assert resource_config.refer.refer_list[0].sampling_rate == 0.7 # 测试更新配置 ai_model_config.update({"model": "updated-model"}) print(f"更新后的AI配置: {ai_model_config.model}") assert ai_model_config.model == "updated-model" # 测试保存配置 config_manager.save_config("ai_model") # 重新加载并验证 with open(ai_config_path, "r") as f: saved_config = json.load(f) print(f"保存的配置: {saved_config['model']}") assert saved_config["model"] == "updated-model" return True def test_config_type_conversion(): """测试配置类型转换""" print("\n测试配置类型转换...") # 创建配置管理器 config_manager = ConfigManager() # 注册一个SystemConfig config_manager.register_config("test_config", SystemConfig) # 尝试以不同类型获取 system_config = config_manager.get_config("test_config", SystemConfig) print(f"获取为SystemConfig: {type(system_config).__name__}") # 尝试转换类型 try: content_config = config_manager.get_config("test_config", ContentConfig) print(f"成功转换为ContentConfig: {type(content_config).__name__}") except TypeError as e: print(f"类型转换失败,符合预期: {e}") return True if __name__ == "__main__": print("开始测试pydantic配置模型和ConfigManager...") test_config_creation() test_config_manager() test_config_type_conversion() print("\n所有测试完成!")