Files
novelmaster/noma/scripts/data_modules/__init__.py
T
2026-06-23 20:29:02 +08:00

107 lines
3.2 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Data Modules - 数据链模块包。
注意:
- 这里采用延迟导入(lazy import),避免在执行 `python -m data_modules.xxx` 时,
因包级 __init__ 提前导入子模块而触发 runpy 的 RuntimeWarning。
- 推荐用法永远安全:
from data_modules.index_manager import IndexManager
但为了兼容历史代码,也保留:
from data_modules import IndexManager
"""
from __future__ import annotations
from importlib import import_module
from typing import Any
__all__ = [
# Config
"DataModulesConfig",
"get_config",
"set_project_root",
# API Client
"ModalAPIClient",
"get_client",
# Entity Linker
"EntityLinker",
"DisambiguationResult",
# State Manager
"StateManager",
"EntityState",
"Relationship",
"StateChange",
# Index Manager
"IndexManager",
"ChapterMeta",
"SceneMeta",
"ReviewMetrics",
"RelationshipEventMeta",
# RAG Adapter
"RAGAdapter",
"SearchResult",
"ContextManager",
"ContextRanker",
"SnapshotManager",
"QueryRouter",
# Style Sampler
"StyleSampler",
"StyleSample",
"SceneType",
]
_LAZY_EXPORTS: dict[str, tuple[str, str]] = {
# Config
"DataModulesConfig": (".config", "DataModulesConfig"),
"get_config": (".config", "get_config"),
"set_project_root": (".config", "set_project_root"),
# API Client
"ModalAPIClient": (".api_client", "ModalAPIClient"),
"get_client": (".api_client", "get_client"),
# Entity Linker
"EntityLinker": (".entity_linker", "EntityLinker"),
"DisambiguationResult": (".entity_linker", "DisambiguationResult"),
# State Manager
"StateManager": (".state_manager", "StateManager"),
"EntityState": (".state_manager", "EntityState"),
"Relationship": (".state_manager", "Relationship"),
"StateChange": (".state_manager", "StateChange"),
# Index Manager
"IndexManager": (".index_manager", "IndexManager"),
"ChapterMeta": (".index_manager", "ChapterMeta"),
"SceneMeta": (".index_manager", "SceneMeta"),
"ReviewMetrics": (".index_manager", "ReviewMetrics"),
"RelationshipEventMeta": (".index_manager", "RelationshipEventMeta"),
# RAG Adapter
"RAGAdapter": (".rag_adapter", "RAGAdapter"),
"SearchResult": (".rag_adapter", "SearchResult"),
"ContextManager": (".context_manager", "ContextManager"),
"ContextRanker": (".context_ranker", "ContextRanker"),
"SnapshotManager": (".snapshot_manager", "SnapshotManager"),
"QueryRouter": (".query_router", "QueryRouter"),
# Style Sampler
"StyleSampler": (".style_sampler", "StyleSampler"),
"StyleSample": (".style_sampler", "StyleSample"),
"SceneType": (".style_sampler", "SceneType"),
}
def __getattr__(name: str) -> Any: # pragma: no cover
if name not in _LAZY_EXPORTS:
raise AttributeError(name)
module_path, attr = _LAZY_EXPORTS[name]
module = import_module(module_path, __name__)
value = getattr(module, attr)
globals()[name] = value # cache
return value
def __dir__() -> list[str]: # pragma: no cover
return sorted(set(list(globals().keys()) + list(_LAZY_EXPORTS.keys())))