aboutsummaryrefslogtreecommitdiff
path: root/scripts/qcapp_wsgi.py
blob: 349c00658596df1a5eea9b5b19993020ed4eae13 (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
43
44
45
46
47
48
49
50
"""Run the application"""
import os
import sys
from logging import getLogger, StreamHandler

from flask import Flask

from qc_app import create_app
from qc_app.check_connections import check_db, check_redis

def setup_logging(appl: Flask) -> Flask:
    """Setup appropriate logging paradigm depending on environment."""
    # https://datatracker.ietf.org/doc/html/draft-coar-cgi-v11-03#section-4.1.17
    # https://wsgi.readthedocs.io/en/latest/proposals-2.0.html#making-some-keys-required
    # https://peps.python.org/pep-3333/#id4
    software, *_version_and_comments = os.environ.get(
        "SERVER_SOFTWARE", "").split('/')
    if bool(software):
        gunicorn_logger = getLogger("gunicorn.error")
        appl.logger.handlers = gunicorn_logger.handlers
        appl.logger.setLevel(gunicorn_logger.level)#pylint: disable=[no-member]
    else:
        loglevel = appl.config["LOG_LEVEL"].upper()
        # Maybe call `logging.dictConfig(…)` here instead of all this stuff below
        handler_stderr = StreamHandler(stream=sys.stderr)
        appl.logger.addHandler(handler_stderr)
        rootlogger = getLogger()
        rootlogger.addHandler(handler_stderr)
        rootlogger.setLevel(loglevel)
        appl.logger.setLevel(loglevel)

    return appl


def check_and_build_app() -> Flask:
    """Setup the application for running."""
    # Setup the app
    appl = create_app()

    # Check connections
    check_db(appl.config["SQL_URI"])
    check_redis(appl.config["REDIS_URL"])
    return setup_logging(appl)


app = check_and_build_app()

if __name__ == "__main__":
    # Run the app
    app.run()