2013-09-05 4 views
6

के साथ खाली सूची पकड़ें मैं कुछ वेब सेवाओं को मान्य (और जेसन डेटा deserialize) इनपुट करने के लिए colander का उपयोग कर रहा हूँ।कॉलर

मैं एक खाली सूची पकड़ने के लिए एक कोन्डर स्कीमा में एक नियम जोड़ना चाहता हूं, लेकिन मैं यह नहीं समझ सकता कि इसे कैसे किया जाए।

अभी मेरे पास निम्नलिखित उदाहरण हैं, जो डेटा के दो अलग-अलग सेट के साथ f() पर कॉल का प्रदर्शन करता है। मैं बाद में क्योंकि खाली 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) 

सुझाव के colander.Invalid अपवाद को गति प्रदान चाहते हैं?

उत्तर

8

क्या आपने colander.Length सत्यापनकर्ता का उपयोग करने का प्रयास किया है?

के साथ अपने स्कीमा को संशोधित करने का प्रयास करें:

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

bad_data के लिए यह उठाना चाहिए:

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

बैंग सटीक। धन्यवाद दोस्त! लाइन के नीचे कहीं मैंने कोशिश की, लेकिन यह ठीक नहीं हो सका। जब आपको आवश्यकता हो तो दान बियर बटन कहां है? – mogul

संबंधित मुद्दे