Files
test_item_gen/modules/parser_adapters/parser_factory.py
2026-02-04 14:38:52 +08:00

54 lines
1.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# @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)