config.validators ================= .. py:module:: config.validators .. autoapi-nested-parse:: 配置验证器 Classes ------- .. autoapisummary:: config.validators.ComponentValidatorFactory config.validators.DefaultValidatorFactory config.validators.FieldDefinition config.validators.ValidatorOptions config.validators.ValidatorTypes Functions --------- .. autoapisummary:: config.validators.pydantic_validator Module Contents --------------- .. py:class:: ComponentValidatorFactory(validator: collections.abc.Mapping[str | None, collections.abc.Callable[[config.utils.Ref[ICD]], ICD]], validator_options: ValidatorOptions) 组件验证器工厂 .. versionadded:: 0.2.0 :param validator: 组件验证器 :type validator: Mapping[str | None, Callable[[Ref[ICD]], ICD]] :param validator_options: 验证器选项 :type validator_options: ValidatorOptions 额外验证器选项 ----------------------- .. list-table:: :widths: auto * - 键名 - 描述 - 默认值 - 类型 * - allow_initialize - 是否允许初始化不存在的组件成员(注意! 现在的实现方式会强制初始化成员为 :py:class:`MappingConfigData`) - True - bool * - meta_validator - 组件元数据验证器 - 尝试从传入的组件元数据获得,若不存在(值为None)则放弃验证 - Callable[[ComponentMeta, ValidatorOptions], ComponentMeta] .. versionchanged:: 0.3.0 更改参数 ``validator`` 类型为 ``Mapping[str | None, Callable[[Ref[ICD]], ICD]]`` 并移除因此冗余的移除额外验证器选项 ``validator_factory`` .. py:method:: __call__(config_ref: config.utils.Ref[D | config.basic.object.NoneConfigData]) -> D 验证配置数据 :param config_ref: 配置数据引用 :type config_ref: Ref[D | NoneConfigData] :return: 验证后的配置数据 :rtype: D .. versionchanged:: 0.3.0 拆分验证成员元数据到方法 :py:meth:`_validate_member_metadata` .. py:method:: _validate_member_metadata(component_data: D) -> dict[str, ICD] 验证组件成员元数据 :param component_data: 组件数据 :type component_data: D :return: 验证后的组件数据 :rtype: dict[str | None, ICD] .. py:attribute:: validator_options .. py:attribute:: validators .. py:class:: DefaultValidatorFactory(validator: collections.abc.Iterable[str] | collections.abc.Mapping[str, Any], validator_options: ValidatorOptions) 默认的验证器工厂 :param validator: 用于生成验证器的数据 :type validator: Iterable[str] | Mapping[str, Any] :param validator_options: 验证器选项 :type validator_options: ValidatorOptions 额外验证器选项 ----------------------- .. list-table:: :widths: auto * - 键名 - 描述 - 默认值 - 类型 * - model_config_key - 内部编译 :py:mod:`pydantic` 的 :py:class:`~pydantic.main.BaseModel` 时,模型配置是以嵌套字典的形式存储的,因此请确保此参数不与任何其中子模型名冲突 - ".__model_config__" - Any .. versionchanged:: 0.1.2 支持验证器混搭路径字符串和嵌套字典 .. versionchanged:: 0.1.4 支持验证器非字符串键 (含有非字符串键的子验证器不会被递归处理) .. py:method:: __call__(config_ref: config.utils.Ref[D | config.basic.object.NoneConfigData]) -> D 验证配置数据 :param config_ref: 配置数据引用 :type config_ref: Ref[D | NoneConfigData] :return: 验证后的配置数据 :rtype: D .. py:method:: _compile() -> None 编译模板 .. py:method:: _fmt_mapping_key(validator: collections.abc.Mapping[str, Any]) -> tuple[collections.abc.Mapping[str, Any], set[str | config.abc.ABCPath[Any]]] 格式化验证器键 :param validator: Mapping验证器 :type validator: Mapping[str, Any] :return: 格式化后的映射键和被覆盖的Mapping父路径 :rtype: tuple[Mapping[str, Any], set[str | ABCPath[Any]]] .. versionchanged:: 0.3.0 拆分覆盖检查到函数 :py:func:`_check_overwriting_exists_path` .. py:method:: _mapping2model(mapping: collections.abc.Mapping[str, Any], model_config: dict[str, Any]) -> type[pydantic.BaseModel] 将Mapping转换为Model :param mapping: 需要转换的Mapping :type mapping: Mapping[str, Any] :return: 转换后的Model :rtype: type[BaseModel] .. versionchanged:: 0.3.0 拆分字段定义转换到函数 :py:func:`_convert2definition` .. py:attribute:: model :type: type[pydantic.BaseModel] .. py:attribute:: model_config_key .. py:attribute:: typehint_types .. py:attribute:: validator .. py:attribute:: validator_options .. py:class:: FieldDefinition(annotation: T, default: Any, *, allow_recursive: bool = True) FieldDefinition(annotation: T, *, default_factory: collections.abc.Callable[[], Any], allow_recursive: bool = True) 字段定义,包含类型注解和默认值 .. versionchanged:: 0.1.4 新增 ``allow_recursive`` 字段 .. versionchanged:: 0.3.0 新增对 :py:class:`TypeAliasType` 支持 :param annotation: 用于类型检查的类型 :type annotation: T :param default: 字段默认值 :type default: Any :param default_factory: 字段默认值工厂 :type default_factory: Callable[[], Any] | UnsetType :param allow_recursive: 是否允许递归处理字段值 :type allow_recursive: bool .. versionchanged:: 0.2.0 重命名参数 ``type_`` 为 ``value`` 重命名参数 ``annotation`` 为 ``default`` 添加参数 ``default_factory`` .. py:attribute:: allow_recursive :value: True .. py:attribute:: annotation .. py:attribute:: value .. py:class:: ValidatorOptions 验证器选项 .. versionchanged:: 0.3.0 重命名 ``ValidatorFactoryConfig`` 为 ``ValidatorOptions`` .. py:attribute:: allow_modify :type: bool :value: True 是否允许在填充默认值时同步填充源数据 .. versionchanged:: 0.1.2 重命名 ``allow_create`` 为 ``allow_modify`` .. versionchanged:: 0.2.0 现在默认为 :py:const:`True` .. py:attribute:: extra :type: dict[str, Any] .. py:attribute:: skip_missing :type: bool :value: False 是否忽略不存在的路径 .. versionchanged:: 0.2.0 重命名 ``ignore_missing`` 为 ``skip_missing`` .. py:class:: ValidatorTypes Bases: :py:obj:`enum.Enum` 验证器类型 .. py:attribute:: COMPONENT :value: 'component' .. versionadded:: 0.2.0 .. py:attribute:: CUSTOM :value: 'custom' .. versionchanged:: 0.2.0 重命名 ``IGNORE`` 为 ``NO_VALIDATION`` .. versionchanged:: 0.3.0 重命名 ``NO_VALIDATION`` 为 ``CUSTOM`` .. py:attribute:: DEFAULT :value: None .. py:attribute:: PYDANTIC :value: 'pydantic' .. py:function:: pydantic_validator(validator: type[pydantic.BaseModel], cfg: ValidatorOptions) -> collections.abc.Callable[[config.utils.Ref[pydantic_validator.D | config.basic.object.NoneConfigData]], pydantic_validator.D] 验证器选项 ``skip_missing`` 无效 :param validator: :py:class:`~pydantic.main.BaseModel` 的子类 :type validator: type[BaseModel] :param cfg: 验证器选项 :type cfg: ValidatorOptions :return: 验证器 :rtype: Callable[[Ref[D | NoneConfigData]], D]