|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- # @name: api.py
- # @creation_date: 2023-01-12
- # @license: The MIT License <https://opensource.org/licenses/MIT>
- # @author: Simon Bowie <ad7588@coventry.ac.uk>
- # @purpose: Exposes database data as exportable JSON for a RESTful API
- # @acknowledgements:
- # https://auth0.com/blog/developing-restful-apis-with-python-and-flask/
- # https://stackoverflow.com/questions/59721478/serializing-sqlalchemy-with-marshmallow
-
- from flask import Blueprint, render_template, request, flash, redirect, url_for, jsonify
- from flask_login import login_required, current_user
- from .models import Resource, User
- from .schemas import UserSchema, ToolSchema, PracticeSchema, BookSchema
-
- api = Blueprint('api', __name__)
-
- # function to get different types from the Resource database table
- def get_resource_json(type):
- resources = Resource.query.filter_by(type=type)
- if (type=='tool'):
- resources_schema = ToolSchema(many=True)
- elif (type=='practice'):
- resources_schema = PracticeSchema(many=True)
- elif (type=='book'):
- resources_schema = BookSchema(many=True)
- result = resources_schema.dump(resources)
- # return all rows as a JSON array of objects
- result = jsonify(result)
-
- return result
-
- # route for api page
- @api.route('/api')
- def api_page():
- return render_template('api.html')
-
- # route for exporting all users in database
- @api.route('/api/users')
- @login_required
- def get_users():
- users = User.query.all()
- users_schema = UserSchema(many=True)
- result = users_schema.dump(users)
-
- # return all rows as a JSON array of objects
- return jsonify(result)
-
- # route for exporting all tools in database
- @api.route('/api/tools')
- def get_tools():
- type = 'tool'
- output = get_resource_json(type)
- return output
-
- # route for exporting all practices in database
- @api.route('/api/practices')
- def get_practices():
- type = 'practice'
- output = get_resource_json(type)
- return output
-
- # route for exporting all books in database
- @api.route('/api/books')
- def get_books():
- type = 'book'
- output = get_resource_json(type)
- return output
|