2026-02-01 07:36:42 +00:00
|
|
|
"""Utility functions for nanobot."""
|
|
|
|
|
|
2026-05-19 22:42:38 +08:00
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
import sys
|
|
|
|
|
from importlib import import_module
|
|
|
|
|
from types import ModuleType
|
|
|
|
|
|
2026-03-08 02:58:25 +00:00
|
|
|
from nanobot.utils.helpers import ensure_dir
|
2026-04-07 14:18:53 +08:00
|
|
|
from nanobot.utils.path import abbreviate_path
|
2026-02-01 07:36:42 +00:00
|
|
|
|
2026-04-07 14:18:53 +08:00
|
|
|
__all__ = ["ensure_dir", "abbreviate_path"]
|
2026-05-19 22:42:38 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class _LazyModuleAlias(ModuleType):
|
|
|
|
|
def __init__(self, name: str, target: str) -> None:
|
|
|
|
|
super().__init__(name)
|
|
|
|
|
self.__dict__["_target"] = target
|
|
|
|
|
|
|
|
|
|
def _load(self) -> ModuleType:
|
|
|
|
|
module = import_module(self.__dict__["_target"])
|
|
|
|
|
sys.modules[self.__name__] = module
|
|
|
|
|
return module
|
|
|
|
|
|
|
|
|
|
def __getattr__(self, name: str) -> object:
|
|
|
|
|
return getattr(self._load(), name)
|
|
|
|
|
|
|
|
|
|
def __dir__(self) -> list[str]:
|
|
|
|
|
return sorted(set(super().__dir__()) | set(dir(self._load())))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_LEGACY_MODULE_ALIASES = {
|
|
|
|
|
"webui_thread_disk": "nanobot.webui.thread_disk",
|
|
|
|
|
"webui_transcript": "nanobot.webui.transcript",
|
|
|
|
|
"webui_turn_helpers": "nanobot.session.webui_turns",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for _legacy_name, _target_name in _LEGACY_MODULE_ALIASES.items():
|
|
|
|
|
sys.modules.setdefault(
|
|
|
|
|
f"{__name__}.{_legacy_name}",
|
|
|
|
|
_LazyModuleAlias(f"{__name__}.{_legacy_name}", _target_name),
|
|
|
|
|
)
|