[英]How to validate maximum size of a Pydantic object with extra fields
我有一个 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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.