Files @ 53bbd1295ee2
Branch filter:

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

Dennis Fink
Show an error message to the user, if we fail fetching conversion rates for the cryptocurrencies
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()