from flask import Flask, redirect, url_for from flask.typing import ResponseReturnValue from werkzeug.middleware.dispatcher import DispatcherMiddleware from prometheus_client import make_wsgi_app, REGISTRY import yaml import sys from app.extensions import db from app.extensions import migrate from app.extensions import bootstrap from app.portal import portal from app.tfstate import tfstate app = Flask(__name__) app.config.from_file("../config.yaml", load=yaml.safe_load) app.wsgi_app = DispatcherMiddleware(app.wsgi_app, { # type: ignore[assignment] '/metrics': make_wsgi_app() }) db.init_app(app) # type: ignore[no-untyped-call] migrate.init_app(app, db, render_as_batch=True) bootstrap.init_app(app) app.register_blueprint(portal, url_prefix="/portal") app.register_blueprint(tfstate, url_prefix="/tfstate") def not_migrating() -> bool: return len(sys.argv) < 2 or sys.argv[1] != "db" if 'nose' not in sys.modules.keys() and not_migrating(): from app.metrics import DefinedProxiesCollector, BlockedProxiesCollector, AutomationCollector REGISTRY.register(DefinedProxiesCollector(app)) REGISTRY.register(BlockedProxiesCollector(app)) REGISTRY.register(AutomationCollector(app)) @app.route('/') def index() -> ResponseReturnValue: return redirect(url_for("portal.portal_home")) if __name__ == '__main__': app.run()