diff options
| -rw-r--r-- | src/infini/const.py | 3 | ||||
| -rw-r--r-- | src/infini/internal.py | 28 | ||||
| -rw-r--r-- | tests/test_internal.py | 11 |
3 files changed, 28 insertions, 14 deletions
diff --git a/src/infini/const.py b/src/infini/const.py deleted file mode 100644 index 2ec42488..00000000 --- a/src/infini/const.py +++ /dev/null @@ -1,3 +0,0 @@ -from pathlib import Path - -SRC_HOME = Path.home() / ".ipm" / "src"
\ No newline at end of file diff --git a/src/infini/internal.py b/src/infini/internal.py index 4f800297..460407a8 100644 --- a/src/infini/internal.py +++ b/src/infini/internal.py @@ -1,18 +1,24 @@ -from infini.typing import List, ModuleType -from infini.const import SRC_HOME +from infini.loader import Loader +from infini.register import Register +from infini.typing import List +from pathlib import Path -import importlib import sys +import inspect -def require(name: str, paths: List | None = None) -> ModuleType: +def require(name: str, paths: List | None = None) -> Register: + caller_frame = inspect.stack()[1] + caller_file = caller_frame[0].f_globals["__file__"] + + default_paths = [Path(caller_file).resolve().parent] paths = [ str(path) - for path in ( - (list(paths) + [str(SRC_HOME / name)]) if paths else [str(SRC_HOME / name)] - ) + for path in ((list(paths) + default_paths) if paths else default_paths) ] - sys.path.extend(paths) - module = importlib.import_module(name) - (sys.path.remove(path) for path in paths) - return module + (sys.path.insert(0, path) for path in paths) + + with Loader() as loader: + loader.load(name) + sys.path = sys.path[len(paths) - 1 :] + return loader.into_register() diff --git a/tests/test_internal.py b/tests/test_internal.py new file mode 100644 index 00000000..321c9f5c --- /dev/null +++ b/tests/test_internal.py @@ -0,0 +1,11 @@ +from infini.internal import require +from ipm import api + +import shutil + + +def test_internal(): + api.new("test_ipk") + registers = require("test_ipk") + assert registers + shutil.rmtree("test_ipk") |
