mirror of
https://github.com/langbot-app/LangBot.git
synced 2025-11-25 19:37:36 +08:00
108 lines
2.8 KiB
Python
108 lines
2.8 KiB
Python
from __future__ import annotations
|
|
|
|
from . import model as file_model
|
|
from .impls import pymodule, json as json_file, yaml as yaml_file
|
|
|
|
|
|
class ConfigManager:
|
|
"""Config file manager"""
|
|
|
|
name: str = None
|
|
"""Config manager name"""
|
|
|
|
description: str = None
|
|
"""Config manager description"""
|
|
|
|
schema: dict = None
|
|
"""Config file schema
|
|
Must conform to JSON Schema Draft 7 specification
|
|
"""
|
|
|
|
file: file_model.ConfigFile = None
|
|
"""Config file instance"""
|
|
|
|
data: dict = None
|
|
"""Config data"""
|
|
|
|
doc_link: str = None
|
|
"""Config file documentation link"""
|
|
|
|
def __init__(self, cfg_file: file_model.ConfigFile) -> None:
|
|
self.file = cfg_file
|
|
self.data = {}
|
|
|
|
async def load_config(self, completion: bool = True):
|
|
self.data = await self.file.load(completion=completion)
|
|
|
|
async def dump_config(self):
|
|
await self.file.save(self.data)
|
|
|
|
def dump_config_sync(self):
|
|
self.file.save_sync(self.data)
|
|
|
|
|
|
async def load_python_module_config(config_name: str, template_name: str, completion: bool = True) -> ConfigManager:
|
|
"""Load Python module config file
|
|
|
|
Args:
|
|
config_name (str): Config file name
|
|
template_name (str): Template file name
|
|
completion (bool): Whether to automatically complete the config file in memory
|
|
|
|
Returns:
|
|
ConfigManager: Config file manager
|
|
"""
|
|
cfg_inst = pymodule.PythonModuleConfigFile(config_name, template_name)
|
|
|
|
cfg_mgr = ConfigManager(cfg_inst)
|
|
await cfg_mgr.load_config(completion=completion)
|
|
|
|
return cfg_mgr
|
|
|
|
|
|
async def load_json_config(
|
|
config_name: str,
|
|
template_name: str = None,
|
|
template_data: dict = None,
|
|
completion: bool = True,
|
|
) -> ConfigManager:
|
|
"""Load JSON config file
|
|
|
|
Args:
|
|
config_name (str): Config file name
|
|
template_name (str): Template file name
|
|
template_data (dict): Template data
|
|
completion (bool): Whether to automatically complete the config file in memory
|
|
"""
|
|
cfg_inst = json_file.JSONConfigFile(config_name, template_name, template_data)
|
|
|
|
cfg_mgr = ConfigManager(cfg_inst)
|
|
await cfg_mgr.load_config(completion=completion)
|
|
|
|
return cfg_mgr
|
|
|
|
|
|
async def load_yaml_config(
|
|
config_name: str,
|
|
template_name: str = None,
|
|
template_data: dict = None,
|
|
completion: bool = True,
|
|
) -> ConfigManager:
|
|
"""Load YAML config file
|
|
|
|
Args:
|
|
config_name (str): Config file name
|
|
template_name (str): Template file name
|
|
template_data (dict): Template data
|
|
completion (bool): Whether to automatically complete the config file in memory
|
|
|
|
Returns:
|
|
ConfigManager: Config file manager
|
|
"""
|
|
cfg_inst = yaml_file.YAMLConfigFile(config_name, template_name, template_data)
|
|
|
|
cfg_mgr = ConfigManager(cfg_inst)
|
|
await cfg_mgr.load_config(completion=completion)
|
|
|
|
return cfg_mgr
|