如何让 Pydantic 立即引发异常

How to make Pydantic raise an exception right away

我写了一个 Pydantic 模型来验证 API 有效载荷。

有效负载有 2 个属性 emailId 作为 listrole 作为 str

{
    "emailId": [], 
    "role":"Administrator"
}

我需要对属性电子邮件执行两次验证 -

  1. emailId不能为空。
  2. emailId 不得包含来自 x、y、z 域的电子邮件。

因此,为了实现这一点,我为 emailId 编写了 2 个验证方法,如下所示 -

class PayloadValidator(BaseModel):

    emailId: List[str]
    role: str

    @validator("emailId")
    def is_email_list_empty(cls, email):
        if not email_id:
            raise ValueError("Email list is empty.")
        return email_id

    @validator("emailId")
    def valid_domains(cls, emailId):
        pass

这里的问题是,如果 emailId 列表为空,那么验证器不会立即 raise ValueError。它等待所有验证方法完成执行,这给我带来了一些严重的问题。

有什么办法可以实现吗?

如果您有检查,检查失败会中断进一步的验证,然后将它们放入 pre=True root validator。因为如果 pre=True 根验证器引发错误 字段验证将不会发生

例如:

class PayloadValidator(BaseModel):

    emailId: List[str]
    role: str

    @root_validator(pre=True)
    def root_validate(cls, values):
        if not values['emailId']:
            raise ValueError("Email list is empty.")
        return values

    @validator("emailId")
    def valid_domains(cls, emailId):
        return emailId