如何使Pydantic立即引发异常



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

有效载荷有两个属性emailId作为list,role作为str

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

我需要对属性email执行两次验证-

  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列表为空,那么验证器不会立即raiseValueError。它等待所有的验证方法完成执行,这给我带来了一些严重的问题。

我有办法让它发生吗?

如果您有检查,其失败将中断进一步的验证,那么将它们放在pre=True根验证器中。因为如果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

最新更新