importer.py 991 B

123456789101112131415161718192021222324252627282930313233343536
  1. import importlib
  2. from importlib import util
  3. import os
  4. from engine import log
  5. from engine.plugins.plugin import LoadablePlugin
  6. PLUGIN_DIR = '/etc/hometv/plugins'
  7. LOADED_PLUGINS = {}
  8. ENABLED_PLUGINS = {}
  9. def find_plugins():
  10. for package in os.listdir(PLUGIN_DIR):
  11. modules = _import(package, '__init__')
  12. for module in modules.__all__:
  13. _class = _import(package, module)
  14. if _class.__name__.endswith('plugin'):
  15. LOADED_PLUGINS[package] = _class
  16. def load_plugins(plugins):
  17. for plugin in plugins:
  18. if plugin in LOADED_PLUGINS:
  19. ENABLED_PLUGINS[plugin] = LoadablePlugin(LOADED_PLUGINS[plugin])
  20. def _import(package, module):
  21. spec = util.spec_from_file_location(
  22. '{}.{}'.format(package, module),
  23. '{}/{}/{}.py'.format(PLUGIN_DIR, package, module))
  24. load = util.module_from_spec(spec)
  25. spec.loader.exec_module(load)
  26. log.debug('Imported: {}.{}'.format(package, module))
  27. return load