import importlib from importlib import util import os from engine import log from engine.plugins.plugin import LoadablePlugin PLUGIN_DIR = '/etc/hometv/plugins' LOADED_PLUGINS = {} ENABLED_PLUGINS = {} def find_plugins(): for package in os.listdir(PLUGIN_DIR): modules = _import(package, '__init__') for module in modules.__all__: _class = _import(package, module) if _class.__name__.endswith('plugin'): LOADED_PLUGINS[package] = _class def load_plugins(plugins): for plugin in plugins: if plugin in LOADED_PLUGINS: ENABLED_PLUGINS[plugin] = LoadablePlugin(LOADED_PLUGINS[plugin]) def _import(package, module): spec = util.spec_from_file_location( '{}.{}'.format(package, module), '{}/{}/{}.py'.format(PLUGIN_DIR, package, module)) load = util.module_from_spec(spec) spec.loader.exec_module(load) log.debug('Imported: {}.{}'.format(package, module)) return load