colander icon indicating copy to clipboard operation
colander copied to clipboard

Missing positional parameter

Open jenstroeger opened this issue 10 years ago • 6 comments

I keep seeing this exception:

  File "/.../lib/python3.4/site-packages/colander/__init__.py", line 2174, in _unflatten_mapping
    subnode, subpaths, subfstruct)
TypeError: unflatten() missing 1 required positional argument: 'fstruct'

This is with colander 1.0.

jenstroeger avatar Jun 19 '15 23:06 jenstroeger

Can you update to show the whole traceback?

tseaver avatar Jun 20 '15 14:06 tseaver

Sure. There are actually two similar instances of this issue, both originating from the debug toolbar (latest version of Pyramid as of today).

Traceback (most recent call last):
  File "/.../lib/python3.4/site-packages/pyramid_debugtoolbar/toolbar.py", line 177, in toolbar_tween
    response = _handler(request)
  File "/.../lib/python3.4/site-packages/pyramid_debugtoolbar/panels/performance.py", line 57, in resource_timer_handler
    result = handler(request)
  File "/.../lib/python3.4/site-packages/pyramid/tweens.py", line 46, in excview_tween
    response = view_callable(exc, request)
  File "/.../lib/python3.4/site-packages/pyramid/config/views.py", line 385, in viewresult_to_response
    result = view(context, request)
  File "/.../lib/python3.4/site-packages/pyramid/tweens.py", line 21, in excview_tween
    response = handler(request)
  File "/.../lib/python3.4/site-packages/pyramid_tm/__init__.py", line 92, in tm_tween
    reraise(*exc_info)
  File "/.../lib/python3.4/site-packages/pyramid_tm/compat.py", line 13, in reraise
    raise value
  File "/.../lib/python3.4/site-packages/pyramid_tm/__init__.py", line 73, in tm_tween
    response = handler(request)
  File "/.../lib/python3.4/site-packages/pyramid/router.py", line 163, in handle_request
    response = view_callable(context, request)
  File "/.../lib/python3.4/site-packages/pyramid/config/views.py", line 596, in __call__
    return view(context, request)
  File "/.../lib/python3.4/site-packages/pyramid/config/views.py", line 329, in attr_view
    return view(context, request)
  File "/.../lib/python3.4/site-packages/pyramid/config/views.py", line 305, in predicate_wrapper
    return view(context, request)
  File "/.../lib/python3.4/site-packages/pyramid/config/views.py", line 355, in rendered_view
    result = view(context, request)
  File "/.../lib/python3.4/site-packages/pyramid/config/views.py", line 501, in _requestonly_view
    response = view(request)
  File "/.../lib/python3.4/site-packages/cornice/service.py", line 549, in wrapper
    validate_colander_schema(args['schema'], request)
  File "/.../lib/python3.4/site-packages/cornice/schemas.py", line 166, in validate_colander_schema
    _validate_fields('body', body)
  File "/.../lib/python3.4/site-packages/cornice/schemas.py", line 111, in _validate_fields
    data = webob.multidict.MultiDict(schema.unflatten(data))
  File "/.../lib/python3.4/site-packages/cornice/schemas.py", line 86, in unflatten
    return self.colander_schema.unflatten(data)
  File "/.../lib/python3.4/site-packages/colander/__init__.py", line 1885, in unflatten
    return self.typ.unflatten(self, paths, fstruct)
  File "/.../lib/python3.4/site-packages/colander/__init__.py", line 628, in unflatten
    return _unflatten_mapping(node, paths, fstruct)
  File "/.../lib/python3.4/site-packages/colander/__init__.py", line 2174, in _unflatten_mapping
    subnode, subpaths, subfstruct)
TypeError: unflatten() missing 1 required positional argument: 'fstruct'
Traceback (most recent call last):
  File "/.../lib/python3.4/site-packages/pyramid_debugtoolbar/toolbar.py", line 177, in toolbar_tween
    response = _handler(request)
  File "/.../lib/python3.4/site-packages/pyramid_debugtoolbar/panels/performance.py", line 57, in resource_timer_handler
    result = handler(request)
  File "/.../lib/python3.4/site-packages/pyramid/tweens.py", line 46, in excview_tween
    response = view_callable(exc, request)
  File "/.../lib/python3.4/site-packages/pyramid/config/views.py", line 385, in viewresult_to_response
    result = view(context, request)
  File "/.../lib/python3.4/site-packages/pyramid/tweens.py", line 21, in excview_tween
    response = handler(request)
  File "/.../lib/python3.4/site-packages/pyramid_tm/__init__.py", line 92, in tm_tween
    reraise(*exc_info)
  File "/.../lib/python3.4/site-packages/pyramid_tm/compat.py", line 13, in reraise
    raise value
  File "/.../lib/python3.4/site-packages/pyramid_tm/__init__.py", line 73, in tm_tween
    response = handler(request)
  File "/.../lib/python3.4/site-packages/pyramid/router.py", line 163, in handle_request
    response = view_callable(context, request)
  File "/.../lib/python3.4/site-packages/pyramid/config/views.py", line 596, in __call__
    return view(context, request)
  File "/.../lib/python3.4/site-packages/pyramid/config/views.py", line 329, in attr_view
    return view(context, request)
  File "/.../lib/python3.4/site-packages/pyramid/config/views.py", line 305, in predicate_wrapper
    return view(context, request)
  File "/.../lib/python3.4/site-packages/pyramid/config/views.py", line 355, in rendered_view
    result = view(context, request)
  File "/.../lib/python3.4/site-packages/pyramid/config/views.py", line 501, in _requestonly_view
    response = view(request)
  File "/.../lib/python3.4/site-packages/cornice/service.py", line 549, in wrapper
    validate_colander_schema(args['schema'], request)
  File "/.../lib/python3.4/site-packages/cornice/schemas.py", line 166, in validate_colander_schema
    _validate_fields('body', body)
  File "/.../lib/python3.4/site-packages/cornice/schemas.py", line 143, in _validate_fields
    deserialized = attr.deserialize(serialized)
  File "/.../lib/python3.4/site-packages/colander/__init__.py", line 1921, in deserialize
    appstruct = self.typ.deserialize(self, cstruct)
TypeError: deserialize() missing 1 required positional argument: 'cstruct'

jenstroeger avatar Jun 20 '15 15:06 jenstroeger

I cannot see any way to provoke the first traceback with the schema types included in colander. Perhaps there is a type defined in cornice whose unflatten() takes an extra positional parameter?

tseaver avatar Jun 20 '15 16:06 tseaver

I've used my own schema=AddSingleFileSchema with

class AddSingleFileSchema(colander.MappingSchema):                              
    filename = colander.SchemaNode(colander.String)                             
    filetype = colander.SchemaNode(                                             
        colander.String(),                                                      
        validator=colander.OneOf(['doc', 'text']),  
        )                                                                       

And depending on the request I send I can provoke different failures.

jenstroeger avatar Jun 20 '15 16:06 jenstroeger

What do you mean "I can provoke different failures"?

Can you provide a small code snippet showing this failing? For example schema, data = ...; schema.unflatten(data) # -> exception.

mmerickel avatar Jan 16 '16 21:01 mmerickel

filename = colander.SchemaNode(colander.String()) - you should use brackets here was: filename = colander.SchemaNode(colander.String)

doko123 avatar Feb 05 '18 15:02 doko123