Missing positional parameter
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.
Can you update to show the whole traceback?
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'
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?
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.
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.
filename = colander.SchemaNode(colander.String()) - you should use brackets here
was: filename = colander.SchemaNode(colander.String)