aboutsummaryrefslogtreecommitdiff
path: root/uploader/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'uploader/__init__.py')
-rw-r--r--uploader/__init__.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/uploader/__init__.py b/uploader/__init__.py
new file mode 100644
index 0000000..3ee8aa0
--- /dev/null
+++ b/uploader/__init__.py
@@ -0,0 +1,48 @@
+"""The Quality-Control Web Application entry point"""
+import os
+import logging
+from pathlib import Path
+
+from flask import Flask, request
+
+from .entry import entrybp
+from .upload import upload
+from .parse import parsebp
+from .samples import samples
+from .base_routes import base
+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 jinja2 symbols
+ app.jinja_env.globals.update(request_url=lambda : request.url)
+
+ # setup blueprints
+ app.register_blueprint(base, url_prefix="/")
+ 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