Source code for compass.plugin.registry
"""COMPASS plugin registry"""
from compass.utilities.jurisdictions import KNOWN_JURISDICTIONS_REGISTRY
from compass.plugin.base import BaseExtractionPlugin
from compass.exceptions import COMPASSPluginConfigurationError
PLUGIN_REGISTRY = {}
"""dict: Registered COMPASS plugins"""
[docs]
def register_plugin(plugin_class):
"""Register a plugin class in the plugin registry
Parameters
----------
plugin_class : type
The plugin class to register. Must be a subclass of
:class:`~compass.plugin.base.BaseExtractionPlugin` and must pass
the plugin configuration validation.
Raises
------
COMPASSPluginConfigurationError
If the plugin class is not a subclass of
:class:`~compass.plugin.base.BaseExtractionPlugin` or if it does
not pass the plugin configuration validation.
"""
if not issubclass(plugin_class, BaseExtractionPlugin):
msg = (
f"Plugin class {plugin_class.__name__} must be a subclass of "
"`compass.plugin.base.BaseExtractionPlugin`!"
)
raise COMPASSPluginConfigurationError(msg)
if (plugin_id := plugin_class.IDENTIFIER.casefold()) in PLUGIN_REGISTRY:
msg = (
f"Plugin identifier '{plugin_class.IDENTIFIER}' is already in "
"use by another plugin! Please choose a unique identifier for "
f"{plugin_class.__name__}."
)
raise COMPASSPluginConfigurationError(msg)
plugin_class(None, None).validate_plugin_configuration()
if plugin_class.JURISDICTION_DATA_FP is not None:
KNOWN_JURISDICTIONS_REGISTRY.add(plugin_class.JURISDICTION_DATA_FP)
PLUGIN_REGISTRY[plugin_id] = plugin_class