# Copyright 2020 Mycroft AI Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # """Common functions for loading plugins.""" import pkg_resources from .log import LOG def find_plugins(plug_type): """Finds all plugins matching specific entrypoint type. Args: plug_type (str): plugin entrypoint string to retrieve Returns: dict mapping plugin names to plugin entrypoints """ return { entry_point.name: entry_point.load() for entry_point in pkg_resources.iter_entry_points(plug_type) } def load_plugin(plug_type, plug_name): """Load a specific plugin from a specific plugin type. Args: plug_type: (str) plugin type name. Ex. "mycroft.plugin.tts". plug_name: (str) specific plugin name Returns: Loaded plugin Object or None if no matching object was found. """ plugins = find_plugins(plug_type) if plug_name in plugins: ret = plugins[plug_name] else: LOG.warning('Could not find the plugin {}.{}'.format(plug_type, plug_name)) ret = None return ret