diff options
Diffstat (limited to 'gn2/wqflask/startup.py')
-rw-r--r-- | gn2/wqflask/startup.py | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/gn2/wqflask/startup.py b/gn2/wqflask/startup.py new file mode 100644 index 00000000..069755fe --- /dev/null +++ b/gn2/wqflask/startup.py @@ -0,0 +1,42 @@ +"""Checks to do before the application is started.""" +from typing import Tuple + +from flask import Blueprint, current_app, render_template + +class StartupError(Exception): + """Base class for Application Check Errors.""" + +class MissingConfigurationError(StartupError): + """Raised in case of a missing required setting.""" + + def __init__(self, missing=Tuple[str, ...]): + """Initialise the MissingConfigurationError object.""" + super().__init__("At least one required configuration is missing.") + self.missing = missing + +startup_errors = Blueprint("app_check_errors", __name__) +__MANDATORY_CONFIGURATIONS__ = ( + "REDIS_URL", # URI to Redis server + "SQL_URI", # URI to MariaDB server + "GN_SERVER_URL", # REST API Server + "AUTH_SERVER_URL" # Auth(entic/oris)ation Server +) + +def check_mandatory_configs(app): + """Check that all mandatory configuration settings are defined.""" + missing = tuple( + setting for setting in __MANDATORY_CONFIGURATIONS__ + if (setting not in app.config + or app.config.get(setting) is None + or app.config.get(setting).strip() == "")) + if len(missing) > 0: + print(missing) + raise MissingConfigurationError(missing) + +@startup_errors.route("/") +def error_index(): + """Display errors experienced at application startup""" + return render_template( + "startup_errors.html", + error_type = type(current_app.startup_error).__name__, + error_value = current_app.startup_error) |