Coverage for src / c41811 / config / processor / ruamel_yaml.py: 100%

31 statements  

« prev     ^ index     » next       coverage.py v7.13.3, created at 2026-02-06 06:04 +0000

1# cython: language_level = 3 # noqa: ERA001 

2 

3 

4"""基于ruamel.yaml的YAML格式处理器""" 

5 

6from typing import Any 

7from typing import override 

8 

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 

15 

16try: 

17 # noinspection PyPackageRequirements, PyUnresolvedReferences 

18 from ruamel.yaml import YAML 

19except ImportError: 

20 dependency = "ruamel.yaml" 

21 raise DependencyNotFoundError(dependency) from None 

22 

23 

24class RuamelYamlSL(BasicLocalFileConfigSL): 

25 """ 

26 基于ruamel.yaml的YAML格式处理器 

27 

28 默认尝试最大限度保留yaml中的额外信息(如注释 

29 """ 

30 

31 yaml = YAML(typ="rt", pure=True) 

32 

33 @property 

34 @override 

35 def processor_reg_name(self) -> str: 

36 return "ruamel_yaml" 

37 

38 @property 

39 @override 

40 def supported_file_patterns(self) -> tuple[str, ...]: 

41 return ".yaml", ".yml" 

42 

43 supported_file_classes = [ConfigFile] # noqa: RUF012 

44 

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) 

51 

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) 

58 

59 return ConfigFile(data, config_format=self.reg_name) 

60 

61 

62__all__ = ("RuamelYamlSL",)