From ef2e7f2c40a13393f13b324cf330c112a812f9e4 Mon Sep 17 00:00:00 2001 From: Anthony Geourjon <anthony.geourjon@tetras-libre.fr> Date: Thu, 19 Jan 2023 11:49:46 +0100 Subject: [PATCH] Add swagger --- .gitignore | 1 + Mirador_backend/- | 0 Mirador_backend/app.py | 19 +++++++++ Mirador_backend/resources/mirador_resource.py | 39 +++++++++++++------ setup.py | 2 +- 5 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 Mirador_backend/- diff --git a/.gitignore b/.gitignore index b8cd07c..6d6f1b0 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ venv **/__pycache__ .env *.sw? +/.idea/ diff --git a/Mirador_backend/- b/Mirador_backend/- new file mode 100644 index 0000000..e69de29 diff --git a/Mirador_backend/app.py b/Mirador_backend/app.py index 63bffad..d548abd 100644 --- a/Mirador_backend/app.py +++ b/Mirador_backend/app.py @@ -1,11 +1,30 @@ from flask import Flask from flask_restful import Api from Mirador_backend.resources.mirador_resource import MiradorResource +from flask_restful_swagger import swagger +from apispec import APISpec +from apispec.ext.marshmallow import MarshmallowPlugin +from flask_apispec.extension import FlaskApiSpec + app = Flask(__name__) api = Api(app) +docs = FlaskApiSpec(app) api.add_resource(MiradorResource, '/mirador_resource', '/mirador_resource/<int:id>') +docs.register(MiradorResource) + + +app.config.update({ + 'APISPEC_SPEC': APISpec( + title='Mirador Backend', + version='v1', + plugins=[MarshmallowPlugin()], + openapi_version='2.0.0' + ), + 'APISPEC_SWAGGER_URL': '/swagger/', # URI to access API Doc JSON + 'APISPEC_SWAGGER_UI_URL': '/swagger-ui/' # URI to access UI of API Doc +}) if __name__ == '__main__': app.run(debug=True) diff --git a/Mirador_backend/resources/mirador_resource.py b/Mirador_backend/resources/mirador_resource.py index 08f1588..49909f4 100644 --- a/Mirador_backend/resources/mirador_resource.py +++ b/Mirador_backend/resources/mirador_resource.py @@ -1,18 +1,35 @@ from flask_restful import Resource +from flask_restful_swagger import swagger +from apispec import APISpec +from marshmallow import Schema, fields +from apispec.ext.marshmallow import MarshmallowPlugin +from flask_apispec.extension import FlaskApiSpec +from flask_apispec.views import MethodResource +from flask_apispec import marshal_with, doc, use_kwargs -class MiradorResource(Resource): - def get(self, id=None): - return {'method': 'get', 'id': id} +class MRResponseSchema(Schema): + message = fields.Str(default='Success') - def post(self): - return {'method': 'post'} - def put(self, id): - return {'method': 'put', 'id': id} +class MRRequestSchema(Schema): + api_type = fields.String(required=True, description="API type of awesome API") - def patch(self, id): - return {'method': 'patch', 'id': id} - def delete(self, id): - return {'method': 'delete', 'id': id} +class MiradorResource(MethodResource,Resource): + @doc(description='My First GET Awesome API.', tags=['Mirador resource']) + @marshal_with(MRResponseSchema) # marshalling + def get(self, id=None): + return {'method': 'get', 'id': id} + + def post(self): + return {'method': 'post'} + + def put(self, id): + return {'method': 'put', 'id': id} + + def patch(self, id): + return {'method': 'patch', 'id': id} + + def delete(self, id): + return {'method': 'delete', 'id': id} diff --git a/setup.py b/setup.py index 912e041..abaf29b 100644 --- a/setup.py +++ b/setup.py @@ -30,7 +30,7 @@ setup( packages=find_packages(), - install_requires=["flask", "flask-restful", "python-dotenv"], + install_requires=["flask", "flask-restful", "python-dotenv", "flask-restful-swagger", "flask-apispec"], setup_requires=[""], -- GitLab