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