"""The Quality-Control Web Application entry point""" import os import logging from pathlib import Path from flask import Flask from .entry import entrybp from .upload import upload from .parse import parsebp from .samples import samples from .dbinsert import dbinsertbp from .errors import register_error_handlers def override_settings_with_envvars( app: Flask, ignore: tuple[str, ...]=tuple()) -> None: """Override settings in `app` with those in ENVVARS""" for setting in (key for key in app.config if key not in ignore): app.config[setting] = os.environ.get(setting) or app.config[setting] def create_app(): """The application factory""" app = Flask(__name__) app.config.from_pyfile( Path(__file__).parent.joinpath("default_settings.py")) if "QCAPP_CONF" in os.environ: app.config.from_envvar("QCAPP_CONF") # Override defaults with instance path override_settings_with_envvars(app, ignore=tuple()) if "QCAPP_SECRETS" in os.environ: app.config.from_envvar("QCAPP_SECRETS") # setup blueprints app.register_blueprint(entrybp, url_prefix="/") app.register_blueprint(parsebp, url_prefix="/parse") app.register_blueprint(upload, url_prefix="/upload") app.register_blueprint(dbinsertbp, url_prefix="/dbinsert") app.register_blueprint(samples, url_prefix="/samples") register_error_handlers(app) return app