Files @ 6bf058a7b486
Branch filter:

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

Dennis Fink
Merge i18n
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

config_file = os.path.abspath("/etc/membership.json")

qrcode = QRcode()
babel = Babel()
babel_cli = AppGroup("babel")


def create_app():

    app = Flask(__name__)

    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("BITCOIN_ENABLED", True)
    app.config.setdefault("ETHEREUM_ENABLED", True)
    app.config.setdefault("MONERO_ENABLED", True)
    app.config.setdefault("ZCASH_ENABLED", True)

    app.config.setdefault(
        "BITCOIN_CONVERSION_SCRIPT", "/usr/local/share/btc/BTC_Membership.pl"
    )
    app.config.setdefault(
        "ETHEREUM_CONVERSION_SCRIPT", "/usr/local/share/eth/ETH_Membership.pl"
    )
    app.config.setdefault(
        "MONERO_CONVERSION_SCRIPT", "/usr/local/share/xmr/XMR_Membership.pl"
    )
    app.config.setdefault(
        "ZCASH_CONVERSION_SCRIPT", "/usr/local/share/zcash/ZCASH_Membership.pl"
    )

    @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()