aboutsummaryrefslogtreecommitdiff
path: root/gn2/wqflask/startup.py
diff options
context:
space:
mode:
Diffstat (limited to 'gn2/wqflask/startup.py')
-rw-r--r--gn2/wqflask/startup.py42
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)