#!/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())))