add copy to ZonedPluginRegistry

This commit is contained in:
2022-03-12 08:28:09 +01:00
parent edb264dbf5
commit b99421e8e7
3 changed files with 46 additions and 4 deletions

View File

@@ -1,23 +1,47 @@
from functools import reduce
from inspect import signature
from typing import Dict, Optional
from typing import Dict, Optional, List
from src.pluginbase import PluginBase
def flat_map(array: List[List]) -> List:
return reduce(list.__add__, array)
class ZonedPluginRegistry:
def __init__(self, plugins: Dict[str, PluginBase]):
self.plugins: Dict[str, PluginBase] = plugins
def __init__(self):
self.plugins: Dict[str, PluginBase] = {}
def register_plugin(self, name: str, plugin: PluginBase):
self.plugins[name] = plugin
def copy(self):
result = ZonedPluginRegistry()
for name in self.plugins.keys():
plugin = self.plugins[name].copy()
result.register_plugin(name, plugin)
return result
def execute_single(self, function_name: str, *args) -> Optional[any]:
return self._execute(function_name, True, *args)
def execute(self, function_name: str, *args) -> [any]:
return self._execute(function_name, False, *args)
def execute_flat_map(self, function_name: str, *args) -> [any]:
return flat_map(self.execute(function_name, *args))
def execute_remove_falsy(self, function_name: str, *args) -> [any]:
result = self.execute(function_name, *args)
return [r for r in result if r]
def execute_flat_map_remove_falsy(self, function_name: str, *args) -> [any]:
result = flat_map(self.execute(function_name, *args))
return [r for r in result if r]
def _execute(self, function_name: str, return_first: bool, *args) -> []:
result = []
for plugin in self.plugins.values():