如何验证带有额外字段的Pydantic对象的最大大小



我有一个Pydantic对象,虽然我想允许模式中没有描述的额外字段,但我想通过验证强制执行整个对象的最大大小。假设我有这样的定义:

from pydantic import Extra, BaseModel
class MyObject(BaseModel):
x:int = 0
class Config:
extra = Extra.allow

我希望MyObject(x=1, extra="value")成功,但MyObject(x=1, extra="a"*1000)抛出ValidationError

对整个对象的验证可以通过@root_validator强制执行。

假设最大对象大小以其JSON序列化的大小来衡量,那么解决方案可能如下所示:

from pydantic import Extra, BaseModel, root_validator
MAX_SIZE = 1000
class MyObject(BaseModel):
x:int = 0
@root_validator(pre=True)
def check_max_size(cls, values):
if len(json.dumps(values)) > MAX_SIZE:
raise ValueError('Object is too large')
return values
class Config:
extra = Extra.allow

MyObject(x=1, extra="a"*1000)触发

pydantic.error_wrappers.ValidationError: 1 validation error for MyObject
__root__
Object is too large (type=value_error)

最新更新