aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Reinier van der Leer <pwuts@agpt.co> 2024-03-20 16:36:43 +0100
committerGravatar Reinier van der Leer <pwuts@agpt.co> 2024-03-20 17:10:03 +0100
commita7c0440e9b90bbede87099c931a051a760027c2b (patch)
treee75a1e1f2c04efa229fb4e63656321454ae4a531
parentci(docs): Fix Netlify build ignore check (diff)
downloadAuto-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__.py23
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):