diff options
author | Reinier van der Leer <pwuts@agpt.co> | 2024-03-20 16:36:43 +0100 |
---|---|---|
committer | Reinier van der Leer <pwuts@agpt.co> | 2024-03-20 17:10:03 +0100 |
commit | a7c0440e9b90bbede87099c931a051a760027c2b (patch) | |
tree | e75a1e1f2c04efa229fb4e63656321454ae4a531 | |
parent | ci(docs): Fix Netlify build ignore check (diff) | |
download | Auto-GPT-a7c0440e9b90bbede87099c931a051a760027c2b.tar.gz Auto-GPT-a7c0440e9b90bbede87099c931a051a760027c2b.tar.bz2 Auto-GPT-a7c0440e9b90bbede87099c931a051a760027c2b.zip |
fix(agent): Fix and windows-proof `scan_plugins`
- Improve error output for failure to load plugin
- Fix logic to determine qualified module name
- Use `importlib` rather than `__import__` magic function
This unbreaks `scan_plugins` on Windows.
-rw-r--r-- | autogpts/autogpt/autogpt/plugins/__init__.py | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/autogpts/autogpt/autogpt/plugins/__init__.py b/autogpts/autogpt/autogpt/plugins/__init__.py index 0b08a62e4..618a9895a 100644 --- a/autogpts/autogpt/autogpt/plugins/__init__.py +++ b/autogpts/autogpt/autogpt/plugins/__init__.py @@ -6,7 +6,6 @@ import inspect import json import logging import os -import sys import zipfile from pathlib import Path from typing import TYPE_CHECKING, List @@ -220,21 +219,21 @@ def scan_plugins(config: Config) -> List[AutoGPTPluginTemplate]: plugins_config = config.plugins_config # Directory-based plugins - for plugin_path in [f.path for f in os.scandir(config.plugins_dir) if f.is_dir()]: + for plugin_path in [f for f in Path(config.plugins_dir).iterdir() if f.is_dir()]: # Avoid going into __pycache__ or other hidden directories - if plugin_path.startswith("__"): + if plugin_path.name.startswith("__"): continue - plugin_module_path = plugin_path.split(os.path.sep) - plugin_module_name = plugin_module_path[-1] - qualified_module_name = ".".join(plugin_module_path) + plugin_module_name = plugin_path.name + qualified_module_name = ".".join(plugin_path.parts) try: - __import__(qualified_module_name) - except ImportError: - logger.error(f"Failed to load {qualified_module_name}") + plugin = importlib.import_module(qualified_module_name) + except ImportError as e: + logger.error( + f"Failed to load {qualified_module_name} from {plugin_path}: {e}" + ) continue - plugin = sys.modules[qualified_module_name] if not plugins_config.is_enabled(plugin_module_name): logger.warning( @@ -261,8 +260,8 @@ def scan_plugins(config: Config) -> List[AutoGPTPluginTemplate]: zipped_package = zipimporter(str(plugin)) try: zipped_module = zipped_package.load_module(str(module.parent)) - except ZipImportError: - logger.error(f"Failed to load {str(module.parent)}") + except ZipImportError as e: + logger.error(f"Failed to load {module.parent} from {plugin}: {e}") continue for key in dir(zipped_module): |