繁体   English   中英

如何使用额外字段验证 Pydantic 对象的最大大小

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM