# @name: api.py # @creation_date: 2023-01-12 # @license: The MIT License # @author: Simon Bowie # @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