config.basic.component

组件配置数据实现

在 0.2.0 版本加入.

Classes

ComponentConfigData

组件配置数据

ComponentMember

组件成员

ComponentMeta

组件元数据

ComponentOrders

组件顺序

Module Contents

class ComponentConfigData(meta: M | None = None, members: collections.abc.Mapping[str, D] | None = None)

Bases: config.basic.core.BasicConfigData[ComponentConfigData.D], config.abc.ABCIndexedConfigData[ComponentConfigData.D]

组件配置数据

在 0.2.0 版本加入.

参数:
  • meta (M | None) -- 组件元数据

  • members (Mapping[str, D] | None) -- 组件成员

__contains__(key: Any) bool
__deepcopy__(memo: dict[str, Any]) Self
__delitem__(index: Any) None

危险

使用此操作可能会导致与元数据不同步且不经过校验!

__eq__(other: Any) bool
__format__(format_spec: str) str
__getitem__(index: Any) D
__iter__() collections.abc.Iterator[str]
__len__() int
__repr__() str
__setitem__(index: Any, value: D) None

危险

使用此操作可能会导致与元数据不同步且不经过校验!

__str__() str
_member(member: str) D

通过成员文件名以及其别名获取成员配置数据

参数:

member (str) -- 成员名

返回:

成员数据

返回类型:

D

_resolve_members(path: ComponentConfigData._resolve_members.P, order: list[str], processor: collections.abc.Callable[[ComponentConfigData._resolve_members.P, D], ComponentConfigData._resolve_members.R], exception: Exception) ComponentConfigData._resolve_members.R

逐个尝试解析成员配置数据

参数:
  • path (P) -- 路径

  • order (list[str]) -- 成员处理顺序

  • processor (Callable[[P, D], R]) -- 成员处理函数

  • exception (Exception) -- 顺序为空抛出的错误

返回:

处理结果

返回类型:

R

重要

针对 RequiredPathNotFoundErrorConfigDataTypeError 做了特殊处理, 多个成员都抛出其一时最终仅抛出其中 KeyInfo.index 最大的

delete(path: config.abc.PathLike, *args: Any, **kwargs: Any) Self

删除路径

参数:

path (PathLike) -- 路径

返回:

返回当前实例便于链式调用

返回类型:

Self

抛出:
exists(path: config.abc.PathLike, *args: Any, **kwargs: Any) bool

判断路径是否存在

参数:
  • path (PathLike) -- 路径

  • ignore_wrong_type (bool) -- 忽略配置数据类型错误

返回:

路径是否存在

返回类型:

bool

抛出:

ConfigDataTypeError -- 配置数据类型错误

freeze(freeze: bool | None = None) Self

冻结配置数据 (切换只读模式)

参数:

freeze (bool | None) -- 是否冻结配置数据, 为 None 时进行切换

返回:

返回当前实例便于链式调用

返回类型:

Self

在 0.1.5 版本加入.

classmethod from_data(*args: Any, **kwargs: Any) Self

提供创建同类型配置数据的快捷方式

返回:

新的配置数据

返回类型:

Self

备注

套壳 __init__ 主要是为了方便内部快速创建与传入的ABCConfigData同类型的对象

例如:

type(instance)(data)

可以简写为

instance.from_data(data)

在 0.2.0 版本发生变更: 现在会自适应初始化参数

get(path: config.abc.PathLike, default: ComponentConfigData.get.V | None = None, *args: Any, return_raw_value: bool = False, **kwargs: Any) ComponentConfigData.get.V | Any

获取路径的值的*快照*,路径不存在时填充默认值

参数:
  • path (PathLike) -- 路径

  • default (V) -- 默认值

  • return_raw_value (bool) -- 是否获取原始值

返回:

路径的值

返回类型:

V | Any

抛出:

ConfigDataTypeError -- 配置数据类型错误

例子

>>> from c41811.config import MappingConfigData
>>> data = MappingConfigData({"key": "value"})

路径存在时返回值

>>> data.get("key")
'value'

路径不存在时返回默认值None

>>> print(data.get("not exists"))
None

自定义默认值

