Strange deform/colander behaviour "string indices must be integers"

136 Views Asked by At

So I have the following working code, that I have been using for the past few months

class UserSchema(colander.MappingSchema):
    dob = colander.SchemaNode(
            colander.Date(),
            title='Date of birth:')

 if 'submit' in request.POST:

    controls = request.POST.items()
    try:
        appstruct = myform.validate(controls)
    except ValidationFailure, e:
        return {'form':e.render(), 'values': False}

Now this is a basic date picker, as shown here:

http://deform2demo.repoze.org/dateinput/

But all of a sudden, when using this widget I get the error:

Traceback (most recent call last):
  File "/home/luke/virts/pyramid-1.4.5/lib/python2.7/site-packages/pyramid_debugtoolbar-1.0.9-py2.7.egg/pyramid_debugtoolbar/panels/performance.py", line 55, in resource_timer_handler
    result = handler(request)
  File "/home/luke/virts/pyramid-1.4.5/lib/python2.7/site-packages/pyramid/tweens.py", line 21, in excview_tween
    response = handler(request)
  File "/home/luke/virts/pyramid-1.4.5/lib/python2.7/site-packages/pyramid_tm-0.7-py2.7.egg/pyramid_tm/__init__.py", line 82, in tm_tween
    reraise(*exc_info)
  File "/home/luke/virts/pyramid-1.4.5/lib/python2.7/site-packages/pyramid_tm-0.7-py2.7.egg/pyramid_tm/__init__.py", line 63, in tm_tween
    response = handler(request)
  File "/home/luke/virts/pyramid-1.4.5/lib/python2.7/site-packages/pyramid/router.py", line 161, in handle_request
    response = view_callable(context, request)
  File "/home/luke/virts/pyramid-1.4.5/lib/python2.7/site-packages/pyramid/config/views.py", line 347, in rendered_view
    result = view(context, request)
  File "/home/luke/virts/pyramid-1.4.5/lib/python2.7/site-packages/pyramid/config/views.py", line 493, in _requestonly_view
    response = view(request)
  File "/home/luke/pyramids/getwork2day.co.uk/getwork2day/views/signup.py", line 244, in user_signup
    appstruct = myform.validate(controls)
  File "/home/luke/virts/pyramid-1.4.5/lib/python2.7/site-packages/deform-2.0a2-py2.7.egg/deform/field.py", line 636, in validate
    return self.validate_pstruct(pstruct)
  File "/home/luke/virts/pyramid-1.4.5/lib/python2.7/site-packages/deform-2.0a2-py2.7.egg/deform/field.py", line 661, in validate_pstruct
    cstruct = self.deserialize(pstruct)
  File "/home/luke/virts/pyramid-1.4.5/lib/python2.7/site-packages/deform-2.0a2-py2.7.egg/deform/field.py", line 512, in deserialize
    return self.widget.deserialize(self, pstruct)
  File "/home/luke/virts/pyramid-1.4.5/lib/python2.7/site-packages/deform-2.0a2-py2.7.egg/deform/widget.py", line 1274, in deserialize
    result[name] = subfield.deserialize(subval)
  File "/home/luke/virts/pyramid-1.4.5/lib/python2.7/site-packages/deform-2.0a2-py2.7.egg/deform/field.py", line 512, in deserialize
    return self.widget.deserialize(self, pstruct)
  File "/home/luke/virts/pyramid-1.4.5/lib/python2.7/site-packages/deform-2.0a2-py2.7.egg/deform/widget.py", line 551, in deserialize
    date = pstruct['date'].strip()
TypeError: string indices must be integers
1

There are 1 best solutions below

0
On

At least dump current form controls to logging and post it here. Try to be more verbose & clear with your code examples and do not mix up colander schema code and pyramid view code.

 if 'submit' in request.POST:

    controls = request.POST.items()
    try:
        appstruct = myform.validate(controls)
    except ValidationFailure, e:
        log.debug('form validation fails for %r' % controls)
        return {'form':e.render(), 'values': False}