summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--talermerchantdemos/httpcommon/__init__.py50
-rw-r--r--talermerchantdemos/landing/landing.py74
2 files changed, 64 insertions, 60 deletions
diff --git a/talermerchantdemos/httpcommon/__init__.py b/talermerchantdemos/httpcommon/__init__.py
index 650228d..443160b 100644
--- a/talermerchantdemos/httpcommon/__init__.py
+++ b/talermerchantdemos/httpcommon/__init__.py
@@ -7,15 +7,6 @@ import time
from flask_babel import gettext
##
-# Return a error response to the client.
-#
-# @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", **params)
- flask.abort(flask.make_response(t, abort_status_code))
-
-##
# POST a request to the backend, and return a error
# response if any error occurs.
#
@@ -28,9 +19,7 @@ def backend_post(backend_url, endpoint, json):
final_url = urljoin(backend_url, endpoint)
print("POSTing to: " + final_url)
try:
- resp = requests.post(
- final_url, json=json, headers=headers
- )
+ resp = requests.post(final_url, json=json, headers=headers)
except requests.ConnectionError:
err_abort(500, message=gettext("Could not establish connection to backend"))
try:
@@ -39,14 +28,14 @@ def backend_post(backend_url, endpoint, json):
err_abort(
500,
message=gettext("Could not parse response from backend"),
- status_code=resp.status_code
+ status_code=resp.status_code,
)
if resp.status_code != 200:
err_abort(
500,
message=gettext("Backend returned error status"),
json=response_json,
- status_code=resp.status_code
+ status_code=resp.status_code,
)
print("Backend responds to {}: {}".format(final_url, str(response_json)))
return response_json
@@ -64,9 +53,7 @@ def backend_get(backend_url, endpoint, params):
final_url = urljoin(backend_url, endpoint)
print("GETting: " + final_url + " with params: " + str(params))
try:
- resp = requests.get(
- final_url, params=params, headers=headers
- )
+ resp = requests.get(final_url, params=params, headers=headers)
except requests.ConnectionError:
err_abort(500, message=gettext("Could not establish connection to backend"))
try:
@@ -78,19 +65,21 @@ def backend_get(backend_url, endpoint, params):
500,
message=gettext("Backend returned error status"),
json=response_json,
- status_code=resp.status_code
+ status_code=resp.status_code,
)
print("Backend responds to {}: {}".format(final_url, str(response_json)))
return response_json
+
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]
return lang
+
##
# Helper function used inside Jinja2 logic to create a links
# to the current page but in a different language. Used to
@@ -102,8 +91,8 @@ def self_localized(lang):
"""
path = request.path
# path must have the form "/$LANG/$STUFF"
- parts = path.split('/', 2)
- if (2 >= len(parts)):
+ parts = path.split("/", 2)
+ if 2 >= len(parts):
# Totally unexpected path format, do not localize
return path
return "/" + lang + "/" + parts[2]
@@ -115,30 +104,27 @@ def self_localized(lang):
# @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("templates/error.html.j2", lang=get_locale(), **params)
flask.abort(flask.make_response(t, abort_status_code))
-
def fallback_404(error):
return "Page not found"
-
class Deadline:
def __init__(self, value):
self.value = value
+
def isExpired(self):
if self.value == "never":
return False
now = int(round(time.time()) * 1000)
now_dt = datetime.fromtimestamp(now / 1000)
deadline_dt = datetime.fromtimestamp(self.value / 1000)
- print("debug: checking refund expiration, now: {}, deadline: {}".format(
- now_dt.strftime("%c"), deadline_dt.strftime("%c")
- ))
+ print(
+ "debug: checking refund expiration, now: {}, deadline: {}".format(
+ now_dt.strftime("%c"), deadline_dt.strftime("%c")
+ )
+ )
return now > self.value
diff --git a/talermerchantdemos/landing/landing.py b/talermerchantdemos/landing/landing.py
index 170a950..071a44e 100644
--- a/talermerchantdemos/landing/landing.py
+++ b/talermerchantdemos/landing/landing.py
@@ -35,13 +35,17 @@ 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.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()
@@ -56,18 +60,21 @@ except ConfigurationError as ce:
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)
+
@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]
@@ -75,6 +82,7 @@ def get_locale():
return lang
return "en"
+
##
# Make the environment available into templates.
#
@@ -108,20 +116,21 @@ def internal_error(e):
"templates/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",
)
@@ -131,10 +140,11 @@ def favicon():
# @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.
#
@@ -142,17 +152,25 @@ def index():
@app.route("/<lang>/", methods=["GET"])
def start(lang):
- if x:= os.environ.get("TALER_ENV_URL_BANK"): bank_register_url = "/".join([x.strip("/"), f"{lang}/register"])
- else: bank_register_url = "#"
+ if x := os.environ.get("TALER_ENV_URL_BANK"):
+ bank_register_url = "/".join([x.strip("/"), f"{lang}/register"])
+ else:
+ bank_register_url = "#"
- if x:= os.environ.get("TALER_ENV_URL_MERCHANT_BLOG"): merchant_blog_url = "/".join([x.strip("/"), lang])
- else: merchant_blog_url = "#"
+ if x := os.environ.get("TALER_ENV_URL_MERCHANT_BLOG"):
+ merchant_blog_url = "/".join([x.strip("/"), lang])
+ else:
+ merchant_blog_url = "#"
- if x:= os.environ.get("TALER_ENV_URL_MERCHANT_DONATIONS"): merchant_donations_url = "/".join([x.strip("/"), lang])
- else: merchant_donations_url = "#"
+ if x := os.environ.get("TALER_ENV_URL_MERCHANT_DONATIONS"):
+ merchant_donations_url = "/".join([x.strip("/"), lang])
+ else:
+ merchant_donations_url = "#"
- if x:= os.environ.get("TALER_ENV_URL_MERCHANT_SURVEY"): merchant_survey_url = "/".join([x.strip("/"), lang])
- else: merchant_survey_url = "#"
+ if x := os.environ.get("TALER_ENV_URL_MERCHANT_SURVEY"):
+ merchant_survey_url = "/".join([x.strip("/"), lang])
+ else:
+ merchant_survey_url = "#"
return flask.render_template(
"templates/index.html.j2",
@@ -161,21 +179,21 @@ def start(lang):
bank_url=bank_register_url,
merchant_blog_url=merchant_blog_url,
merchant_donations_url=merchant_donations_url,
- merchant_survey_url=merchant_survey_url
+ merchant_survey_url=merchant_survey_url,
)
+
@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()
+ "templates/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",
message=gettext("HTTP method not allowed for this page"),
- lang=get_locale()
+ lang=get_locale(),
)