Files
LangBot/pkg/config/manager.py

110 lines
2.8 KiB
Python
Raw Normal View History

from __future__ import annotations
from . import model as file_model
2024-08-24 20:54:36 +08:00
from .impls import pymodule, json as json_file, yaml as yaml_file
class ConfigManager:
"""配置文件管理器"""
2024-10-15 00:07:40 +08:00
name: str = None
"""配置管理器名"""
description: str = None
"""配置管理器描述"""
schema: dict = None
"""配置文件 schema
需要符合 JSON Schema Draft 7 规范
"""
file: file_model.ConfigFile = None
"""配置文件实例"""
data: dict = None
"""配置数据"""
doc_link: str = None
"""配置文件文档链接"""
def __init__(self, cfg_file: file_model.ConfigFile) -> None:
self.file = cfg_file
self.data = {}
async def load_config(self, completion: bool = True):
2024-05-15 21:40:18 +08:00
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:
2024-08-24 20:54:36 +08:00
"""加载Python模块配置文件
2024-08-24 20:54:36 +08:00
Args:
config_name (str): 配置文件名
template_name (str): 模板文件名
completion (bool): 是否自动补全内存中的配置文件
Returns:
ConfigManager: 配置文件管理器
"""
cfg_inst = pymodule.PythonModuleConfigFile(config_name, template_name)
cfg_mgr = ConfigManager(cfg_inst)
2024-05-15 21:40:18 +08:00
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:
2024-08-24 20:54:36 +08:00
"""加载JSON配置文件
2024-08-24 20:54:36 +08:00
Args:
config_name (str): 配置文件名
template_name (str): 模板文件名
template_data (dict): 模板数据
completion (bool): 是否自动补全内存中的配置文件
"""
cfg_inst = json_file.JSONConfigFile(config_name, template_name, template_data)
cfg_mgr = ConfigManager(cfg_inst)
2024-05-15 21:40:18 +08:00
await cfg_mgr.load_config(completion=completion)
2024-08-24 20:54:36 +08:00
return cfg_mgr
async def load_yaml_config(
config_name: str,
template_name: str = None,
template_data: dict = None,
completion: bool = True,
) -> ConfigManager:
2024-08-24 20:54:36 +08:00
"""加载YAML配置文件
2024-08-24 20:54:36 +08:00
Args:
config_name (str): 配置文件名
template_name (str): 模板文件名
template_data (dict): 模板数据
completion (bool): 是否自动补全内存中的配置文件
Returns:
ConfigManager: 配置文件管理器
"""
cfg_inst = yaml_file.YAMLConfigFile(config_name, template_name, template_data)
2024-08-24 20:54:36 +08:00
cfg_mgr = ConfigManager(cfg_inst)
await cfg_mgr.load_config(completion=completion)
return cfg_mgr