flask-restplus-patched
flask-restplus-patched copied to clipboard
Not Implemented Error due to api.expect decorator in POST/PUT methods
I am trying to run flask_restplus with Marshmallow and Sqlalchemy. However, I get this error whenever I use the @api.expect decorator. This is the traceback.
Traceback (most recent call last):
File "/Users/kushal/venv/lib/python3.7/site-packages/flask/app.py", line 2309, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/kushal/venv/lib/python3.7/site-packages/flask/app.py", line 2295, in wsgi_app
response = self.handle_exception(e)
File "/Users/kushal/venv/lib/python3.7/site-packages/flask_restplus/api.py", line 577, in error_router
return original_handler(e)
File "/Users/kushal/venv/lib/python3.7/site-packages/flask/app.py", line 1741, in handle_exception
reraise(exc_type, exc_value, tb)
File "/Users/kushal/venv/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/Users/kushal/venv/lib/python3.7/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/Users/kushal/venv/lib/python3.7/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/kushal/venv/lib/python3.7/site-packages/flask_restplus/api.py", line 577, in error_router
return original_handler(e)
File "/Users/kushal/venv/lib/python3.7/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/kushal/venv/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/Users/kushal/venv/lib/python3.7/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/kushal/venv/lib/python3.7/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/kushal/venv/lib/python3.7/site-packages/flask_restplus/api.py", line 319, in wrapper
resp = resource(*args, **kwargs)
File "/Users/kushal/venv/lib/python3.7/site-packages/flask/views.py", line 88, in view
return self.dispatch_request(*args, **kwargs)
File "/Users/kushal/venv/lib/python3.7/site-packages/flask_restplus/resource.py", line 42, in dispatch_request
self.validate_payload(meth)
File "/Users/kushal/venv/lib/python3.7/site-packages/flask_restplus/resource.py", line 88, in validate_payload
self.__validate_payload(expect, collection=False)
File "/Users/kushal/venv/lib/python3.7/site-packages/flask_restplus/resource.py", line 73, in __validate_payload
expect.validate(data, self.api.refresolver, self.api.format_checker)
File "/Users/kushal/venv/lib/python3.7/site-packages/flask_restplus/model.py", line 98, in validate
validator = Draft4Validator(self.__schema__, resolver=resolver, format_checker=format_checker)
File "/Users/kushal/venv/lib/python3.7/site-packages/werkzeug/utils.py", line 73, in __get__
value = self.func(obj)
File "/Users/kushal/venv/lib/python3.7/site-packages/flask_restplus_patched/model.py", line 47, in __schema__
raise NotImplementedError()
NotImplementedError
Here is the decorator code which causes the issue.
from flask_restplus_patched import Api
class CompanySchema(ModelSchema):
id = ma_fields.Integer(readOnly=True, description='The unique identifier of a Company')
name = ma_fields.String(required=True, description='Company name')
status = ma_fields.String(required=False, description='Company Status')
class Meta:
model = Company
session = db.session
fields = (
Company.id.key,
Company.name.key,
Company.status.key
)
dump_only = (
Company.id.key
)
api = Api(version='1.0', title='HOD_BOOKINGS_API',
description='Documentation for APIs', prefix='/api/v1', doc='/docs')
ns = api.namespace('booking/company', description='Operations related to Companies')
company = api.model('HOD Company', model=CompanySchema())
@ns.route('/')
class CompanyCollection(Resource):
@api.response(code=204, description='Company successfully created.')
@api.expect(company)
def post(self):
"""
Creates a new company.
"""
data = request.json
return create_company(data), 204
Ok I have found a workaround Replace @api.expect with @api.parameters like this.
@api.parameters(CompanySchema(), locations=('json', 'form'))
def post(self, data):
"""
Creates a new company.
"""
# data = request.json
return create_company(data), 204