"""Dash web application for monitoring qUnits on a shared Redis server."""
import os
from dash import Dash
from flask import Flask
from qrobot_dashboard.layout import layout
from qrobot_dashboard.server import register_callbacks
[docs]
def create_app(config_object_name: str = "qrobot_dashboard.config.Config") -> Flask:
"""Create the Flask server and mount the qUnit dashboard on it.
Parameters
----------
config_object_name : str
Import path of the Flask configuration object.
Returns
-------
flask.Flask
Configured Flask server containing the Dash application.
Notes
-----
Run the app via ``FLASK_APP=qrobot_dashboard.app:create_app flask run``.
"""
server = Flask(__name__, static_folder="static")
server.config.from_object(config_object_name)
# Meta tags for viewport responsiveness
meta_viewport = {
"name": "viewport",
"content": "width=device-width, initial-scale=1, shrink-to-fit=no",
}
my_dash_app = Dash(
__name__,
server=server, # type: ignore[arg-type] # Dash's stub omits Flask apps.
url_base_pathname="/",
assets_folder=server.config["DASH_ASSETS_DIR"],
meta_tags=[meta_viewport],
# external_stylesheets=[],
# external_scripts=[]
)
with server.app_context():
my_dash_app.title = server.config["DASH_TITLE"]
my_dash_app.layout = layout
my_dash_app.css.config.serve_locally = True
my_dash_app.enable_dev_tools(
debug=server.config["DASH_DEBUG"],
dev_tools_hot_reload=server.config["DASH_AUTORELOAD"],
)
my_dash_app = register_callbacks(my_dash_app)
# Report the process that owns this app instance in multi-worker deployments.
print(f"Flask With Dash Apps Built Successfully with PID {str(os.getpid())}.")
return server