Coverage for src / c41811 / config / basic / object.py: 100%

25 statements  

« prev     ^ index     » next       coverage.py v7.13.3, created at 2026-02-06 06:04 +0000

1# cython: language_level = 3 # noqa: ERA001 

2 

3 

4""" 

5对象类型配置数据实现 

6 

7.. versionadded:: 0.2.0 

8""" 

9 

10from typing import Literal 

11from typing import override 

12 

13from .core import BasicSingleConfigData 

14 

15 

16class NoneConfigData(BasicSingleConfigData[None]): 

17 """ 

18 空的配置数据 

19 

20 .. versionadded:: 0.2.0 

21 """ 

22 

23 def __init__(self, data: None = None): 

24 """ 

25 :param data: 配置的原始数据 

26 :type data: None 

27 """ # noqa: D205 

28 if data is not None: 

29 msg = f"{type(self).__name__} can only accept None as data" 

30 raise ValueError(msg) 

31 

32 super().__init__(data) 

33 

34 

35class ObjectConfigData[D: object](BasicSingleConfigData[D]): 

36 """对象配置数据""" 

37 

38 _data: D 

39 

40 def __init__(self, data: D): 

41 """ 

42 :param data: 配置的原始数据 

43 :type data: D 

44 

45 .. caution:: 

46 未默认做深拷贝,可能导致非预期行为 

47 """ # noqa: RUF002, D205 

48 super().__init__(None) # type: ignore[arg-type] 

49 

50 self._data: D = data 

51 

52 @property 

53 @override 

54 def data_read_only(self) -> Literal[False]: 

55 """ 

56 配置数据是否为只读 

57 

58 :return: 配置数据是否为只读 

59 :rtype: Literal[False] 

60 

61 .. note:: 

62 该配置数据类始终认为配置数据非只读,使其能正确作为配置数据容器使用 

63 """ # noqa: RUF002 

64 return False 

65 

66 @property # type: ignore[explicit-override] # mypy抽风 

67 @override 

68 def data(self) -> D: 

69 """ 

70 配置的原始数据 

71 

72 .. caution:: 

73 未默认做深拷贝,可能导致非预期的行为 

74 

75 .. versionchanged:: 0.3.0 

76 现在是可写属性 

77 """ # noqa: RUF002 

78 return self._data 

79 

80 @data.setter 

81 def data(self, data: D) -> None: 

82 self._data = data 

83 

84 

85__all__ = ( 

86 "NoneConfigData", 

87 "ObjectConfigData", 

88)