flask-restx
flask-restx copied to clipboard
marshal_with fails for a list with a simple datatype
Code
from flask import Flask
from flask_restx import Api, fields, Resource
app = Flask(__name__)
app.config["RESTX_VALIDATE"] = True
api = Api(app)
ns = api.namespace("foo", description="FooBar")
@ns.route("")
class Main(Resource):
@ns.marshal_with(fields.List(fields.String))
def get(self):
return ["foo", "bar", "baz"], 200
if __name__ == "__main__":
app.run(debug=False)
Repro Steps (if applicable)
See code.
Expected Behavior
marshal_with
is able to marshal a List with a simple data type.
Actual Behavior
Currently it fails see stacktrace because a dict of fields is expected.
Error Messages/Stack Trace
[2021-11-29 14:47:13,178] ERROR in app: Exception on /foo [GET]
Traceback (most recent call last):
File "/home/users/fliiiix/marshal/env/lib/python3.8/site-packages/flask/app.py", line 1516, in full_dispatch_request
rv = self.dispatch_request()
File "/home/users/fliiiix/marshal/env/lib/python3.8/site-packages/flask/app.py", line 1502, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "/home/users/fliiiix/marshal/env/lib/python3.8/site-packages/flask_restx/api.py", line 403, in wrapper
resp = resource(*args, **kwargs)
File "/home/users/fliiiix/marshal/env/lib/python3.8/site-packages/flask/views.py", line 84, in view
return current_app.ensure_sync(self.dispatch_request)(*args, **kwargs)
File "/home/users/fliiiix/marshal/env/lib/python3.8/site-packages/flask_restx/resource.py", line 49, in dispatch_request
resp = meth(*args, **kwargs)
File "/home/users/fliiiix/marshal/env/lib/python3.8/site-packages/flask_restx/marshalling.py", line 256, in wrapper
marshal(
File "/home/users/fliiiix/marshal/env/lib/python3.8/site-packages/flask_restx/marshalling.py", line 58, in marshal
out, has_wildcards = _marshal(data, fields, envelope, skip_none, mask, ordered)
File "/home/users/fliiiix/marshal/env/lib/python3.8/site-packages/flask_restx/marshalling.py", line 163, in _marshal
out = [marshal(d, fields, skip_none=skip_none, ordered=ordered) for d in data]
File "/home/users/fliiiix/marshal/env/lib/python3.8/site-packages/flask_restx/marshalling.py", line 163, in <listcomp>
out = [marshal(d, fields, skip_none=skip_none, ordered=ordered) for d in data]
File "/home/users/fliiiix/marshal/env/lib/python3.8/site-packages/flask_restx/marshalling.py", line 58, in marshal
out, has_wildcards = _marshal(data, fields, envelope, skip_none, mask, ordered)
File "/home/users/fliiiix/marshal/env/lib/python3.8/site-packages/flask_restx/marshalling.py", line 181, in _marshal
for k, v in iteritems(fields)
File "/home/users/fliiiix/marshal/env/lib/python3.8/site-packages/six.py", line 605, in iteritems
return iter(d.items(**kw))
AttributeError: 'List' object has no attribute 'items'
Environment
- Python version 3.8.10
- Flask version Flask==2.0.2
- Flask-RESTX version flask-restx==0.5.1
Additional Context
marshal_with_field
would do the trick of marshaling but then nothing is documented swagger.
(note: i guess it's not documented because its not part of the namespace object?)