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

30 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-09 01:06 +0000

1# cython: language_level = 3 # noqa: ERA001 

2 

3 

4"""基于PyYAML的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 import yaml 

19except ImportError: 

20 dependency = "PyYAML" 

21 raise DependencyNotFoundError(dependency) from None 

22 

23 

24class PyYamlSL(BasicLocalFileConfigSL): 

25 """基于PyYAML的YAML格式处理器""" 

26 

27 @property 

28 @override 

29 def processor_reg_name(self) -> str: 

30 return "yaml" 

31 

32 @property 

33 @override 

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

35 return ".yaml", ".yml" 

36 

37 supported_file_classes = [ConfigFile] # noqa: RUF012 

38 

39 @override 

40 def save_file( 

41 self, config_file: ABCConfigFile[Any], target_file: SupportsWrite[str], *merged_args: Any, **merged_kwargs: Any 

42 ) -> None: 

43 with self.raises(): 

44 yaml.safe_dump(config_file.config.data, target_file, *merged_args, **merged_kwargs) 

45 

46 @override 

47 def load_file( 

48 self, source_file: SupportsReadAndReadline[str], *merged_args: Any, **merged_kwargs: Any 

49 ) -> ConfigFile[Any]: 

50 with self.raises(): 

51 data = yaml.safe_load(source_file) 

52 

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

54 

55 

56__all__ = ("PyYamlSL",)