From 2b84f3bd5de3a500b63193924bea2f3dfd0c9afd Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Wed, 21 Apr 2021 21:07:18 +0200 Subject: common base template, new logo and lots of cleanup --- talermerchantdemos/donations/donations.py | 97 +++++++++++++------------------ 1 file changed, 42 insertions(+), 55 deletions(-) (limited to 'talermerchantdemos/donations/donations.py') diff --git a/talermerchantdemos/donations/donations.py b/talermerchantdemos/donations/donations.py index ea9612c..19f1372 100644 --- a/talermerchantdemos/donations/donations.py +++ b/talermerchantdemos/donations/donations.py @@ -31,19 +31,23 @@ import traceback import urllib from taler.util.talerconfig import TalerConfig, ConfigurationError from urllib.parse import urljoin -from ..httpcommon import backend_post, backend_get, fallback_404, self_localized +from ..httpcommon import backend_post, backend_get, self_localized import sys if not sys.version_info.major == 3 and sys.version_info.minor >= 6: print("Python 3.6 or higher is required.") - print("You are using Python {}.{}.".format(sys.version_info.major, sys.version_info.minor)) + print( + "You are using Python {}.{}.".format( + sys.version_info.major, sys.version_info.minor + ) + ) sys.exit(1) LOGGER = logging.getLogger(__name__) BASE_DIR = os.path.dirname(os.path.abspath(__file__)) -app = flask.Flask(__name__, template_folder=BASE_DIR) +app = flask.Flask(__name__, template_folder="../templates", static_folder="../static") app.debug = True app.secret_key = base64.b64encode(os.urandom(64)).decode("utf-8") @@ -56,23 +60,27 @@ except ConfigurationError as ce: print(ce) exit(1) +BABEL_TRANSLATION_DIRECTORIES = "../translations" + app.config.from_object(__name__) babel = Babel(app) -LOGGER.info("Using translations from:" + ':'.join(list(babel.translation_directories))) +LOGGER.info("Using translations from:" + ":".join(list(babel.translation_directories))) translations = [str(translation) for translation in babel.list_translations()] -if not 'en' in translations: - translations.append('en') -LOGGER.info("Operating with the following translations available: " + ' '.join(translations)) +if not "en" in translations: + translations.append("en") +LOGGER.info( + "Operating with the following translations available: " + " ".join(translations) +) -app.jinja_env.globals.update(self_localized=self_localized) +app.add_template_global(self_localized) @babel.localeselector def get_locale(): - parts = request.path.split('/', 2) - if (2 >= len(parts)): + parts = request.path.split("/", 2) + if 2 >= len(parts): # Totally unexpected path format, do not localize return "en" lang = parts[1] @@ -100,10 +108,7 @@ def utility_processor(): # @param abort_status_code status code to return along the response. # @param params _kw_ arguments to passed verbatim to the templating engine. def err_abort(abort_status_code, **params): - t = flask.render_template( - "templates/error.html.j2", - lang=get_locale(), - **params) + t = flask.render_template("donations-error.html.j2", lang=get_locale(), **params) flask.abort(flask.make_response(t, abort_status_code)) @@ -116,7 +121,7 @@ def err_abort(abort_status_code, **params): # if something unexpected happens. def backend_instanced_get(instance, endpoint, params): backend_url = urljoin(BACKEND_BASE_URL, f"instances/{instance}/") - return backend_get(backend_url, endpoint, params) + return backend_get(backend_url, endpoint, params, auth_token=APIKEY) ## @@ -129,7 +134,7 @@ def backend_instanced_get(instance, endpoint, params): # @return the backend response (JSON format). def backend_instanced_post(instance, endpoint, json): backend_url = urljoin(BACKEND_BASE_URL, f"instances/{instance}/") - return backend_post(backend_url, endpoint, json) + return backend_post(backend_url, endpoint, json, auth_token=APIKEY) ## @@ -153,32 +158,34 @@ def expect_parameter(name): @app.errorhandler(Exception) def internal_error(e): return flask.render_template( - "templates/error.html.j2", + "donations-error.html.j2", message=gettext("Internal error"), lang=get_locale(), - stack=traceback.format_exc() + stack=traceback.format_exc(), ) + ## # Serve the /favicon.ico requests. # # @return the favicon.ico file. @app.route("/favicon.ico") def favicon(): - LOGGER.info("will look into: " + os.path.join(app.root_path, 'static')) + LOGGER.info("will look into: " + os.path.join(app.root_path, "static")) return flask.send_from_directory( - os.path.join(app.root_path, 'static'), + os.path.join(app.root_path, "static"), "favicon.ico", - mimetype="image/vnd.microsoft.ico" + mimetype="image/vnd.microsoft.ico", ) + ## # Serve the main index page, redirecting to // # # @return response object of the index page. @app.route("/") def index(): - default = 'en' + default = "en" target = flask.request.accept_languages.best_match(translations, default) return flask.redirect("/" + target + "/", code=302) @@ -190,21 +197,10 @@ def index(): @app.route("//") def start(lang): return flask.render_template( - "templates/index.html.j2", - lang=lang, - merchant_currency=CURRENCY + "donations-index.html.j2", lang=lang, merchant_currency=CURRENCY ) -## -# Serve the "/javascript" page. -# -# @return response object for the /javascript page. -@app.route("/javascript") -def javascript_licensing(): - return flask.render_template("templates/javascript.html") - - ## # Serve the "/checkout" page. This page lets the # user pick the payment method they want to use, @@ -217,7 +213,7 @@ def checkout(lang): donation_receiver = expect_parameter("donation_receiver") donation_donor = expect_parameter("donation_donor") return flask.render_template( - "templates/checkout.html.j2", + "donations-checkout.html.j2", donation_amount=amount, donation_receiver=donation_receiver, donation_donor=donation_donor, @@ -232,11 +228,8 @@ def checkout(lang): # # @return response object about the mentioned impossibility. @app.route("//provider-not-supported") -def provider_not_supported(): - return flask.render_template( - "templates/provider-not-supported.html.j2", - lang=lang - ) +def provider_not_supported(lang): + return flask.render_template("donations-provider-not-supported.html.j2", lang=lang) ## @@ -253,8 +246,7 @@ def donate(lang): donation_donor = expect_parameter("donation_donor") payment_system = expect_parameter("payment_system") if payment_system != "taler": - return flask.redirect(flask.url_for("provider_not_supported", - lang=lang)) + return flask.redirect(flask.url_for("provider_not_supported", lang=lang)) fulfillment_url = flask.url_for( "fulfillment", timestamp=str(time.time()), @@ -266,9 +258,7 @@ def donate(lang): order = dict( amount=donation_amount, extra=dict( - donor=donation_donor, - receiver=donation_receiver, - amount=donation_amount + donor=donation_donor, receiver=donation_receiver, amount=donation_amount ), fulfillment_url=fulfillment_url, summary="Donation to {}".format(donation_receiver), @@ -279,10 +269,9 @@ def donate(lang): ) order_id = order_resp["order_id"] return flask.redirect( - flask.url_for("fulfillment", - receiver=donation_receiver, - lang=lang, - order_id=order_id) + flask.url_for( + "fulfillment", receiver=donation_receiver, lang=lang, order_id=order_id + ) ) @@ -295,9 +284,8 @@ def donate(lang): # page is returned; otherwise, the browser will be redirected # to a page that accepts the payment. @app.route("//donation/") -def fulfillment(lang,receiver): +def fulfillment(lang, receiver): order_id = expect_parameter("order_id") - pay_params = dict(order_id=order_id) pay_status = backend_instanced_get( receiver, f"private/orders/{order_id}", params=dict() ) @@ -305,7 +293,7 @@ def fulfillment(lang,receiver): if order_status == "paid": extra = pay_status["contract_terms"]["extra"] return flask.render_template( - "templates/fulfillment.html.j2", + "donations-fulfillment.html.j2", donation_receiver=extra["receiver"], donation_amount=extra["amount"], donation_donor=extra["donor"], @@ -315,10 +303,9 @@ def fulfillment(lang,receiver): ) return flask.redirect(pay_status["order_status_url"]) + @app.errorhandler(404) def handler(e): return flask.render_template( - "templates/error.html.j2", - lang=get_locale(), - message=gettext("Page not found") + "donations-error.html.j2", lang=get_locale(), message=gettext("Page not found") ) -- cgit v1.2.3