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

1# cython: language_level = 3 # noqa: ERA001 

2 

3 

4"""Pickle配置文件处理器""" 

5 

6import pickle 

7from typing import Any 

8from typing import override 

9 

10from .._protocols import SupportsReadAndReadline 

11from .._protocols import SupportsWrite 

12from ..abc import ABCConfigFile 

13from ..basic.core import ConfigFile 

14from ..main import BasicLocalFileConfigSL 

15 

16 

17class PickleSL(BasicLocalFileConfigSL): 

18 """ 

19 pickle格式处理器 

20 

21 .. danger:: 

22 pickle文件存在安全风险,请勿在不可信的文件上使用该处理器 

23 

24 参见 `pickle文档 <https://docs.python.org/zh-cn/3/library/pickle.html>`_ 的置顶警告 

25 

26 .. versionchanged:: 0.2.0 

27 添加 ``.pkl`` 文件后缀支持 

28 """ # noqa: RUF002 

29 

30 @property 

31 @override 

32 def processor_reg_name(self) -> str: 

33 return "pickle" 

34 

35 @property 

36 @override 

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

38 return ".pickle", ".pkl" 

39 

40 supported_file_classes = [ConfigFile] # noqa: RUF012 

41 _s_open_kwargs = {"mode": "wb"} # noqa: RUF012 

42 _l_open_kwargs = {"mode": "rb"} # noqa: RUF012 

43 

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) 

54 

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 

64 

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

66 

67 

68__all__ = ("PickleSL",)