Coverage for src / c41811 / config / processor / ruamel_yaml.py: 100%
31 statements
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-09 01:06 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-09 01:06 +0000
1# cython: language_level = 3 # noqa: ERA001
4"""基于ruamel.yaml的YAML格式处理器"""
6from typing import Any
7from typing import override
9from .._protocols import SupportsReadAndReadline
10from .._protocols import SupportsWrite
11from ..abc import ABCConfigFile
12from ..basic.core import ConfigFile
13from ..errors import DependencyNotFoundError
14from ..main import BasicLocalFileConfigSL
16try:
17 # noinspection PyPackageRequirements, PyUnresolvedReferences
18 from ruamel.yaml import YAML
19except ImportError:
20 dependency = "ruamel.yaml"
21 raise DependencyNotFoundError(dependency) from None
24class RuamelYamlSL(BasicLocalFileConfigSL):
25 """
26 基于ruamel.yaml的YAML格式处理器
28 默认尝试最大限度保留yaml中的额外信息(如注释
29 """
31 yaml = YAML(typ="rt", pure=True)
33 @property
34 @override
35 def processor_reg_name(self) -> str:
36 return "ruamel_yaml"
38 @property
39 @override
40 def supported_file_patterns(self) -> tuple[str, ...]:
41 return ".yaml", ".yml"
43 supported_file_classes = [ConfigFile] # noqa: RUF012
45 @override
46 def save_file(
47 self, config_file: ABCConfigFile[Any], target_file: SupportsWrite[str], *merged_args: Any, **merged_kwargs: Any
48 ) -> None:
49 with self.raises():
50 self.yaml.dump(config_file.config.data, target_file)
52 @override
53 def load_file(
54 self, source_file: SupportsReadAndReadline[str], *merged_args: Any, **merged_kwargs: Any
55 ) -> ConfigFile[Any]:
56 with self.raises():
57 data = self.yaml.load(source_file)
59 return ConfigFile(data, config_format=self.reg_name)
62__all__ = ("RuamelYamlSL",)