2013-09-05 11 views
6

Używam colander do sprawdzania poprawności (i deserializacji danych json) danych wejściowych do niektórych usług internetowych.Catch empty list with colander

Chciałbym dodać regułę do schematu durszlaka, aby złapać pustą listę, ale nie mogę wymyślić, jak to zrobić.

W tej chwili mam następujący przykład, demonstrujący wywołanie funkcji f() z dwóch różnych zestawów danych. Chciałbym później wywołać wyjątek colander.Invalid powodu pustego events listy

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) 

sugestie?

Odpowiedz

8

Czy próbowałeś użyć walidatora colander.Length?

Spróbuj zmodyfikować schemat z:

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

Dla bad_data ten powinien podnieść:

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

BANG! Spot na miejscu. Dzięki! Gdzieś w dole próbowałem prawie tego, ale nie mogłem tego naprawić. Gdzie jest przycisk darować piwo, gdy jest to potrzebne? – mogul