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

30 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-09 01:06 +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 .. versionchanged:: 0.2.0 

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

23 """ 

24 

25 @property 

26 @override 

27 def processor_reg_name(self) -> str: 

28 return "pickle" 

29 

30 @property 

31 @override 

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

33 return ".pickle", ".pkl" 

34 

35 supported_file_classes = [ConfigFile] # noqa: RUF012 

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

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

38 

39 @override 

40 def save_file( 

41 self, 

42 config_file: ABCConfigFile[Any], 

43 target_file: SupportsWrite[bytes], 

44 *merged_args: Any, 

45 **merged_kwargs: Any, 

46 ) -> None: 

47 with self.raises(): 

48 pickle.dump(config_file.config.data, target_file, *merged_args, **merged_kwargs) 

49 

50 @override 

51 def load_file( 

52 self, 

53 source_file: SupportsReadAndReadline[bytes], 

54 *merged_args: Any, 

55 **merged_kwargs: Any, 

56 ) -> ConfigFile[Any]: 

57 with self.raises(): 

58 data = pickle.load(source_file, *merged_args, **merged_kwargs) # noqa: S301 

59 

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

61 

62 

63__all__ = ("PickleSL",)