import base64 import json import os.path import secrets import subprocess from flask import Flask, g, redirect, request, url_for from flask.cli import AppGroup from flask_babel import Babel from flask_qrcode import QRcode qrcode = QRcode() babel = Babel() babel_cli = AppGroup("babel") def create_app(): app = Flask(__name__) config_file = ( os.path.abspath("config.json") if app.debug else os.path.abspath("/etc/membership.json") ) try: app.config.from_file(config_file, load=json.load) except FileNotFoundError: pass qrcode.init_app(app) babel.init_app(app) _default_secret_key = base64.b64encode(secrets.token_bytes()).decode("utf-8") app.config["SECRET_KEY"] = os.environ.get("SECRET_KEY", _default_secret_key) app.config["LANGUAGES"] = ["en", "de", "fr", "lb"] app.config.setdefault("SUPPORTING_FEE", 40) app.config.setdefault("REGULAR_FEE", 120) app.config.setdefault("DIGICASH_ENABLED", True) app.config.setdefault("CRYPTOCURRENCIES", dict()) @babel.localeselector def get_locale(): if not g.get("lang_code", None): g.lang_code = request.accept_languages.best_match(app.config["LANGUAGES"]) return g.lang_code from .views import root_page app.register_blueprint(root_page) @app.route("/") def home(): g.lang_code = request.accept_languages.best_match(app.config["LANGUAGES"]) return redirect(url_for("root.index")) app.cli.add_command(babel_cli) return app @babel_cli.command("extract") def babel_extract(): subprocess.run( [ "pybabel", "extract", "-F", "babel.cfg", "-k", "lazy_gettext", "-o", "messages.pot", ".", ] ) @babel_cli.command("update") def babel_update(): subprocess.run( ["pybabel", "update", "-i", "messages.pot", "-d", "c3l_membership/translations"] ) @babel_cli.command("compile") def babel_compile(): subprocess.run(["pybabel", "compile", "-d", "c3l_membership/translations"]) app = create_app()