Files @ 10cfc4437178
Branch filter:

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

Dennis Fink
Unify cryptocurrencies handling

This allows us to add new cryptocurrencies without adding new code
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("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()