"""Tool helpers. This package contains wrappers around external tools (e.g. yt-dlp) so cmdlets can share common defaults (cookies, timeouts, format selectors) and users can override them via `config.conf`. """ from __future__ import annotations # Lazy-loaded to avoid pulling in yt_dlp, playwright, and their heavy transitive # dependencies (~1–2 s) at package import time. Each submodule is loaded only when # a name from it is first accessed through this package namespace. __all__ = [ "YtDlpTool", "YtDlpDefaults", "PlaywrightTool", "PlaywrightDefaults", "FlorenceVisionTool", "FlorenceVisionDefaults", ] _MODULE_ATTRS = { "YtDlpTool": ".ytdlp", "YtDlpDefaults": ".ytdlp", "PlaywrightTool": ".playwright", "PlaywrightDefaults": ".playwright", "FlorenceVisionTool": ".florencevision", "FlorenceVisionDefaults": ".florencevision", } def __getattr__(name: str) -> object: submod = _MODULE_ATTRS.get(name) if submod is None: raise AttributeError(f"module {__name__!r} has no attribute {name!r}") from importlib import import_module mod = import_module(submod, package=__name__) obj = getattr(mod, name) # Cache on this module so subsequent accesses bypass __getattr__. globals()[name] = obj return obj