#!/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