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
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-06 06:04 +0000
1# cython: language_level = 3 # noqa: ERA001
4"""
5纯文本配置文件处理器
7.. versionadded:: 0.2.0
8"""
10from typing import Any
11from typing import TextIO
12from typing import cast
13from typing import override
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
24class PlainTextSL(BasicLocalFileConfigSL):
25 """纯文本格式处理器"""
27 @property
28 @override
29 def processor_reg_name(self) -> str:
30 return "plaintext"
32 @property
33 @override
34 def supported_file_patterns(self) -> tuple[str, ...]:
35 return ".md", ".markdown", ".rst", ".txt"
37 supported_file_classes = [ConfigFile] # noqa: RUF012
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
52 with self.raises():
53 iter(config_file.config)
55 linesep = merged_kwargs.get("linesep", "")
56 for line in config_file.config:
57 with self.raises():
58 target_file.write(line + linesep)
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]
74 return ConfigFile(
75 cast(StringConfigData[str] | SequenceConfigData[list[Any]], ConfigDataFactory(content)),
76 config_format=self.reg_name,
77 )
80__all__ = ("PlainTextSL",)