Source code for mafw.plugin_manager

#  Copyright 2025 European Union
#  Author: Bulgheroni Antonio (antonio.bulgheroni@ec.europa.eu)
#  SPDX-License-Identifier: EUPL-1.2
"""
Provides utilities to retrieve internal and external plugins.
"""

import pluggy

from mafw import hookspecs, plugins

global_mafw_plugin_manager: dict[str, pluggy.PluginManager] = {}


[docs] def get_plugin_manager(force_recreate: bool = False) -> pluggy.PluginManager: """ Create a new or return an existing plugin manager for a given project :param force_recreate: Flag to force the creation of a new plugin manager. Defaults to False :type force_recreate: bool, Optional :return: The plugin manager :rtype: pluggy.PluginManager """ if 'mafw' in global_mafw_plugin_manager and force_recreate: del global_mafw_plugin_manager['mafw'] if 'mafw' not in global_mafw_plugin_manager: pm = pluggy.PluginManager('mafw') pm.add_hookspecs(hookspecs) pm.load_setuptools_entrypoints('mafw') pm.register(plugins) global_mafw_plugin_manager['mafw'] = pm return global_mafw_plugin_manager['mafw']