#!/usr/bin/env python3 # -*- coding: utf-8 -*- from typing import Self, Any from Interfaces.Application.CXCVInterface import CXCVInterface from Abstracts.DatabasesAbstract import DatabasesAbstract from Utils.Utils import Utils class DatabasesManager: def __init__(self:Self, cxcv:CXCVInterface) -> None: key:str self.cxcv:CXCVInterface = cxcv self.__databases:dict[str, DatabasesAbstract] = {} for key in ("default_databases_models", "databases_models"): self.cxcv.models.add(DatabasesAbstract, self.cxcv.settings.get(key), True) for key in ( "default_databases_files", "default_databases", "databases_files", "databases" ): self.add(self.cxcv.settings.get(key), True) def get(self:Self, database:str|DatabasesAbstract) -> DatabasesAbstract|None: return ( database if isinstance(database, DatabasesAbstract) else self.__databases[database] if database in self.__databases else None) def add(self:Self, inputs:Any|None, overwrite:bool = False) -> None: subinputs:dict[str, DatabasesAbstract] for subinputs in self.cxcv.files.load_json(inputs): key:str subinputs:dict[str, Any|None] for key, subinputs in subinputs.items(): if overwrite or key not in self.__databases: DatabaseModel:type[DatabasesAbstract]|None = self.cxcv.models.get( DatabasesAbstract, Utils.get_value("model", subinputs, key) ) if DatabaseModel is not None: self.__databases[key] = DatabaseModel(self.cxcv, key, subinputs)