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() # type: ignore[no-untyped-call] }) db.init_app(app) 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") if sys.argv[0] != "nosetests" and sys.argv[1] != "db": from app.metrics import DefinedProxiesCollector, BlockedProxiesCollector, AutomationCollector REGISTRY.register(DefinedProxiesCollector()) # type: ignore[no-untyped-call] REGISTRY.register(BlockedProxiesCollector()) # type: ignore[no-untyped-call] REGISTRY.register(AutomationCollector()) # type: ignore[no-untyped-call] @app.route('/') def index() -> ResponseReturnValue: return redirect(url_for("portal.portal_home")) if __name__ == '__main__': app.run()