diff options
author | Florian Dold <florian@dold.me> | 2021-04-21 21:07:18 +0200 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2021-04-21 21:07:18 +0200 |
commit | 2b84f3bd5de3a500b63193924bea2f3dfd0c9afd (patch) | |
tree | 08d5a2bd354ab7849d731eabe7b132429b6d2225 /talermerchantdemos/survey | |
parent | 4356540b2eb12b2c307270566b0b4ce969e12c60 (diff) | |
download | taler-merchant-demos-2b84f3bd5de3a500b63193924bea2f3dfd0c9afd.tar.gz taler-merchant-demos-2b84f3bd5de3a500b63193924bea2f3dfd0c9afd.tar.bz2 taler-merchant-demos-2b84f3bd5de3a500b63193924bea2f3dfd0c9afd.zip |
common base template, new logo and lots of cleanup
Diffstat (limited to 'talermerchantdemos/survey')
l--------- | talermerchantdemos/survey/static | 1 | ||||
-rw-r--r-- | talermerchantdemos/survey/survey.py | 80 | ||||
-rw-r--r-- | talermerchantdemos/survey/templates/base.html.j2 | 48 | ||||
-rw-r--r-- | talermerchantdemos/survey/templates/error.html.j2 | 24 | ||||
l--------- | talermerchantdemos/survey/templates/footer.html.j2 | 1 | ||||
-rw-r--r-- | talermerchantdemos/survey/templates/index.html.j2 | 26 | ||||
l--------- | talermerchantdemos/survey/templates/language-switcher.html.j2 | 1 | ||||
l--------- | talermerchantdemos/survey/templates/menu.html.j2 | 1 | ||||
l--------- | talermerchantdemos/survey/translations | 1 |
9 files changed, 52 insertions, 131 deletions
diff --git a/talermerchantdemos/survey/static b/talermerchantdemos/survey/static deleted file mode 120000 index d9bc54d..0000000 --- a/talermerchantdemos/survey/static +++ /dev/null @@ -1 +0,0 @@ -../static/
\ No newline at end of file diff --git a/talermerchantdemos/survey/survey.py b/talermerchantdemos/survey/survey.py index 871b417..4813477 100644 --- a/talermerchantdemos/survey/survey.py +++ b/talermerchantdemos/survey/survey.py @@ -30,18 +30,21 @@ from flask_babel import force_locale from flask_babel import gettext import traceback from taler.util.talerconfig import TalerConfig, ConfigurationError -from ..httpcommon import backend_get, backend_post, self_localized +from ..httpcommon import backend_get, backend_post, self_localized, BackendException 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) -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') +app.secret_key = base64.b64encode(os.urandom(64)).decode("utf-8") LOGGER = logging.getLogger(__name__) TC = TalerConfig.from_env() @@ -53,22 +56,27 @@ except ConfigurationError as ce: print(ce) exit(1) +BABEL_TRANSLATION_DIRECTORIES = "../translations" + app.config.from_object(__name__) babel = Babel(app) INSTANCED_URL = urljoin(BACKEND_URL, f"instances/survey/") -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.add_template_global(self_localized) -app.jinja_env.globals.update(self_localized=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] @@ -76,6 +84,7 @@ def get_locale(): return lang return "en" + ## # Make the environment available into templates. # @@ -106,23 +115,24 @@ def utility_processor(): @app.errorhandler(Exception) def internal_error(e): return flask.render_template( - "templates/error.html.j2", + "survey-error.html.j2", message=gettext("Internal error"), stack=traceback.format_exc(), - lang=get_locale() + lang=get_locale(), ) + ## # 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", ) @@ -139,21 +149,23 @@ def submit_survey(lang): tip_spec = dict( amount=CURRENCY + ":1.0", next_url=os.environ.get("TALER_ENV_URL_INTRO", "https://taler.net/"), - justification="Payment methods survey" + justification="Payment methods survey", ) - backend_resp = backend_post(INSTANCED_URL, "private/tips", tip_spec) + backend_resp = backend_post(INSTANCED_URL, "private/tips", tip_spec, auth_token=APIKEY) return flask.redirect(backend_resp["tip_status_url"]) + ## # Serve the main index page, redirecting to /<lang>/ # # @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) + ## # Serve the internationalized main index page. # @@ -161,21 +173,33 @@ def index(): @app.route("/<lang>/", methods=["GET"]) def start(lang): return flask.render_template( - "templates/index.html.j2", merchant_currency=CURRENCY, lang=lang + "survey-index.html.j2", merchant_currency=CURRENCY, lang=lang ) + @app.errorhandler(404) -def handler(e): +def handler_404(e): return flask.render_template( - "templates/error.html.j2", - message=gettext("Page not found"), - lang=get_locale() + "survey-error.html.j2", message=gettext("Page not found"), lang=get_locale() ) + @app.errorhandler(405) -def handler(e): +def handler_405(e): return flask.render_template( - "templates/error.html.j2", + "survey-error.html.j2", message=gettext("HTTP method not allowed for this page"), - lang=get_locale() + lang=get_locale(), + ) + + +@app.errorhandler(BackendException) +def handler_backend_exception(e): + t = flask.render_template( + "survey-error.html.j2", + lang=get_locale(), + message=e.args[0], + json=e.backend_json, + status_code=e.backend_status, ) + return flask.make_response(t, 500)
\ No newline at end of file diff --git a/talermerchantdemos/survey/templates/base.html.j2 b/talermerchantdemos/survey/templates/base.html.j2 deleted file mode 100644 index 734da6f..0000000 --- a/talermerchantdemos/survey/templates/base.html.j2 +++ /dev/null @@ -1,48 +0,0 @@ -<!DOCTYPE html> -<!-- - This file is part of GNU TALER. - Copyright (C) 2014, 2015, 2016, 2020 Taler Systems SA - - TALER is free software; you can redistribute it and/or modify it under the - terms of the GNU Lesser General Public License as published by the Free Software - Foundation; either version 2.1, or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License along with - TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> ---> - -<html data-taler-nojs="true"> -<head> - <title>{{ gettext("GNU Taler Demo: Survey") }}</title> - <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='pure.css') }}" /> - <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='demo.css') }}" /> - <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='navbar.css') }}" /> - <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='torsten.css') }}" /> - {% block styles %}{% endblock %} - {% block scripts %}{% endblock %} -</head> - -<body> - <header class="demobar" style="display: flex; flex-direction: column;"> - <h1><span class="tt adorn-brackets">{{ gettext("Taler Demo") }}</span><br/> - <span class="it"><a href="{{ env('TALER_ENV_URL_MERCHANT_SURVEY') }}">{{ gettext("Survey") }}</a></span></h1> - <p>{{ - gettext("This page demonstrates how to tip visitors for completing small tasks.") + "<br>" + - gettext("Tipping is a way for offer cash rewards that go directly into a user's wallet.") - }} - </p> - </header> - {% from 'templates/menu.html.j2' import menu with context %} {{ menu('survey') }} - - <section id="main" class="content"> - {% block main %} - This is the main content of the page. - {% endblock %} - {% include 'templates/footer.html.j2' %} - </section> -</body> -</html> diff --git a/talermerchantdemos/survey/templates/error.html.j2 b/talermerchantdemos/survey/templates/error.html.j2 deleted file mode 100644 index 844da08..0000000 --- a/talermerchantdemos/survey/templates/error.html.j2 +++ /dev/null @@ -1,24 +0,0 @@ -{% extends "templates/base.html.j2" %} -{% block main %} - <h1>{{ gettext("Error encountered") }}</h1> - - <p>{{ message }}</p> - - {% if status_code %} - <p> - {{ gettext ("The backend returned status code {code}.").format(code=status_code) }} - </p> - {% endif %} - - {% if json %} - <p>{{gettext("Backend response:")}}</p> - <pre>{{ json }}</pre> - {% endif %} - - {% if stack %} - <p>{{gettext("Stack trace:")}}</p> - <pre> - {{ stack }} - </pre> - {% endif %} -{% endblock main %} diff --git a/talermerchantdemos/survey/templates/footer.html.j2 b/talermerchantdemos/survey/templates/footer.html.j2 deleted file mode 120000 index 028b093..0000000 --- a/talermerchantdemos/survey/templates/footer.html.j2 +++ /dev/null @@ -1 +0,0 @@ -../../templates/footer.html.j2
\ No newline at end of file diff --git a/talermerchantdemos/survey/templates/index.html.j2 b/talermerchantdemos/survey/templates/index.html.j2 deleted file mode 100644 index 7c449da..0000000 --- a/talermerchantdemos/survey/templates/index.html.j2 +++ /dev/null @@ -1,26 +0,0 @@ -{% extends "templates/base.html.j2" %} -{% block main %} - <div> - <p> - {{ - gettext("Please participate in our survey about payment systems and receive a tip in return.") - }} - </p> - </div> - <div> - <form action="{{ "/" + lang + "/submit-survey" }}" method="post" class="pure-form pure-form-stacked"> - <legend>{{ gettext("Which payment system do you prefer?") }}</legend> - <fieldset> - <label for="option-taler"> - <input id="option-taler" type="radio" name="paypref" value="taler" checked="checked" /> - Taler - </label> - <label for="option-visa"> - <input id="option-visa" type="radio" name="paypref" value="visa" /> - Visa - </label> - </fieldset> - <input type="submit" value="{{ gettext("Submit Survey")}}" class="pure-button pure-button-primary" /> - </form> - </div> -{% endblock %} diff --git a/talermerchantdemos/survey/templates/language-switcher.html.j2 b/talermerchantdemos/survey/templates/language-switcher.html.j2 deleted file mode 120000 index 6423c5c..0000000 --- a/talermerchantdemos/survey/templates/language-switcher.html.j2 +++ /dev/null @@ -1 +0,0 @@ -../../templates/language-switcher.html.j2
\ No newline at end of file diff --git a/talermerchantdemos/survey/templates/menu.html.j2 b/talermerchantdemos/survey/templates/menu.html.j2 deleted file mode 120000 index b9575ea..0000000 --- a/talermerchantdemos/survey/templates/menu.html.j2 +++ /dev/null @@ -1 +0,0 @@ -../../templates/menu.html.j2
\ No newline at end of file diff --git a/talermerchantdemos/survey/translations b/talermerchantdemos/survey/translations deleted file mode 120000 index 0a951f7..0000000 --- a/talermerchantdemos/survey/translations +++ /dev/null @@ -1 +0,0 @@ -../../translations/
\ No newline at end of file |