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

45 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""" 

5纯文本配置文件处理器 

6 

7.. versionadded:: 0.2.0 

8""" 

9 

10from typing import Any 

11from typing import TextIO 

12from typing import cast 

13from typing import override 

14 

15from .._protocols import SupportsWrite 

16from ..abc import ABCConfigFile 

17from ..basic.core import ConfigFile 

18from ..basic.factory import ConfigDataFactory 

19from ..basic.sequence import SequenceConfigData 

20from ..basic.sequence import StringConfigData 

21from ..main import BasicLocalFileConfigSL 

22 

23 

24class PlainTextSL(BasicLocalFileConfigSL): 

25 """纯文本格式处理器""" 

26 

27 @property 

28 @override 

29 def processor_reg_name(self) -> str: 

30 return "plaintext" 

31 

32 @property 

33 @override 

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

35 return ".md", ".markdown", ".rst", ".txt" 

36 

37 supported_file_classes = [ConfigFile] # noqa: RUF012 

38 

39 @override 

40 def save_file( 

41 self, 

42 config_file: ABCConfigFile[StringConfigData[Any] | SequenceConfigData[Any]], 

43 target_file: SupportsWrite[str], 

44 *merged_args: Any, 

45 **merged_kwargs: Any, 

46 ) -> None: 

47 if isinstance(config_file.config, StringConfigData): 

48 with self.raises(): 

49 target_file.write(config_file.config.data) 

50 return 

51 

52 with self.raises(): 

53 iter(config_file.config) 

54 

55 linesep = merged_kwargs.get("linesep", "") 

56 for line in config_file.config: 

57 with self.raises(): 

58 target_file.write(line + linesep) 

59 

60 @override 

61 def load_file( 

62 self, source_file: TextIO, *merged_args: Any, **merged_kwargs: Any 

63 ) -> ConfigFile[StringConfigData[str] | SequenceConfigData[list[str]]]: 

64 if merged_kwargs.get("split_line"): 

65 with self.raises(): 

66 content: list[str] = source_file.readlines() 

67 if merged_kwargs.get("remove_linesep"): 

68 for i, line in enumerate(content): 

69 content[i] = line.removesuffix(merged_kwargs.get("remove_linesep", "")) 

70 else: 

71 with self.raises(): 

72 content: str = source_file.read() # type: ignore[no-redef] 

73 

74 return ConfigFile( 

75 cast(StringConfigData[str] | SequenceConfigData[list[Any]], ConfigDataFactory(content)), 

76 config_format=self.reg_name, 

77 ) 

78 

79 

80__all__ = ("PlainTextSL",)