gpt4 book ai didi

python - 模式中的 Formencode 复合验证器

转载 作者:太空宇宙 更新时间:2023-11-04 06:03:16 25 4
gpt4 key购买 nike

我正在尝试做一些我认为应该很简单的事情,但我在让它工作时遇到了问题。这是我现在所拥有的,它按预期工作。

some_schema = Schema(

multiples = ForEach(UnicodeString(), convert_to_list=True),
single = OneOf(['a', 'b'])

)

我想做的是在多值字段转换为 unicode 字符串列表后对其应用 MaxLength 验证器。但是,它似乎不喜欢我对复合(例如,All、Pipe)或自定义验证器的任何尝试。在我看来,这是实现此目的最直接的方法。

some_schema = Schema(

multiples = All(MaxLength(5), ForEach(UnicodeString(), convert_to_list=True)),
single = OneOf(['a', 'b'])

)

根据文档,应该将多值字段转换为 unicode 字符串列表,然后通过 MaxLength 验证器运行,如果超过 5 个元素则失败。失败部分有效:

>>> some_schema.to_python({'single':'a', 'multiples': range(6)})
>>> Invalid: multiples: Enter a value less than 5 characters long

然而,一个看起来应该通过的例子实际上失败了:

>>> some_schema.to_python({'single':'a', 'multiples': range(3)})
>>> Invalid: multiples: Please provide only one value

formencode 文档虽然总体上非常好,但无法阐明该主题。查看源代码,这是来自 Schema 类的单值预期异常。我尝试将 accepts_iterator=True 参数传递给架构,但这也失败了。

如何确保模式中的字段是一个 unicode 字符串列表并且长度小于 N?

最佳答案

回答了我自己的问题 - 您必须向 MaxLength 验证器提供 accepts_iterator 关键字。

some_schema = Schema(

multiples = All(MaxLength(5, accepts_iterator=True), ForEach(UnicodeString(), convert_to_list=True)),
single = OneOf(['a', 'b'])

)

按预期工作。

关于python - 模式中的 Formencode 复合验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23568289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com