diff --git a/autoimport/__init__.py b/autoimport/__init__.py index ae17d92..75ba910 100644 --- a/autoimport/__init__.py +++ b/autoimport/__init__.py @@ -3,4 +3,4 @@ from autoimport.main import LazyLoader, lazy __all__ = ("LazyLoader", "lazy") -__version__ = "0.0.1" +__version__ = "0.0.2" diff --git a/autoimport/main.py b/autoimport/main.py index c8c1d7f..3a5e4d2 100644 --- a/autoimport/main.py +++ b/autoimport/main.py @@ -71,21 +71,25 @@ def lazy_import(name, globals=None, locals=None, fromlist=(), level=0): **{from_item: self._lazy_modules[f"{module_name}.{from_item}"] for from_item in fromlist} ) else: - if module_name not in self._lazy_modules: + if module_name in globals: + self._lazy_modules[module_name] = globals[module_name] + elif module_name in sys.modules: + self._lazy_modules[module_name] = sys.modules[module_name] # module already loaded in session + elif module_name not in self._lazy_modules: self._lazy_modules[module_name] = LazyLoader(module_name) + + if "." in name: # we need to send loader for parent before subpackage + parts = name.split('.') + parent = ['.'.join(parts[:i]) for i in range(1, len(parts))][0] + return LazyLoader(parent) + return self._lazy_modules[module_name] builtins.__import__ = lazy_import - return self def __exit__(self, *args): """Restores the original import mechanism and updates sys.modules with any loaded lazy modules.""" builtins.__import__ = self._original_import - # Now that builtins is restored, we can load any modules that need loading - for name, lazy_module in self._lazy_modules.items(): - if name in sys.modules: # Update sys.modules to avoid issues with subsequent imports - sys.modules[name] = lazy_module - if __name__ == "__main__": import time diff --git a/pyproject.toml b/pyproject.toml index 58eeb91..ddb027e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -65,7 +65,7 @@ dependencies = [] # Optional dependencies ------------------------------------------------------------------------------------------------ [project.optional-dependencies] dev = [ - "numpy", # for import tests + "numpy", # for tests ] [project.urls] # Optional diff --git a/tests/test_autoimport.py b/tests/test_autoimport.py index 9a2735b..f8d1e73 100644 --- a/tests/test_autoimport.py +++ b/tests/test_autoimport.py @@ -31,12 +31,12 @@ def test_attribute_access(self): self.assertIsInstance(result, str) def test_submodule_imports(self): - """Test nested module imports and functionality.""" + """Test numpy module imports and functionality.""" with lazy(): import numpy.random random_number = numpy.random.rand() self.assertLess(random_number, 1.0) - + def test_direct_lazyloader(self): """Test direct LazyLoader instantiation.""" base64_lazy = LazyLoader("base64")