services/ui_backend_service/plugins/__init__.py (55 lines of code) (raw):
from services.utils import logging
from ..api.utils import get_json_config
from .plugin import (Plugin, PluginException)
_PLUGINS = []
logger = logging.getLogger("Plugin")
def list_plugins():
global _PLUGINS
return _PLUGINS
def init_plugins():
global _PLUGINS
logger.info("Init plugins")
plugins = get_json_config("plugins")
if plugins:
global_auth = None
if "auth" in plugins and isinstance(plugins["auth"], dict):
global_auth = plugins["auth"]
for identifier, value in plugins.items():
if isinstance(value, str):
repository = value
ref = None
parameters = {}
paths = None
auth = global_auth
elif identifier == "auth":
continue
elif isinstance(value, dict):
repository = value.get("repository", None)
ref = value.get("ref", None)
parameters = value.get("parameters", {})
paths = value.get("paths", None)
if "auth" in value:
auth = value.get("auth", None)
else:
auth = global_auth
else:
logger.warning(" [{}] Invalid plugin format, skipping".format(identifier))
continue
if paths and isinstance(paths, list):
for path in paths:
_load_plugin(identifier=identifier, repository=repository, ref=ref, parameters=parameters, path=path, auth=auth)
else:
_load_plugin(identifier=identifier, repository=repository, ref=ref, parameters=parameters, auth=auth)
logger.info("Plugins ready: {}".format(list(map(lambda p: p.identifier, _PLUGINS))))
def _load_plugin(identifier: str, repository: str = None, ref: str = None, parameters: dict = {}, path: str = None, auth: dict = {}):
global _PLUGINS
try:
plugin = Plugin(identifier=identifier, repository=repository, ref=ref, parameters=parameters, path=path, auth=auth)
_PLUGINS.append(plugin.init())
except PluginException as err:
logger.error(" [{}:{}] PluginException: {}".format(identifier, path, err))
except Exception as err:
logger.error(" [{}:{}] Unknown error loading plugin {}".format(identifier, path, err))
def _reset_plugins():
global _PLUGINS
_PLUGINS = []