整理配置和代码入口,增加部分测试。
This commit is contained in:
@@ -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]:
|
||||
|
||||
Reference in New Issue
Block a user