用漏勺抓住空列表

时间:2013-09-05 09:26:00

标签: python colander

我正在使用colander来验证(并反序列化json数据)输入到某些Web服务。

我想在漏勺模式中添加一条规则以捕获一个空列表,但我无法弄清楚如何做到这一点。

现在我有以下示例,演示了对具有两组不同数据的函数f()的调用。由于空colander.Invalid列表

,我希望后者触发events例外
import colander

def f(data):
    class EventList(colander.SequenceSchema):
        list_item = colander.SchemaNode(colander.Int())

    class Schema(colander.MappingSchema):
        txt    = colander.SchemaNode(colander.String())
        user   = colander.SchemaNode(colander.String())
        events = EventList()

    try:
        good_data = Schema().deserialize(data)
        print 'looks good'
    except colander.Invalid as e:
        print "man, your data suck"


good_data = {'txt' : 'BINGO',
             'user' : 'mogul',
             'events' : [11, 22, 33]}
f(good_data)

bad_data = {'txt' : 'BOOM',
            'user' : 'mogul',
            'events' : []}
f(bad_data)

连连呢?

1 个答案:

答案 0 :(得分:9)

您是否尝试过使用colander.Length验证程序?

尝试使用以下命令修改架构:

events = EventList(validator=colander.Length(min=1))

对于bad_data,这应该提出:

Invalid: {'events': u'Shorter than minimum length 1'}