Fixed plugin name handling in GlancesPluginModel and optimized package handling in load_additional_plugins

This commit is contained in:
Christoph Zimmermann 2023-10-31 16:19:11 +01:00
parent 0ce4092df7
commit 037d3f7c89
2 changed files with 22 additions and 8 deletions

View File

@ -70,8 +70,16 @@ class GlancesPluginModel(object):
:stats_init_value: Default value for a stats item
"""
# Build the plugin name
# Get second-last entry as the last one will always be 'model'
self.plugin_name = self.__class__.__module__.split('.')[-2]
_mod = self.__class__.__module__
_comp = _mod.split('.')
# Internal or external module (former prefixed by 'glances.plugins')
if 'glances.plugins' in _mod:
_ndx = 2
else:
_ndx = -2
self.plugin_name = _comp[_ndx]
if self.plugin_name.startswith('glances_'):
self.plugin_name = self.plugin_name.split('glances_')[1]
logger.debug("Init {} plugin".format(self.plugin_name))

View File

@ -15,7 +15,7 @@ import sys
import threading
import traceback
from importlib import import_module
import pkgutil
import pathlib
from glances.logger import logger
from glances.globals import exports_path, plugins_path, sys_path
@ -142,10 +142,16 @@ class GlancesStats(object):
def get_addl_plugins(self, plugin_path):
""" Get list of additonal plugins """
_plugin_list = []
for plugin in pkgutil.walk_packages([plugin_path]):
# Make sure we only include top-level packages in that directory
if plugin.ispkg and not plugin.name.startswith('__') and plugin.module_finder.path == plugin_path:
_plugin_list.append(plugin.name)
for plugin in os.listdir(plugin_path):
path = os.path.join(plugin_path, plugin)
if os.path.isdir(path) and not path.startswith('__'):
# Poor man's walk_pkgs - can't use pkgutil as the module would be already imported here!
for fil in pathlib.Path(path).glob('*.py'):
if fil.is_file():
with open(fil) as fd:
if 'PluginModel' in fd.read():
_plugin_list.append(plugin)
break
return _plugin_list
@ -154,7 +160,7 @@ class GlancesStats(object):
if config and config.parser.has_option('global', 'plugin_dir'):
path = config.parser['global']['plugin_dir']
if args and 'plugin_dir' in args:
if args and 'plugin_dir' in args and args.plugin_dir:
path = args.plugin_dir
if path: