Coverage for src/c41811/config/processor/pickle.py: 100%
30 statements
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-04 11:16 +0000
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-04 11:16 +0000
1# cython: language_level = 3 # noqa: ERA001
4"""Pickle配置文件处理器"""
6import pickle
7from typing import Any
8from typing import override
10from .._protocols import SupportsReadAndReadline
11from .._protocols import SupportsWrite
12from ..abc import ABCConfigFile
13from ..basic.core import ConfigFile
14from ..main import BasicLocalFileConfigSL
17class PickleSL(BasicLocalFileConfigSL):
18 """
19 pickle格式处理器
21 .. danger::
22 pickle文件存在安全风险,请勿在不可信的文件上使用该处理器
24 参见 `pickle文档 <https://docs.python.org/zh-cn/3/library/pickle.html>`_ 的置顶警告
26 .. versionchanged:: 0.2.0
27 添加 ``.pkl`` 文件后缀支持
28 """ # noqa: RUF002
30 @property
31 @override
32 def processor_reg_name(self) -> str:
33 return "pickle"
35 @property
36 @override
37 def supported_file_patterns(self) -> tuple[str, ...]:
38 return ".pickle", ".pkl"
40 supported_file_classes = [ConfigFile] # noqa: RUF012
41 _s_open_kwargs = {"mode": "wb"} # noqa: RUF012
42 _l_open_kwargs = {"mode": "rb"} # noqa: RUF012
44 @override
45 def save_file(
46 self,
47 config_file: ABCConfigFile[Any],
48 target_file: SupportsWrite[bytes],
49 *merged_args: Any,
50 **merged_kwargs: Any,
51 ) -> None:
52 with self.raises():
53 pickle.dump(config_file.config.data, target_file, *merged_args, **merged_kwargs)
55 @override
56 def load_file(
57 self,
58 source_file: SupportsReadAndReadline[bytes],
59 *merged_args: Any,
60 **merged_kwargs: Any,
61 ) -> ConfigFile[Any]:
62 with self.raises():
63 data = pickle.load(source_file, *merged_args, **merged_kwargs) # noqa: S301
65 return ConfigFile(data, config_format=self.reg_name)
68__all__ = ("PickleSL",)