you may want to have a look at cornice [1]. Among other things it
helps with validating json input via colander and handling resulting
errors.
regards,
robert

[1] http://cornice.readthedocs.org/en/latest/index.html

On Wed, May 9, 2012 at 3:52 AM, anh le <[email protected]> wrote:
> 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.
>

-- 
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