blob: 88e65be7cd0af65c0be49bcaf84a21017a69f4da (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
"""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
|