整理配置和代码入口,增加部分测试。

This commit is contained in:
strepsiades
2026-03-10 12:22:54 +08:00
parent 515c3d9388
commit a638e4203b
35 changed files with 1314 additions and 199 deletions
+24 -24
View File
@@ -26,7 +26,7 @@ Domain 注册中心
# DataSource 查询 Handler
handler_class = DomainRegistry.get_jsonl_handler("contract")
"""
from typing import Dict, Type, Optional, Any
from typing import Dict, Type, Optional, Any, Literal
from dataclasses import dataclass, field
from pydantic import BaseModel
@@ -64,6 +64,12 @@ class DomainRegistry:
"""
_registry: Dict[str, DomainRegistration] = {}
_HANDLER_ATTRS: Dict[str, str] = {
"jsonl": "jsonl_handler_class",
"api": "api_handler_class",
"db": "db_handler_class",
}
@classmethod
def register(
@@ -143,36 +149,30 @@ class DomainRegistry:
return reg.strategy_class
@classmethod
def get_jsonl_handler(cls, node_type: str) -> Optional[Type[Any]]:
"""
获取 JSONL Handler 类(用于 DataSource
Args:
node_type: 节点类型
Returns:
Handler 类,如果未注册则返回 None
"""
def get_handler(
cls,
node_type: str,
datasource_type: Literal["jsonl", "api", "db"],
) -> Optional[Type[Any]]:
"""按 datasource 类型获取 Handler 类。"""
reg = cls._registry.get(node_type)
if not reg:
raise ValueError(f"Unknown node_type: '{node_type}'")
return reg.jsonl_handler_class
attr_name = cls._HANDLER_ATTRS.get(datasource_type)
if attr_name is None:
raise ValueError(
f"Unsupported datasource_type: '{datasource_type}'. "
f"Available: {sorted(cls._HANDLER_ATTRS.keys())}"
)
return getattr(reg, attr_name)
@classmethod
def get_api_handler(cls, node_type: str) -> Optional[Type[Any]]:
"""获取 API Handler"""
def register_db_handler(cls, node_type: str, db_handler_class: Type[Any]) -> None:
"""为已注册 domain 补充 DB Handler"""
reg = cls._registry.get(node_type)
if not reg:
raise ValueError(f"Unknown node_type: '{node_type}'")
return reg.api_handler_class
@classmethod
def get_db_handler(cls, node_type: str) -> Optional[Type[Any]]:
"""获取 DB Handler 类"""
reg = cls._registry.get(node_type)
if not reg:
raise ValueError(f"Unknown node_type: '{node_type}'")
return reg.db_handler_class
reg.db_handler_class = db_handler_class
@classmethod
def get_schema(cls, node_type: str) -> Type[BaseModel]: