#!/usr/bin/env python3 # -*- coding: utf-8 -*- from typing import Self, Any from Interfaces.Application.NucelarMonitorInterface import NucelarMonitorInterface from Abstracts.DatabaseAbstract import DatabaseAbstract class DatabasesManager: def __init__(self:Self, nucelar_monitor:NucelarMonitorInterface) -> None: self.nucelar_monitor:NucelarMonitorInterface = nucelar_monitor key:str self.__databases:dict[str, DatabaseAbstract] = {} for key in ( "default_databases_files", "databases_files", "default_databases", "databases" ): self.add(self.nucelar_monitor.settings.get(key, None, []), True) def get(self:Self, key:str) -> type[DatabaseAbstract]|None: return self.__databases.get(key, None) def add(self:Self, inputs:Any|None, overwrite:bool = False) -> None: subinputs:dict[str, type[DatabaseAbstract]|dict[str, Any|None]] for subinputs in self.nucelar_monitor.files.load_json(inputs): key:str database:DatabaseAbstract|dict[str, Any|None] for key, database in subinputs.items(): if isinstance(database, dict): database = self.nucelar_monitor.models.get( DatabaseAbstract, self.nucelar_monitor.settings.get(("database_type", "type"), database, "sql_server") )(self.nucelar_monitor, database) if database is None: continue if database is not None and isinstance(database, DatabaseAbstract) and ( overwrite or key not in self.__databases ): self.__databases[key] = database def close(self:Self) -> None: database:type[DatabaseAbstract] for database in self.__databases.values(): database.close()