跳至主要內容

- 资源包开发
- 轻雪函数
- 轻雪插件开发
- 进程通信
- - liteyuki
  - liteyuki.config
  - liteyuki.exception
  - liteyuki.log
  - liteyuki.mkdoc
  - liteyuki.utils

# liteyuki.config

远野千束
大约 3 分钟
API

此页内容

- def flat_config(config: dict[str, Any]) -> dict[str, Any]
- def load_from_yaml(file: str) -> dict[str, Any]
- def load_from_json(file: str) -> dict[str, Any]
- def load_from_toml(file: str) -> dict[str, Any]
- def load_from_files() -> dict[str, Any]
- def load_configs_from_dirs() -> dict[str, Any]
- def load_config_in_default(no_waring: bool) -> dict[str, Any]
- class SatoriNodeConfig(BaseModel)
- class SatoriConfig(BaseModel)
- class BasicConfig(BaseModel)
- var new_config = copy.deepcopy(config)
- var config = yaml.safe_load(open(file, 'r', encoding='utf-8'))
- var config = json.load(open(file, 'r', encoding='utf-8'))
- var config = toml.load(open(file, 'r', encoding='utf-8'))
- var config = {}
- var config = {}
- var config = load_configs_from_dirs('config', no_waring=no_waring)

### def `flat_config(config: dict[str, Any]) -> dict[str, Any]`

扁平化配置文件

{a:{b:{c:1}}} ->

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

### def `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 {})

### def `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 {})

### def `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 {})

### def `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

### def `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

### def `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

### class `SatoriNodeConfig(BaseModel)`

### class `SatoriConfig(BaseModel)`

### class `BasicConfig(BaseModel)`

### var `new_config = copy.deepcopy(config)`

### var `config = yaml.safe_load(open(file, 'r', encoding='utf-8'))`

### var `config = json.load(open(file, 'r', encoding='utf-8'))`

### var `config = toml.load(open(file, 'r', encoding='utf-8'))`

### var `config = {}`

### var `config = load_configs_from_dirs('config', no_waring=no_waring)`