import re import subprocess from datetime import date from flask import Blueprint, current_app, g, render_template, request from flask_babel import gettext from flask_weasyprint import HTML, render_pdf from .forms import MembershipForm root_page = Blueprint("root", __name__, url_prefix="/") xml_template = "{name}{birthday:%d.%m.%Y}
{address}
{username}{email}{status}{voting}
" @root_page.url_defaults def add_lang_code(endpoint, values): values.setdefault("lang_code", g.lang_code) @root_page.url_value_preprocessor def pull_lang_code(endpoint, values): g.lang_code = values.pop("lang_code") @root_page.route("/", methods=("GET", "POST")) def index(): form = MembershipForm() choices = [ ("cash", gettext("by cash")), ("wire transfer", gettext("by wire transfer")), ] for k, v in ( ("DIGICASH_ENABLED", ("digicash", gettext("by DigiCash"))), ("BITCOIN_ENABLED", ("bitcoin", gettext("by bitcoin"))), ("ETHEREUM_ENABLED", ("ethereum", gettext("by ethereum"))), ("MONERO_ENABLED", ("monero", gettext("by monero"))), ("ZCASH_ENABLED", ("zcash", gettext("by zcash"))), ): if current_app.config[k]: choices.append(v) form.payment.choices = choices if form.validate_on_submit(): xml_data = {} if ( form.minor_member.data or form.student.data or form.membership.data == "supporting" ): price = current_app.config["SUPPORTING_FEE"] xml_data["voting"] = 0 elif form.membership.data == "regular": price = current_app.config["REGULAR_FEE"] xml_data["voting"] = 1 if form.starving.data: price = 1 if form.starving.data: xml_data["status"] = "Starving" elif form.minor_member.data or form.student.data: xml_data["status"] = "Student" elif form.membership.data == "supporting": xml_data["status"] = "Supporter" else: xml_data["status"] = "Regular" xml_data["name"] = form.fullname.data xml_data["birthday"] = form.birthday.data xml_data["username"] = form.username.data xml_data["email"] = form.email.data xml_data["address"] = " ".join( ( form.street.data, form.zip.data, form.city.data, form.state.data, form.country.data, ) ) xml_data["address"] = re.sub("\s+", " ", xml_data["address"]) if form.payment.data == "bitcoin": price = subprocess.check_output( [current_app.config["BITCOIN_CONVERSION_SCRIPT"], str(price)] ).decode("utf-8") elif form.payment.data == "ethereum": price = subprocess.check_output( [current_app.config["ETHEREUM_CONVERSION_SCRIPT"], str(price)] ).decode("utf-8") elif form.payment.data == "monero": price = subprocess.check_output( [current_app.config["MONERO_CONVERSION_SCRIPT"], str(price)] ).decode("utf-8") elif form.payment.data == "zcash": price = subprocess.check_output( [current_app.config["ZCASH_CONVERSION_SCRIPT"], str(price)] ).decode("utf-8") elif form.payment.data == "digicash": price = price * 100 now = date.today() year = now.year xml_data["date"] = now xml = xml_template.format(**xml_data) html = render_template( "member.html", form=form, price=price, year=year, xml=xml ) return render_pdf(HTML(string=html)) return render_template("index.html", form=form)