# @line_count 100 """解析器工厂""" from typing import Dict, Any, Type, List from .base_adapter import BaseParserAdapter from .section_array_adapter import SectionArrayAdapter from .requirement_tree_adapter import RequirementTreeAdapter class ParserFactory: """解析器工厂,自动检测格式并创建合适的适配器""" # 注册所有适配器(按优先级排序) _adapters: List[Type[BaseParserAdapter]] = [ RequirementTreeAdapter, # 新格式优先 SectionArrayAdapter, # 旧格式 # 未来可以在这里添加更多适配器 ] @classmethod def create_adapter(cls, data: Dict[str, Any]) -> BaseParserAdapter: """ 创建合适的适配器 Args: data: JSON数据 Returns: 适配器实例 Raises: ValueError: 如果无法识别格式 """ for adapter_class in cls._adapters: if adapter_class.can_parse(data): return adapter_class(data) raise ValueError( "无法识别JSON格式。支持的格式:\n" "- 需求树格式(包含'需求内容'和'文档元数据')\n" "- 章节数组格式(包含'sections'数组)" ) @classmethod def register_adapter(cls, adapter_class: Type[BaseParserAdapter], priority: int = 0): """ 注册新的适配器 Args: adapter_class: 适配器类 priority: 优先级(越小越优先,0为最高优先级) """ cls._adapters.insert(priority, adapter_class)