6

colander一部の Web サービスへの入力を検証 (および JSON データの逆シリアル化) するために使用しています。

空のリストをキャッチするルールを水切りスキーマに追加したいのですが、その方法がわかりません。

現在、次の例があり、f()2 つの異なるデータ セットを使用した関数の呼び出しを示しています。空のリスト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)

提案?

4

1 に答える 1

9

バリデーターを使ってみましたcolander.Lengthか?

次の方法でスキーマを変更してみてください。

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

これはbad_data発生するはずです:

Invalid: {'events': u'Shorter than minimum length 1'}
于 2013-09-13T03:06:06.883 に答える