import{_ as s,o as a,c as t,b as n,d as o,e}from"./app-CrguweBL.js";const i={},p=n("h3",{id:"def-flat-config-config-dict-str-any-dict-str-any",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#def-flat-config-config-dict-str-any-dict-str-any"},[n("span",null,[n("em",null,[n("strong",null,"def")]),o(),n("code",null,"flat_config(config: dict[str, Any]) -> dict[str, Any]")])])],-1),c=n("p",null,"扁平化配置文件",-1),l=n("p",{"a.b.c:1":""},"{a:{b:{c:1}}} ->",-1),r=e(`
Args:
config: 配置项目
Returns:
扁平化后的配置文件,但也包含原有的键值对
def flat_config(config: dict[str, Any]) -> dict[str, Any]:
"""
扁平化配置文件
{a:{b:{c:1}}} -> {"a.b.c": 1}
Args:
config: 配置项目
Returns:
扁平化后的配置文件,但也包含原有的键值对
"""
new_config = copy.deepcopy(config)
for (key, value) in config.items():
if isinstance(value, dict):
for (k, v) in flat_config(value).items():
new_config[f'{key}.{k}'] = v
return new_config
load_from_yaml(file: str) -> dict[str, Any]
Load config from yaml file
def load_from_yaml(file: str) -> dict[str, Any]:
"""
Load config from yaml file
"""
logger.debug(f'Loading YAML config from {file}')
config = yaml.safe_load(open(file, 'r', encoding='utf-8'))
return flat_config(config if config is not None else {})
load_from_json(file: str) -> dict[str, Any]
Load config from json file
def load_from_json(file: str) -> dict[str, Any]:
"""
Load config from json file
"""
logger.debug(f'Loading JSON config from {file}')
config = json.load(open(file, 'r', encoding='utf-8'))
return flat_config(config if config is not None else {})
load_from_toml(file: str) -> dict[str, Any]
Load config from toml file
def load_from_toml(file: str) -> dict[str, Any]:
"""
Load config from toml file
"""
logger.debug(f'Loading TOML config from {file}')
config = toml.load(open(file, 'r', encoding='utf-8'))
return flat_config(config if config is not None else {})
load_from_files() -> dict[str, Any]
从指定文件加载配置项,会自动识别文件格式
默认执行扁平化选项
def load_from_files(*files: str, no_warning: bool=False) -> dict[str, Any]:
"""
从指定文件加载配置项,会自动识别文件格式
默认执行扁平化选项
"""
config = {}
for file in files:
if os.path.exists(file):
if file.endswith(('.yaml', 'yml')):
config.update(load_from_yaml(file))
elif file.endswith('.json'):
config.update(load_from_json(file))
elif file.endswith('.toml'):
config.update(load_from_toml(file))
elif not no_warning:
logger.warning(f'Unsupported config file format: {file}')
elif not no_warning:
logger.warning(f'Config file not found: {file}')
return config
load_configs_from_dirs() -> dict[str, Any]
从目录下加载配置文件,不递归
按照读取文件的优先级反向覆盖
默认执行扁平化选项
def load_configs_from_dirs(*directories: str, no_waring: bool=False) -> dict[str, Any]:
"""
从目录下加载配置文件,不递归
按照读取文件的优先级反向覆盖
默认执行扁平化选项
"""
config = {}
for directory in directories:
if not os.path.exists(directory):
if not no_waring:
logger.warning(f'Directory not found: {directory}')
continue
for file in os.listdir(directory):
if file.endswith(_SUPPORTED_CONFIG_FORMATS):
config.update(load_from_files(os.path.join(directory, file), no_warning=no_waring))
return config
load_config_in_default(no_waring: bool) -> dict[str, Any]
从一个标准的轻雪项目加载配置文件
项目目录下的config.*和config目录下的所有配置文件
项目目录下的配置文件优先
def load_config_in_default(no_waring: bool=False) -> dict[str, Any]:
"""
从一个标准的轻雪项目加载配置文件
项目目录下的config.*和config目录下的所有配置文件
项目目录下的配置文件优先
"""
config = load_configs_from_dirs('config', no_waring=no_waring)
config.update(load_from_files('config.yaml', 'config.toml', 'config.json', 'config.yml', no_warning=no_waring))
return config
SatoriNodeConfig(BaseModel)
SatoriConfig(BaseModel)
BasicConfig(BaseModel)
new_config = copy.deepcopy(config)
config = yaml.safe_load(open(file, 'r', encoding='utf-8'))
config = json.load(open(file, 'r', encoding='utf-8'))
config = toml.load(open(file, 'r', encoding='utf-8'))
config = {}
config = {}
config = load_configs_from_dirs('config', no_waring=no_waring)