init rep
This commit is contained in:
53
modules/parser_adapters/parser_factory.py
Normal file
53
modules/parser_adapters/parser_factory.py
Normal file
@@ -0,0 +1,53 @@
|
||||
# @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)
|
||||
Reference in New Issue
Block a user