From c30785ae372c30f89134310d80f3a6fe359f16e7 Mon Sep 17 00:00:00 2001 From: cobycloud <25079070+cobycloud@users.noreply.github.com> Date: Fri, 27 Dec 2024 11:04:12 -0600 Subject: [PATCH] Update importer.py --- pkgs/swarmauri/swarmauri/importer.py | 30 ++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/pkgs/swarmauri/swarmauri/importer.py b/pkgs/swarmauri/swarmauri/importer.py index 7fafc8c7..c9bddd55 100644 --- a/pkgs/swarmauri/swarmauri/importer.py +++ b/pkgs/swarmauri/swarmauri/importer.py @@ -55,12 +55,12 @@ def find_spec(self, fullname, path=None, target=None): return None # Create a placeholder for namespace module - # part = '.'.join(namespace_parts[:2]) - # if part in self.VALID_NAMESPACES: - # logger.debug(f"Creating placeholder for namespace module: {part}") - # spec = ModuleSpec(part, self) - # spec.submodule_search_locations = [] - # return spec + part = '.'.join(namespace_parts[:2]) + if part in self.VALID_NAMESPACES: + logger.debug(f"Creating placeholder for namespace module: {part}") + spec = ModuleSpec(part, self) + spec.submodule_search_locations = [] + return spec logger.debug(f"Module '{fullname}' is not in the 'swarmauri.' namespace.") return None @@ -96,21 +96,39 @@ def _try_register_plugin(self, fullname): return False def create_module(self, spec): + """ + Create a module instance. For namespace modules, create a new ModuleType. + + :param spec: ModuleSpec object containing metadata for the module. + :return: The created or imported module. + """ + logger.debug(f"create_module called for: {spec.name}") + + # Check if the module already exists in sys.modules if spec.name in sys.modules: + logger.debug(f"Module '{spec.name}' already exists in sys.modules. Returning cached module.") return sys.modules[spec.name] + # Handle modules mapped to an external path external_module_path = get_external_module_path(spec.name) if external_module_path: + logger.debug(f"External module path found for '{spec.name}': {external_module_path}") module = importlib.import_module(external_module_path) sys.modules[spec.name] = module + logger.debug(f"Successfully imported external module '{spec.name}' from '{external_module_path}'.") return module + # Handle namespace modules if spec.submodule_search_locations is not None: + logger.debug(f"Creating namespace module for '{spec.name}'.") module = ModuleType(spec.name) module.__path__ = spec.submodule_search_locations sys.modules[spec.name] = module + logger.debug(f"Namespace module '{spec.name}' created with path: {spec.submodule_search_locations}.") return module + # If no conditions match, raise an ImportError + logger.error(f"Cannot create module '{spec.name}'. Raising ImportError.") raise ImportError(f"Cannot create module {spec.name}")