Source code for drive.factory.factory
from typing import Any, Callable, Protocol
[docs]class PluginNotFound(Exception):
"""
Error that is raised if the user tries to load a plugin
that is not there
"""
def __init__(self, plugin_type: str) -> None:
super().__init__(
f"Plugin, {plugin_type} not found in the plugins folder. Make sure you loaded the plugin into the json file." # noqa: E501
)
[docs]class AnalysisObj(Protocol):
"""Interface defining of an analysis object"""
[docs] def analyze(self, **kwargs) -> Any:
"""
Method that will analyze the inputs according to the purpose
of the plugin
"""
analyze_obj_creation_funcs: dict[str, Callable[..., AnalysisObj]] = {}
[docs]def register(plugin_name: str, creation_func: Callable[..., AnalysisObj]) -> None:
"""registers the AnalysisObj plugin"""
analyze_obj_creation_funcs[plugin_name] = creation_func
[docs]def unregister(plugin_name: str) -> None:
"""function that will unregister the plugin
Parameters
----------
plugin_name : str
name of the plugin to be loaded. This name will be in json file
"""
analyze_obj_creation_funcs.pop(plugin_name, None)
[docs]def create(arguments: dict[str, Any]) -> AnalysisObj:
args_copy = arguments.copy()
plugin_type: str = args_copy.pop("name")
try:
creation_func = analyze_obj_creation_funcs[plugin_type]
return creation_func(**args_copy)
except KeyError:
raise PluginNotFound(plugin_type) # pylint: disable=raise-missing-from