Coverage for src / c41811 / config / basic / object.py: 100%
25 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对象类型配置数据实现
7.. versionadded:: 0.2.0
8"""
10from typing import Literal
11from typing import override
13from .core import BasicSingleConfigData
16class NoneConfigData(BasicSingleConfigData[None]):
17 """
18 空的配置数据
20 .. versionadded:: 0.2.0
21 """
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)
32 super().__init__(data)
35class ObjectConfigData[D: object](BasicSingleConfigData[D]):
36 """对象配置数据"""
38 _data: D
40 def __init__(self, data: D):
41 """
42 :param data: 配置的原始数据
43 :type data: D
45 .. caution::
46 未默认做深拷贝,可能导致非预期行为
47 """ # noqa: RUF002, D205
48 super().__init__(None) # type: ignore[arg-type]
50 self._data: D = data
52 @property
53 @override
54 def data_read_only(self) -> Literal[False]:
55 """
56 配置数据是否为只读
58 :return: 配置数据是否为只读
59 :rtype: Literal[False]
61 .. note::
62 该配置数据类始终认为配置数据非只读,使其能正确作为配置数据容器使用
63 """ # noqa: RUF002
64 return False
66 @property # type: ignore[explicit-override] # mypy抽风
67 @override
68 def data(self) -> D:
69 """
70 配置的原始数据
72 .. caution::
73 未默认做深拷贝,可能导致非预期的行为
75 .. versionchanged:: 0.3.0
76 现在是可写属性
77 """ # noqa: RUF002
78 return self._data
80 @data.setter
81 def data(self, data: D) -> None:
82 self._data = data
85__all__ = (
86 "NoneConfigData",
87 "ObjectConfigData",
88)