51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
#!/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) |