aboutsummaryrefslogtreecommitdiffstats
path: root/src/PluginManager.py
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2023-09-01 19:31:47 +0300
committerJan Tuomi <jans.tuomi@gmail.com>2023-09-10 19:01:00 +0300
commit398799de0c1826c3544eb6eec681fa48096932a0 (patch)
treec2a2cf7fcf30276ffc432e7a1750efd6b7d2c8bf /src/PluginManager.py
parentb7f129b29b8b8103336bfae265b3d5a0bc5ea03a (diff)
Refactor
Diffstat (limited to 'src/PluginManager.py')
-rw-r--r--src/PluginManager.py71
1 files changed, 0 insertions, 71 deletions
diff --git a/src/PluginManager.py b/src/PluginManager.py
deleted file mode 100644
index 4a9bd13..0000000
--- a/src/PluginManager.py
+++ /dev/null
@@ -1,71 +0,0 @@
-import importlib
-import schedule
-import time
-from types import ModuleType
-from typing import Any
-from AggroConfig import AggroConfig
-from Item import Item
-from PluginInterface import PluginInterface
-from utils import get_param
-
-
-class PluginManager:
- def __init__(self, config: AggroConfig) -> None:
- self._plugins: dict[str, Any] = {}
- self.plugin_instances: dict[str, PluginInterface] = {}
- self.running = False
- self.config = config
-
- def load_plugin(self, plugin_name: str) -> None:
- module: ModuleType = importlib.import_module(plugin_name)
- plugin_class = module.Plugin
- self._plugins[plugin_name] = plugin_class
-
- def propagate(self, id: str, items: list[Item]):
- next_nodes: list[str]
- if id not in self.config.graph:
- next_nodes = []
- else:
- next_nodes = self.config.graph[id]
-
- for next_node_id in next_nodes:
- self.run_plugin_job(next_node_id, items)
-
- def run_plugin_job(self, id: str, items: list[Item] = []):
- if not self.running:
- return
-
- plugin: PluginInterface = self.plugin_instances[id]
- ret_items: list[Item] = plugin.process([items])
- self.propagate(id, ret_items)
-
- def build_plugin_instances(self):
- self.graph: dict[str, PluginInterface] = {}
- for id in self.config.plugins:
- params: dict[str, str] = self.config.plugins[id]
-
- plugin_name = get_param("plugin", params)
- trigger_type = get_param("trigger_type", params)
-
- if plugin_name not in self._plugins:
- self.load_plugin(plugin_name)
-
- match trigger_type:
- case "schedule":
- schedule_expr = get_param("schedule_expr", params)
- job: schedule.Job = eval(schedule_expr, {"schedule": schedule})
- job.do(self.run_plugin_job, id) # type: ignore
- case "input_change":
- pass
- case _:
- raise Exception("unknown trigger_type: " + trigger_type)
-
- PluginClass: Any = self._plugins[plugin_name]
- plugin: PluginInterface = PluginClass(id=id, params=params)
- self.plugin_instances[id] = plugin
-
- def run(self) -> None:
- self.running = True
- while self.running:
- schedule.run_pending()
- time.sleep(1)