4

最近我开始使用hydra来管理我的应用程序中的配置。我使用结构化配置为 .yaml 配置文件创建架构。Hyda 中的结构化配置使用数据类进行类型检查。但是,我还想对我在结构化配置中指定的某些参数使用某种验证器(类似于this)。

你知道是否有可能为此目的使用 Pydantic 吗?当我尝试使用 Pydantic 时,OmegaConf 抱怨它:

omegaconf.errors.ValidationError: Input class 'SomeClass' is not a structured config. did you forget to decorate it as a dataclass?
4

2 回答 2

4

对于那些想知道它是如何工作的人,这里有一个例子:

import hydra
from hydra.core.config_store import ConfigStore
from omegaconf import OmegaConf
from pydantic.dataclasses import dataclass
from pydantic import validator


@dataclass
class MyConfigSchema:
    some_var: float

    @validator("some_var")
    def validate_some_var(cls, some_var: float) -> float:
        if some_var < 0:
            raise ValueError(f"'some_var' can't be less than 0, got: {some_var}")
        return some_var


cs = ConfigStore.instance()
cs.store(name="config_schema", node=MyConfigSchema)


@hydra.main(config_path="/path/to/configs", config_name="config")
def my_app(config: MyConfigSchema) -> None:
    # The 'validator' methods will be called when you run the line below
    OmegaConf.to_object(config)


if __name__ == "__main__":    
    my_app()

并且config.yaml

defaults:
  - config_schema

some_var: -1  # this will raise a ValueError
于 2022-01-15T06:15:09.693 回答
0

请参阅pydantic.dataclasses.dataclass,它是标准库数据类的直接替代品,具有一些额外的类型检查。

于 2022-01-10T05:58:24.830 回答