summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--talermerchantdemos/httpcommon/__init__.py9
-rw-r--r--talermerchantdemos/survey/survey.py105
2 files changed, 12 insertions, 102 deletions
diff --git a/talermerchantdemos/httpcommon/__init__.py b/talermerchantdemos/httpcommon/__init__.py
index 1aecbcd..392eaa2 100644
--- a/talermerchantdemos/httpcommon/__init__.py
+++ b/talermerchantdemos/httpcommon/__init__.py
@@ -1,6 +1,15 @@
import requests
##
+# 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.
#
diff --git a/talermerchantdemos/survey/survey.py b/talermerchantdemos/survey/survey.py
index 7a71ded..0f24a16 100644
--- a/talermerchantdemos/survey/survey.py
+++ b/talermerchantdemos/survey/survey.py
@@ -41,31 +41,7 @@ CURRENCY = TC["taler"]["currency"].value_string(required=True)
APIKEY = TC["frontends"]["backend_apikey"].value_string(required=True)
app.config.from_object(__name__)
LOGGER = logging.getLogger(__name__)
-
-
-##
-# Helper function that returns a HTTP response with
-# a prettified version of a backend error response.
-#
-# @param requests_response the error response coming from
-# the merchant backend.
-# @return a flask-native response object.
-def backend_error(requests_response):
- 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: " +
- str(requests_response.status_code)
- )
- return flask.jsonify(
- dict(error="Backend died, no JSON got from it")
- ), 502
+INSTANCED_URL = urljoin(BACKEND_URL, "/survey")
##
@@ -90,81 +66,6 @@ def utility_processor():
##
-# 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.
-#
-# @param endpoint the backend endpoint where to POST
-# this request.
-# @param json the POST's body.
-# @return the backend response (JSON format).
-def backend_post(endpoint, json):
- headers = {"Authorization": "ApiKey " + APIKEY}
- try:
- resp = requests.post(
- urljoin(BACKEND_URL, endpoint), json=json, headers=headers
- )
- except requests.ConnectionError:
- err_abort(500, message="Could not establish connection to backend")
- try:
- response_json = resp.json()
- except ValueError:
- err_abort(
- 500,
- message="Could not parse response from backend",
- status_code=resp.status_code
- )
- if resp.status_code != 200:
- err_abort(
- 500,
- message="Backend returned error status",
- json=response_json,
- status_code=resp.status_code
- )
- return response_json
-
-
-##
-# Issue a GET request to the backend.
-#
-# @param endpoint the backend endpoint where to issue the request.
-# @param params (dict type of) URL parameters to append to the request.
-# @return the JSON response from the backend, or a error response
-# if something unexpected happens.
-def backend_get(endpoint, params=None):
- headers = {"Authorization": "ApiKey " + APIKEY}
- if params is None:
- params = dict()
- try:
- resp = requests.get(
- urljoin(BACKEND_URL, endpoint), params=params, headers=headers
- )
- except requests.ConnectionError:
- err_abort(500, message="Could not establish connection to backend")
- try:
- response_json = resp.json()
- except ValueError:
- err_abort(500, message="Could not parse response from backend")
- if resp.status_code != 200:
- err_abort(
- 500,
- message="Backend returned error status",
- json=response_json,
- status_code=resp.status_code
- )
- return response_json
-
-
-##
# Exception handler to capture all the unmanaged errors.
#
# @param e the Exception object, currently unused.
@@ -200,7 +101,7 @@ def favicon():
# in a prettified format.
@app.route("/survey-stats", methods=["GET"])
def survey_stats():
- stats = backend_get("tip-query")
+ stats = backend_get(INSTANCED_URL, "tip-query")
return flask.render_template("templates/survey_stats.html", stats=stats)
@@ -225,7 +126,7 @@ def submit_survey():
next_url=os.environ.get("TALER_ENV_URL_INTRO", "https://taler.net/"),
justification="Payment methods survey"
)
- backend_resp = backend_post("tip-authorize", tip_spec)
+ backend_resp = backend_post(INSTANCED_URL, "tip-authorize", tip_spec)
taler_tip_uri = backend_resp.get("taler_tip_uri")
if taler_tip_uri: