Source code for mindroot.lib.plugins.paths
import os
import sys
from importlib.util import find_spec
from .manifest import load_plugin_manifest
def _get_project_root():
"""Get the absolute path to the project root directory.
Returns:
str: Absolute path to project root
"""
current_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
return current_dir
def _find_core_plugin_path(plugin_name):
"""Find the correct path for a core plugin, checking both development and installed locations.
Args:
plugin_name (str): Name of the core plugin
Returns:
str: Absolute path to the plugin directory or None if not found
"""
dev_path = os.path.join(_get_project_root(), 'coreplugins', plugin_name)
if os.path.exists(dev_path):
return dev_path
try:
import mindroot
pkg_path = os.path.dirname(mindroot.__file__)
installed_path = os.path.join(pkg_path, 'coreplugins', plugin_name)
if os.path.exists(installed_path):
return installed_path
except ImportError:
pass
for path in sys.path:
if 'site-packages' in path or 'dist-packages' in path:
potential_path = os.path.join(path, 'mindroot', 'coreplugins', plugin_name)
if os.path.exists(potential_path):
return potential_path
return None
[docs]
def get_plugin_path(plugin_name):
"""Get the filesystem path for a plugin.
Args:
plugin_name (str): Name of the plugin
Returns:
str: Absolute path to the plugin directory or None if not found
"""
manifest = load_plugin_manifest()
for category in manifest['plugins']:
if plugin_name in manifest['plugins'][category]:
plugin_info = manifest['plugins'][category][plugin_name]
if plugin_info['source'] == 'core':
return _find_core_plugin_path(plugin_name)
elif plugin_info['source'] in ['local', 'github']:
if os.path.exists(plugin_info['source_path']):
return plugin_info['source_path']
else:
spec = find_spec(plugin_name)
if spec:
return spec.origin
return None
[docs]
def get_plugin_import_path(plugin_name):
"""Get the Python import path for a plugin.
Args:
plugin_name (str): Name of the plugin
Returns:
str: Import path for the plugin or None if not found
"""
manifest = load_plugin_manifest()
for category in manifest['plugins']:
if plugin_name in manifest['plugins'][category]:
plugin_info = manifest['plugins'][category][plugin_name]
if plugin_info['source'] == 'core':
return f'coreplugins.{plugin_name}'
elif plugin_info['source'] in ['local', 'github']:
source_path = plugin_info['source_path']
if not os.path.exists(source_path):
return None
parent_dir = os.path.dirname(source_path)
if parent_dir not in sys.path:
sys.path.insert(0, parent_dir)
return os.path.basename(source_path)
else:
spec = find_spec(plugin_name)
return spec.origin if spec else None
return None