Coverage for src / c41811 / config / processor / hjson.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""" 

5HJson配置文件处理器 

6 

7.. versionadded:: 0.3.0 

8""" 

9 

10from typing import Any 

11from typing import override 

12 

13from .._protocols import SupportsReadAndReadline 

14from .._protocols import SupportsWrite 

15from ..abc import ABCConfigFile 

16from ..basic.core import ConfigFile 

17from ..errors import DependencyNotFoundError 

18from ..main import BasicLocalFileConfigSL 

19 

20try: 

21 # noinspection PyPackageRequirements, PyUnresolvedReferences 

22 import hjson # type: ignore[import-not-found] 

23except ImportError: 

24 dependency = "hjson" 

25 raise DependencyNotFoundError(dependency) from None 

26 

27 

28class HJsonSL(BasicLocalFileConfigSL): 

29 """基于hjson的json处理器""" 

30 

31 @property 

32 @override 

33 def processor_reg_name(self) -> str: 

34 return "human_json" 

35 

36 @property 

37 @override 

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

39 return ".hjson", ".json" 

40 

41 supported_file_classes = [ConfigFile] # noqa: RUF012 

42 

43 @override 

44 def save_file( 

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

46 ) -> None: 

47 with self.raises(): 

48 hjson.dump(config_file.config.data, target_file, *merged_args, **merged_kwargs) 

49 

50 @override 

51 def load_file( 

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

53 ) -> ConfigFile[Any]: 

54 with self.raises(): 

55 data = hjson.load(source_file, *merged_args, **merged_kwargs) 

56 

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

58 

59 

60__all__ = ("HJsonSL",)