diff options
Diffstat (limited to 'talerdonations/helpers.py')
-rw-r--r-- | talerdonations/helpers.py | 59 |
1 files changed, 28 insertions, 31 deletions
diff --git a/talerdonations/helpers.py b/talerdonations/helpers.py index 257192d..614e463 100644 --- a/talerdonations/helpers.py +++ b/talerdonations/helpers.py @@ -15,22 +15,18 @@ # @author Florian Dold # @author Marcello Stanisci -from flask import request, jsonify, make_response, current_app, render_template -import flask from urllib.parse import urljoin, urlencode import logging -import requests -import re -import datetime import json +import flask from .talerconfig import TalerConfig -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) -tc = TalerConfig.from_env() -BACKEND_URL = tc["frontends"]["backend"].value_string(required=True) -NDIGITS = tc["frontends"]["NDIGITS"].value_int() -CURRENCY = tc["taler"]["CURRENCY"].value_string() +TC = TalerConfig.from_env() +BACKEND_URL = TC["frontends"]["backend"].value_string(required=True) +NDIGITS = TC["frontends"]["NDIGITS"].value_int() +CURRENCY = TC["taler"]["CURRENCY"].value_string() FRACTION_BASE = 1e8 @@ -40,29 +36,30 @@ if not NDIGITS: class MissingParameterException(Exception): def __init__(self, param): self.param = param + super().__init__() def amount_to_float(amount): return amount['value'] + (float(amount['fraction']) / float(FRACTION_BASE)) -def amount_from_float(x): - value = int(x) - fraction = int((x - value) * FRACTION_BASE) +def amount_from_float(floatx): + value = int(floatx) + fraction = int((floatx - value) * FRACTION_BASE) return dict(currency=CURRENCY, value=value, fraction=fraction) def join_urlparts(*parts): - s = "" - i = 0 - while i < len(parts): - n = parts[i] - i += 1 - if s.endswith("/"): - n = n.lstrip("/") - elif s and not n.startswith("/"): - n = "/" + n - s += n - return s + ret = "" + part = 0 + while part < len(parts): + buf = parts[part] + part += 1 + if ret.endswith("/"): + buf = buf.lstrip("/") + elif ret and not buf.startswith("/"): + buf = "/" + buf + ret += buf + return ret def make_url(page, *query_params): @@ -72,10 +69,10 @@ def make_url(page, *query_params): """ query = urlencode(query_params) if page.startswith("/"): - root = request.url_root + root = flask.request.url_root page = page.lstrip("/") else: - root = request.base_url + root = flask.request.base_url url = urljoin(root, "%s?%s" % (page, query)) # urlencode is overly eager with quoting, the wallet right now # needs some characters unquoted. @@ -83,22 +80,22 @@ def make_url(page, *query_params): def expect_parameter(name, alt=None): - value = request.args.get(name, None) + value = flask.request.args.get(name, None) if value is None and alt is None: - logger.error("Missing parameter '%s' from '%s'." % (name, request.args)) + LOGGER.error("Missing parameter '%s' from '%s'." % (name, flask.request.args)) raise MissingParameterException(name) return value if value else alt def get_query_string(): - return request.query_string + return flask.request.query_string def backend_error(requests_response): - logger.error("Backend error: status code: " + LOGGER.error("Backend error: status code: " + str(requests_response.status_code)) try: return flask.jsonify(requests_response.json()), requests_response.status_code except json.decoder.JSONDecodeError: - logger.error("Backend error (NO JSON returned): status code: " + LOGGER.error("Backend error (NO JSON returned): status code: " + str(requests_response.status_code)) return flask.jsonify(dict(error="Backend died, no JSON got from it")), 502 |