2013-09-05 28 views
6

Bazı web servislerine giriş yapmak (ve json verilerini silmek) için colander kullanıyorum.Kevgir ile boş liste yakalamak

Boş bir listeyi yakalamak için bir kevgir şemasına bir kural eklemek istiyorum, ancak bunu nasıl yapacağımı anlayamıyorum.

Şu anda iki farklı veri kümesiyle f() işlevine bir çağrı göstererek aşağıdaki örnek var. Daha sonra, çünkü boş events listeye

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) 

Öneriler arasında colander.Invalid istisna tetiklemek istersiniz?

cevap

8

colander.Length doğrulama aracını kullanarak denediniz mi?

ile şemada değişiklik deneyin: bad_data için

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

bu artırmalıdır:

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

BANG! Üzerinde nokta. Teşekkürler dostum! Hatta bir yere kadar neredeyse bunu denedim, ama doğru anlayamadım. İhtiyacınız olduğunda bağış bira düğmesi nerede? – mogul

İlgili konular