TRELLIS.2 / src /app.py
brunner56's picture
Fix src-layout app import
98b1874
from __future__ import annotations
import runpy
from importlib.util import module_from_spec, spec_from_file_location
from pathlib import Path
ROOT_APP_PATH = Path(__file__).resolve().parent.parent / "app.py"
def _load_root_app_module():
if not ROOT_APP_PATH.exists():
raise ModuleNotFoundError(
"The source checkout app.py entrypoint is not available "
"from this installation."
)
spec = spec_from_file_location("_trellis2_root_app", ROOT_APP_PATH)
if spec is None or spec.loader is None:
raise ImportError(f"Unable to create an import spec for {ROOT_APP_PATH}")
module = module_from_spec(spec)
spec.loader.exec_module(module)
return module
_ROOT_APP = _load_root_app_module()
_PUBLIC_NAMES = getattr(_ROOT_APP, "__all__", None)
if _PUBLIC_NAMES is None:
_PUBLIC_NAMES = [name for name in dir(_ROOT_APP) if not name.startswith("__")]
globals().update({name: getattr(_ROOT_APP, name) for name in _PUBLIC_NAMES})
__all__ = list(_PUBLIC_NAMES) # pyright: ignore[reportUnsupportedDunderAll]
if __name__ == "__main__":
runpy.run_path(str(ROOT_APP_PATH), run_name="__main__")