Coverage for src / c41811 / config / processor / tomlkit.py: 100%
33 statements
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-09 01:06 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-09 01:06 +0000
1# cython: language_level = 3 # noqa: ERA001
4"""
5基于tomlkit的TOML格式处理器"
7.. versionadded:: 0.3.0
8"""
10from collections.abc import Mapping
11from collections.abc import MutableMapping
12from typing import IO
13from typing import Any
14from typing import cast
15from typing import override
17from ..abc import ABCConfigFile
18from ..basic.core import ConfigFile
19from ..basic.mapping import MappingConfigData
20from ..errors import DependencyNotFoundError
21from ..main import BasicLocalFileConfigSL
23try:
24 # noinspection PyPackageRequirements, PyUnresolvedReferences
25 import tomlkit
26except ImportError:
27 dependency = "tomlkit"
28 raise DependencyNotFoundError(dependency) from None
31class TomlKitSL(BasicLocalFileConfigSL):
32 """基于tomlkit的TOML格式处理器"""
34 @property
35 @override
36 def processor_reg_name(self) -> str:
37 return "tomlkit"
39 @property
40 @override
41 def supported_file_patterns(self) -> tuple[str, ...]:
42 return (".toml",)
44 supported_file_classes = [ConfigFile] # noqa: RUF012
46 @override
47 def save_file(
48 self,
49 config_file: ABCConfigFile[MappingConfigData[Mapping[str, Any]]],
50 target_file: IO[str],
51 *merged_args: Any,
52 **merged_kwargs: Any,
53 ) -> None:
54 with self.raises():
55 tomlkit.dump(config_file.config.data, target_file, *merged_args, **merged_kwargs)
57 @override
58 def load_file(
59 self,
60 source_file: IO[str] | IO[bytes],
61 *merged_args: Any,
62 **merged_kwargs: Any,
63 ) -> ConfigFile[MappingConfigData[MutableMapping[str, Any]]]:
64 with self.raises():
65 data = tomlkit.load(source_file, *merged_args, **merged_kwargs)
67 return cast(
68 ConfigFile[MappingConfigData[MutableMapping[str, Any]]],
69 ConfigFile(data, config_format=self.reg_name),
70 )
73__all__ = ("TomlKitSL",)