Source code for Src.app

"""
The app module: Flask API application.

The root Flask server application.
"""

from flask import Flask

[docs]def create_app(config): """ Creates and initializes all integrated components of the Flask application :param config: The Flask applications desired configuration class :type config: AppConfig :return: The configured Flask application :rtype: Flask application """ from SMTP.smtp import mail from Auth.auth import jwt, bcrypt from Database.database import initalize_db, ma from Handler.auth import auth from Handler.create import create from Handler.search import search from Handler.update import update from Handler.delete import delete from Handler.export import export from ScheduledTask.scheduler import scheduler_init_app from Utils.startup_tasks import import_snomed_csv from flask import request import logging # Initialise application app = Flask(__name__) app.config.from_object(config) app.config['DEBUG'] = check_debug_arg() if not (app.config['DEBUG'] or app.config['TESTING']): prod_logging() # Routes app.register_blueprint(auth) app.register_blueprint(create) app.register_blueprint(search) app.register_blueprint(update) app.register_blueprint(delete) app.register_blueprint(export) # initialize app components ma.init_app(app) initalize_db(app) jwt.init_app(app) bcrypt.init_app(app) if app.config['TESTING'] != True: scheduler_init_app(app) mail.init_app(app) import_snomed_csv(app) @app.before_request def log_request(): app.logger.info(f'API call made to: {request.url}') return app
if __name__ == '__main__': from waitress import serve from config import AppConfig from Utils.app_args import check_debug_arg, check_admin_arg from Utils.bootstrap_admin import bootstrap_admin from Utils.app_logging import prod_logging app = create_app(AppConfig) bootstrap_admin(app, check_admin_arg()) if app.config['DEBUG']: app.run(port = 8080, debug = True, use_reloader=False) else: app.logger.info('Starting server') serve(app, host='127.0.0.1', port = 8080, threads = 1)