Hi all,

I'm using colander to validate json input for my api. To report the
invalid input to user
I try to  unflatten the invalid.asdict()

However if the invalid input located in the place other than the first
place in a
sequence the unflatten fails.

Here is the snipets: (as  https://gist.github.com/2641011 )

import colander

class Phone(colander.MappingSchema):
    location = colander.SchemaNode(colander.String(),
            validator=colander.OneOf(['home', 'work']))
    number = colander.SchemaNode(colander.String())

class Phones(colander.SequenceSchema):
    phone = Phone()

class User(colander.MappingSchema):
    name = colander.SchemaNode(colander.Str())
    phones = Phones()

user = User()

d1 = {'name': 'jim',
      'phones': [{'location': 'office', 'number': '12343'},
                 {'location': 'home', 'number': '33131'}]
}

try:
    user.deserialize(d1)
except colander.Invalid as invalid:
    print user.unflatten(invalid.asdict())

# result:
# {'phones': [{'location': u'"office" is not one of home, work'}]}

# place invalid location as second position
d2 = {'name': 'bob',
      'phones': [{'location': 'home', 'number': '1234'},
                 {'location': 'office', 'number': '33131'}]
}

try:
    user.deserialize(d2)
except colander.Invalid as invalid:
    print user.unflatten(invalid.asdict())

# result:
# ...
# /opt/env/lib/python2.7/site-packages/colander/__init__.py", line
816, in unflatten
#     return [mapstruct[str(index)] for index in xrange(len(mapstruct))]
# KeyError: '0'
#

How to handle this error or is there a better way to show the error in
a api (json) validation?

thanks,

-- 
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en.

Reply via email to