NucelarMonitor/Python/Managers/ControllersManager.py

41 lines
1.5 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Any, Self
from Interfaces.Application.NucelarMonitorInterface import NucelarMonitorInterface
from Abstracts.ControllerAbstract import ControllerAbstract
class ControllersManager:
def __init__(self:Self, nucelar_monitor:NucelarMonitorInterface) -> None:
self.nucelar_monitor:NucelarMonitorInterface = nucelar_monitor
key:str
self.__controllers:dict[str, ControllerAbstract] = {}
for key in (
"default_controllers_files", "controllers_files",
"default_controllers", "controllers"
):
self.add(self.nucelar_monitor.settings.get(key, None, []), True)
def get(self:Self, key:str) -> ControllerAbstract|None:
return self.__controllers.get(key, None)
def add(self:Self, inputs:Any|None, overwrite:bool = False) -> None:
subinputs:dict[str, str|ControllerAbstract]
for subinputs in self.nucelar_monitor.files.load_json(inputs):
key:str
controller:ControllerAbstract|str
for key, controller in subinputs.items():
if isinstance(controller, str):
controller = self.nucelar_monitor.models.get(ControllerAbstract, controller)(self.nucelar_monitor)
if controller is not None and isinstance(controller, ControllerAbstract) and (
overwrite or key not in self.__controllers
):
self.__controllers[key] = controller