Files @ 7f4b23cdb141
Branch filter:

Location: C3L/C3L-Membership-Online-Form/c3l_membership/__init__.py

Dennis Fink
Load config.json in current folder if we are in debug mode
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__)

    if app.debug:
        config_file = os.path.abspath("config.json")
    else:
        config_file = 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()