config.basic.sequence ===================== .. py:module:: config.basic.sequence .. autoapi-nested-parse:: 序列类型配置数据实现 .. versionadded:: 0.2.0 Classes ------- .. autoapisummary:: config.basic.sequence.SequenceConfigData config.basic.sequence.StringConfigData Module Contents --------------- .. py:class:: SequenceConfigData(data: D | None = None) Bases: :py:obj:`config.basic.core.BasicIndexedConfigData`\ [\ :py:obj:`SequenceConfigData.D`\ ], :py:obj:`collections.abc.MutableSequence`\ [\ :py:obj:`Any`\ ] 序列配置数据 .. versionadded:: 0.1.5 :param data: 序列数据 :type data: D | None .. py:method:: __add__(other: Any) -> Self .. py:method:: __bool__() -> bool .. py:method:: __contains__(key: Any) -> bool .. py:method:: __deepcopy__(memo: dict[str, Any]) -> Self .. py:method:: __delitem__(index: Any) -> None .. py:method:: __eq__(other: Any) -> bool .. py:method:: __format__(format_spec: str) -> str .. py:method:: __getitem__(index: Any) -> Any .. py:method:: __iadd__(values) .. py:method:: __iter__() -> collections.abc.Iterator[D] .. py:method:: __len__() -> int .. py:method:: __mul__(other: Any) -> Self .. py:method:: __radd__(other: Any) -> Self .. py:method:: __repr__() -> str .. py:method:: __reversed__() -> collections.abc.Iterator[D] .. py:method:: __rmul__(other: Any) -> Self .. py:method:: __setitem__(index: Any, value: Any) -> None .. py:method:: __str__() -> str .. py:method:: __subclasshook__(C) :classmethod: .. py:method:: _process_path(path: config.abc.ABCPath[Any], path_checker: collections.abc.Callable[[Any, config.abc.AnyKey, config.abc.ABCPath[Any], int], BasicIndexedConfigData._process_path.X], process_return: collections.abc.Callable[[Any], BasicIndexedConfigData._process_path.Y]) -> BasicIndexedConfigData._process_path.X | BasicIndexedConfigData._process_path.Y 处理键路径的通用函数 :param path: 键路径 :type path: ABCPath :param path_checker: 检查并处理每个路径段,返回值非None时结束操作并返回值 :type path_checker: Callable[(current_data: Any, current_key: ABCKey, last_path: ABCPath, path_index: int), X] :param process_return: 处理最终结果,该函数返回值会被直接返回 :type process_return: Callable[(current_data: Any), Y] :return: 处理结果 :rtype: X | Y .. versionchanged:: 0.2.0 重命名参数 ``process_check`` 为 ``path_checker`` .. py:method:: append(value: Any) -> None S.append(value) -- append value to the end of the sequence .. py:method:: clear() -> None S.clear() -> None -- remove all items from S .. py:method:: count(value: Any) -> int S.count(value) -> integer -- return number of occurrences of value .. py:method:: delete(path: config.abc.PathLike) -> Self 删除路径 :param path: 路径 :type path: PathLike :return: 返回当前实例便于链式调用 :rtype: Self :raise ConfigDataReadOnlyError: 配置数据为只读 :raise ConfigDataTypeError: 配置数据类型错误 :raise RequiredPathNotFoundError: 需求的键不存在 .. py:method:: exists(path: config.abc.PathLike, *, ignore_wrong_type: bool = False) -> bool 判断路径是否存在 :param path: 路径 :type path: PathLike :param ignore_wrong_type: 忽略配置数据类型错误 :type ignore_wrong_type: bool :return: 路径是否存在 :rtype: bool :raise ConfigDataTypeError: 配置数据类型错误 .. py:method:: extend(values: collections.abc.Iterable[Any]) -> None S.extend(iterable) -- extend sequence by appending elements from the iterable .. py:method:: freeze(freeze: bool | None = None) -> Self 冻结配置数据 (切换只读模式) :param freeze: 是否冻结配置数据, 为 :py:const:`None` 时进行切换 :type freeze: bool | None :return: 返回当前实例便于链式调用 :rtype: Self .. versionadded:: 0.1.5 .. py:method:: from_data(*args: Any, **kwargs: Any) -> Self :classmethod: 提供创建同类型配置数据的快捷方式 :return: 新的配置数据 :rtype: Self .. note:: 套壳 ``__init__`` 主要是为了方便内部快速创建与传入的ABCConfigData同类型的对象 例如: .. code-block:: python type(instance)(data) 可以简写为 .. code-block:: python instance.from_data(data) .. versionchanged:: 0.2.0 现在会自适应初始化参数 .. py:method:: get(path: config.abc.PathLike, default: BasicIndexedConfigData.get.V | None = None, *, return_raw_value: bool = False) -> BasicIndexedConfigData.get.V | Any 获取路径的值的*快照*,路径不存在时填充默认值 :param path: 路径 :type path: PathLike :param default: 默认值 :type default: V :param return_raw_value: 是否获取原始值 :type return_raw_value: bool :return: 路径的值 :rtype: V | Any :raise 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' .. versionchanged:: 0.2.0 重命名参数 ``get_raw`` 为 ``return_raw_value`` .. py:method:: index(*args: Any) -> int S.index(value, [start, [stop]]) -> integer -- return first index of value. Raises ValueError if the value is not present. Supporting start and stop arguments is optional, but recommended. .. py:method:: insert(index: int, value: Any) -> None S.insert(index, value) -- insert value before index .. py:method:: modify(path: config.abc.PathLike, value: Any, *, allow_create: bool = True) -> Self 修改路径的值 :param path: 路径 :type path: PathLike :param value: 值 :type value: Any :param allow_create: 是否允许创建不存在的路径,默认为True :type allow_create: bool :return: 返回当前实例便于链式调用 :rtype: Self :raise ConfigDataReadOnlyError: 配置数据为只读 :raise ConfigDataTypeError: 配置数据类型错误 :raise RequiredPathNotFoundError: 需求的键不存在 .. caution:: ``value`` 参数未默认做深拷贝,可能导致非预期行为 .. attention:: ``allow_create`` 时,使用与 `self.data` 一样的类型新建路径 .. py:method:: pop(index: int = -1) -> Any S.pop([index]) -> item -- remove and return item at index (default last). Raise IndexError if list is empty or index is out of range. .. py:method:: remove(value: Any) -> None S.remove(value) -- remove first occurrence of value. Raise ValueError if the value is not present. .. py:method:: retrieve(path: config.abc.PathLike, *, return_raw_value: bool = False) -> Any 获取路径的值的*快照* :param path: 路径 :type path: PathLike :param return_raw_value: 是否获取原始值,为 :py:const:`False` 时,会将Mapping | Sequence转换为对应类 :type return_raw_value: bool :return: 路径的值 :rtype: Any :raise ConfigDataTypeError: 配置数据类型错误 :raise RequiredPathNotFoundError: 需求的键不存在 .. versionchanged:: 0.2.0 重命名参数 ``get_raw`` 为 ``return_raw_value`` .. py:method:: reverse() -> None S.reverse() -- reverse *IN PLACE* .. py:method:: setdefault(path: config.abc.PathLike, default: BasicIndexedConfigData.setdefault.V | None = None, *, return_raw_value: bool = False) -> BasicIndexedConfigData.setdefault.V | Any 如果路径不在配置数据中则填充默认值到配置数据并返回 :param path: 路径 :type path: PathLike :param default: 默认值 :type default: V :param return_raw_value: 是否获取原始值 :type return_raw_value: bool :return: 路径的值 :rtype: V | Any :raise ConfigDataReadOnlyError: 配置数据为只读 :raise ConfigDataTypeError: 配置数据类型错误 例子 ---- >>> 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'}) .. versionchanged:: 0.2.0 重命名参数 ``get_raw`` 为 ``return_raw_value`` 重命名 ``set_default`` 为 ``setdefault`` .. py:method:: unset(path: config.abc.PathLike) -> Self 确保路径不存在 (删除路径,但是找不到路径时不会报错) :param path: 路径 :type path: PathLike :return: 返回当前实例便于链式调用 :rtype: Self :raise ConfigDataReadOnlyError: 配置数据为只读 :raise ConfigDataTypeError: 配置数据类型错误 .. versionadded:: 0.1.2 .. py:attribute:: __abc_tpflags__ :value: 32 .. py:attribute:: __class_getitem__ .. py:attribute:: __hash__ :value: None .. py:attribute:: __slots__ :value: () .. py:attribute:: _data :type: SequenceConfigData.D .. py:attribute:: _read_only :type: bool | None :value: False .. py:attribute:: data :type: SequenceConfigData.D 配置的原始数据*快照* .. py:property:: data_read_only :type: bool 配置数据是否为只读 :return: 配置数据是否为只读 :rtype: bool | None .. versionadded:: 0.1.3 .. versionchanged:: 0.1.5 改为抽象属性 .. py:property:: read_only :type: bool | None 配置数据是否为 ``只读模式`` :return: 配置数据是否为 ``只读模式`` :rtype: bool | None .. py:class:: StringConfigData(data: D | None = None) Bases: :py:obj:`config.basic.core.BasicSingleConfigData`\ [\ :py:obj:`StringConfigData.D`\ ] 字符/字节串配置数据 :param data: 配置数据 :type data: D | None .. py:method:: __add__(other: Any) -> Self .. py:method:: __bool__() -> bool .. py:method:: __contains__(key: Any) -> bool .. py:method:: __deepcopy__(memo: dict[str, Any]) -> Self .. py:method:: __delitem__(key: Any) -> None .. py:method:: __eq__(other: Any) -> bool .. py:method:: __format__(format_spec: str) -> str .. py:method:: __getitem__(item: Any) -> D .. py:method:: __iter__() -> collections.abc.Iterator[D] .. py:method:: __len__() -> int .. py:method:: __mul__(other: Any) -> Self .. py:method:: __repr__() -> str .. py:method:: __reversed__() -> Any .. py:method:: __setitem__(key: Any, value: D) -> None .. py:method:: __str__() -> str .. py:method:: freeze(freeze: bool | None = None) -> Self 冻结配置数据 (切换只读模式) :param freeze: 是否冻结配置数据, 为 :py:const:`None` 时进行切换 :type freeze: bool | None :return: 返回当前实例便于链式调用 :rtype: Self .. versionadded:: 0.1.5 .. py:method:: from_data(*args: Any, **kwargs: Any) -> Self :classmethod: 提供创建同类型配置数据的快捷方式 :return: 新的配置数据 :rtype: Self .. note:: 套壳 ``__init__`` 主要是为了方便内部快速创建与传入的ABCConfigData同类型的对象 例如: .. code-block:: python type(instance)(data) 可以简写为 .. code-block:: python instance.from_data(data) .. versionchanged:: 0.2.0 现在会自适应初始化参数 .. py:attribute:: __hash__ :value: None .. py:attribute:: __slots__ :value: () .. py:attribute:: _data :type: StringConfigData.D .. py:attribute:: _read_only :type: bool | None :value: False .. py:property:: data :type: D 配置的原始数据 .. caution:: 未默认做深拷贝,可能导致非预期的行为 .. versionchanged:: 0.3.0 现在是可写属性 .. py:property:: data_read_only :type: Literal[False] 配置数据是否为只读 :return: 配置数据是否为只读 :rtype: Literal[False] .. note:: 该配置数据类始终认为配置数据非只读,使其能正确作为配置数据容器使用 .. py:property:: read_only :type: bool | None 配置数据是否为 ``只读模式`` :return: 配置数据是否为 ``只读模式`` :rtype: bool | None