NucelarMonitor/Python/Managers/DatabasesManager.py

53 lines
1.9 KiB
Python

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