>>> data.get("with default", default="default value")
'default value'

在 0.2.0 版本发生变更: 重命名参数 get_rawreturn_raw_value

modify(path: config.abc.PathLike, *args: Any, **kwargs: Any) Self

修改路径的值

参数:
  • path (PathLike) -- 路径

  • value (Any) -- 值

  • allow_create (bool) -- 是否允许创建不存在的路径,默认为True

返回:

返回当前实例便于链式调用

返回类型:

Self

抛出:

小心

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

注意

allow_create 时,使用与 self.data 一样的类型新建路径

在 0.3.0 版本发生变更: 现在正确的先尝试使用 update 对现有数据进行更新再尝试通过 create 创建新数据

retrieve(path: config.abc.PathLike, *args: Any, **kwargs: Any) Any

获取路径的值的*快照*

参数:
  • path (PathLike) -- 路径

  • return_raw_value (bool) -- 是否获取原始值,为 False 时,会将Mapping | Sequence转换为对应类

返回:

路径的值

返回类型:

Any

抛出:

在 0.2.0 版本发生变更: 重命名参数 get_rawreturn_raw_value

setdefault(path: config.abc.PathLike, default: ComponentConfigData.setdefault.V | None = None, *args: Any, return_raw_value: bool = False, **kwargs: Any) ComponentConfigData.setdefault.V | Any

如果路径不在配置数据中则填充默认值到配置数据并返回

参数:
  • path (PathLike) -- 路径

  • default (V) -- 默认值

  • return_raw_value (bool) -- 是否获取原始值

返回:

路径的值

返回类型:

V | Any

抛出:

例子

>>> from c41811.config import MappingConfigData
>>> data = MappingConfigData({"key": "value"})

路径存在时返回值

>>> data.setdefault("key")
'value'

路径不存在时返回默认值None并填充到原始数据

>>> print(data.setdefault("not exists"))
None
>>> data
MappingConfigData({'key': 'value', 'not exists': None})

自定义默认值

>>> data.setdefault("with default", default="default value")
'default value'
>>> data
MappingConfigData({'key': 'value', 'not exists': None, 'with default': 'default value'})

在 0.2.0 版本发生变更: 重命名参数 get_rawreturn_raw_value

重命名 set_defaultsetdefault

unset(path: config.abc.PathLike, *args: Any, **kwargs: Any) Self

确保路径不存在 (删除路径,但是找不到路径时不会报错)

参数:

path (PathLike) -- 路径

返回:

返回当前实例便于链式调用

返回类型:

Self

抛出:

在 0.1.2 版本加入.

__hash__ = None
__slots__ = ()
_alias2filename: dict[str, str]
_filename2meta: dict[str, ComponentMember]
_members: collections.abc.Mapping[str, D] = None
_meta: M = None
_read_only: bool | None = False
property alias2filename: collections.abc.Mapping[str, str]

别名到文件名的映射

property data_read_only: bool | None

组件数据是否为只读

property filename2meta: collections.abc.Mapping[str, ComponentMember]

文件名到成员元信息的映射

property members: collections.abc.Mapping[str, D]

组件成员

小心

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

property meta: M

组件元信息

小心

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

除非你知道你在做什么,不要轻易修改!

由于 ComponentMeta 仅提供一个通用的接口, 直接修改其中元数据而不修改 config 字段 *可能* 会导致SL与元数据的不同步, 这取决于 ComponentSL 所取用的元数据解析器的行为

property read_only: bool | None

配置数据是否为 只读模式

返回:

配置数据是否为 只读模式

返回类型:

bool | None

class ComponentMember

组件成员

在 0.2.0 版本加入.

alias: str | None = None
config_format: str | None = None
filename: str
class ComponentMeta

组件元数据

在 0.2.0 版本加入.

config: ComponentMeta.D
members: list[ComponentMember] = []
orders: ComponentOrders
parser: config.abc.ABCMetaParser[Any, Any] | None = None
class ComponentOrders

组件顺序

在 0.2.0 版本加入.

create: list[str] = []
delete: list[str] = []
read: list[str] = []
update: list[str] = []