|
|
@@ -2,8 +2,10 @@ |
|
|
|
# @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 an API |
|
|
|
# @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 |
|
|
@@ -12,6 +14,11 @@ from .schemas import UserSchema, ToolSchema, PracticeSchema, BookSchema |
|
|
|
|
|
|
|
api = Blueprint('api', __name__) |
|
|
|
|
|
|
|
# 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 |
|
|
@@ -23,35 +30,37 @@ def get_users(): |
|
|
|
# return all rows as a JSON array of objects |
|
|
|
return jsonify(result) |
|
|
|
|
|
|
|
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 exporting all tools in database |
|
|
|
@api.route('/api/tools') |
|
|
|
def get_tools(): |
|
|
|
type = 'tool' |
|
|
|
resources = Resource.query.filter_by(type=type) |
|
|
|
resources_schema = ToolSchema(many=True) |
|
|
|
result = resources_schema.dump(resources) |
|
|
|
|
|
|
|
# return all rows as a JSON array of objects |
|
|
|
return jsonify(result) |
|
|
|
output = get_resource_json(type) |
|
|
|
return output |
|
|
|
|
|
|
|
# route for exporting all practices in database |
|
|
|
@api.route('/api/practices') |
|
|
|
def get_practices(): |
|
|
|
type = 'practice' |
|
|
|
resources = Resource.query.filter_by(type=type) |
|
|
|
resources_schema = PracticeSchema(many=True) |
|
|
|
result = resources_schema.dump(resources) |
|
|
|
|
|
|
|
# return all rows as a JSON array of objects |
|
|
|
return jsonify(result) |
|
|
|
output = get_resource_json(type) |
|
|
|
return output |
|
|
|
|
|
|
|
# route for exporting all books in database |
|
|
|
@api.route('/api/books') |
|
|
|
def get_books(): |
|
|
|
type = 'book' |
|
|
|
resources = Resource.query.filter_by(type=type) |
|
|
|
resources_schema = BookSchema(many=True) |
|
|
|
result = resources_schema.dump(resources) |
|
|
|
|
|
|
|
# return all rows as a JSON array of objects |
|
|
|
return jsonify(result) |
|
|
|
output = get_resource_json(type) |
|
|
|
return output |