diff options
author | Marcello Stanisci <stanisci.m@gmail.com> | 2017-12-05 20:50:11 +0100 |
---|---|---|
committer | Marcello Stanisci <stanisci.m@gmail.com> | 2017-12-05 20:50:11 +0100 |
commit | c7a1a78c049eb224ff303c56784b77c0b8c04b6b (patch) | |
tree | 832468c9cfa0899bfc29abeed84ffe983639460c /talerblog/blog/blog.py | |
parent | f51e10e56ef39ff79878f56bf6d77c633f052afb (diff) | |
download | blog-c7a1a78c049eb224ff303c56784b77c0b8c04b6b.tar.gz blog-c7a1a78c049eb224ff303c56784b77c0b8c04b6b.tar.bz2 blog-c7a1a78c049eb224ff303c56784b77c0b8c04b6b.zip |
mostly linted
Diffstat (limited to 'talerblog/blog/blog.py')
-rw-r--r-- | talerblog/blog/blog.py | 158 |
1 files changed, 80 insertions, 78 deletions
diff --git a/talerblog/blog/blog.py b/talerblog/blog/blog.py index c42e9d4..101a968 100644 --- a/talerblog/blog/blog.py +++ b/talerblog/blog/blog.py @@ -20,37 +20,32 @@ Implement URL handlers and payment logic for the blog merchant. """ -import flask -from urllib.parse import urljoin, urlencode, quote, parse_qsl -import requests +from urllib.parse import urljoin, quote, parse_qsl import logging import os import base64 -import random -import time -import json -import datetime -from pprint import pprint +import requests +import flask from talerblog.talerconfig import TalerConfig -from talerblog.helpers import (make_url, - expect_parameter, join_urlparts, get_query_string, - backend_error) -from talerblog.blog.content import (articles, -get_article_file, get_image_file) +from talerblog.helpers import (make_url, \ + expect_parameter, join_urlparts, \ + get_query_string, backend_error) +from talerblog.blog.content import (ARTICLES, \ + get_article_file, get_image_file) -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) -base_dir = os.path.dirname(os.path.abspath(__file__)) +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) -app = flask.Flask(__name__, template_folder=base_dir) +app = flask.Flask(__name__, template_folder=BASE_DIR) app.debug = True app.secret_key = base64.b64encode(os.urandom(64)).decode('utf-8') -tc = TalerConfig.from_env() +TC = TalerConfig.from_env() -BACKEND_URL = tc["frontends"]["backend"].value_string(required=True) -CURRENCY = tc["taler"]["currency"].value_string(required=True) -INSTANCE = tc["blog"]["instance"].value_string(required=True) +BACKEND_URL = TC["frontends"]["backend"].value_string(required=True) +CURRENCY = TC["taler"]["currency"].value_string(required=True) +INSTANCE = TC["blog"]["instance"].value_string(required=True) ARTICLE_AMOUNT = dict(value=1, fraction=0, currency=CURRENCY) app.config.from_object(__name__) @@ -69,7 +64,7 @@ def utility_processor(): def index(): return flask.render_template("templates/index.html", merchant_currency=CURRENCY, - articles=articles.values()) + articles=ARTICLES.values()) @app.route("/javascript") @@ -85,17 +80,17 @@ def refund(): article_name = flask.request.form.get("article_name") if not article_name: return flask.jsonify(dict(error="No article_name found in form")), 400 - logger.info("Looking for %s to refund" % article_name) + LOGGER.info("Looking for %s to refund" % article_name) order_id = payed_articles.get(article_name) if not order_id: return flask.jsonify(dict(error="Aborting refund: article not payed")), 401 - r = requests.post(urljoin(BACKEND_URL, "refund"), - json=dict(order_id=order_id, - refund=dict(value=1, fraction=0, currency=CURRENCY), - reason="Demo reimbursement", - instance=INSTANCE)) - if 200 != r.status_code: - return backend_error(r) + resp = requests.post(urljoin(BACKEND_URL, "refund"), + json=dict(order_id=order_id, + refund=dict(value=1, fraction=0, currency=CURRENCY), + reason="Demo reimbursement", + instance=INSTANCE)) + if resp.status_code != 200: + return backend_error(resp) payed_articles[article_name] = "__refunded" response = flask.make_response() response.headers["X-Taler-Refund-Url"] = make_url("/refund", ("order_id", order_id)) @@ -104,13 +99,13 @@ def refund(): else: order_id = expect_parameter("order_id", False) if not order_id: - logger.error("Missing parameter 'order_id'") + LOGGER.error("Missing parameter 'order_id'") return flask.jsonify(dict(error="Missing parameter 'order_id'")), 400 - r = requests.get(urljoin(BACKEND_URL, "refund"), params=dict(order_id=order_id, - instance=INSTANCE)) - if 200 != r.status_code: - return backend_error(r) - return flask.jsonify(r.json()), r.status_code + resp = requests.get(urljoin(BACKEND_URL, "refund"), + params=dict(order_id=order_id, instance=INSTANCE)) + if resp.status_code != 200: + return backend_error(resp) + return flask.jsonify(resp.json()), resp.status_code @app.route("/generate-contract", methods=["GET"]) @@ -140,10 +135,11 @@ def generate_contract(): ), extra=dict(article_name=article_name), ) - r = requests.post(urljoin(BACKEND_URL, "proposal"), json=dict(order=order)) - if r.status_code != 200: - return backend_error(r) - proposal_resp = r.json() + resp = requests.post(urljoin(BACKEND_URL, "proposal"), + json=dict(order=order)) + if resp.status_code != 200: + return backend_error(resp) + proposal_resp = resp.json() return flask.jsonify(**proposal_resp) @@ -155,34 +151,35 @@ def cc_payment(name): @app.route("/essay/<name>") @app.route("/essay/<name>/data/<data>") -def article(name, data=None): - logger.info("processing %s" % name) +def article(namex, data=None): + LOGGER.info("processing %s" % namex) payed_articles = flask.session.get("payed_articles", {}) - if payed_articles.get(name, "") == "__refunded": - return flask.render_template("templates/article_refunded.html", article_name=name) + if payed_articles.get(namex, "") == "__refunded": + return flask.render_template("templates/article_refunded.html", article_name=namex) - if name in payed_articles: - article = articles[name] - if article is None: + if namex in payed_articles: + articlex = ARTICLES[namex] + if articlex is None: flask.abort(500) if data is not None: - if data in article.extra_files: + if data in articlex.extra_files: return flask.send_file(get_image_file(data)) - else: - return "permission denied", 400 + return "permission denied", 400 return flask.render_template("templates/article_frame.html", - article_file=get_article_file(article), - article_name=name) + article_file=get_article_file(articlex), + article_name=namex) - contract_url = make_url("/generate-contract", ("article_name",name)) - response = flask.make_response(flask.render_template("templates/fallback.html"), 402) + contract_url = make_url("/generate-contract", + ("article_name", namex)) + response = flask.make_response( + flask.render_template("templates/fallback.html"), 402) response.headers["X-Taler-Contract-Url"] = contract_url response.headers["X-Taler-Contract-Query"] = "fulfillment_url" # Useless (?) header, as X-Taler-Contract-Url takes always (?) precedence # over X-Offer-Url. This one might only be useful if the contract retrieval # goes wrong. - response.headers["X-Taler-Offer-Url"] = make_url("/essay/" + quote(name)) + response.headers["X-Taler-Offer-Url"] = make_url("/essay/" + quote(namex)) return response @@ -190,36 +187,41 @@ def article(name, data=None): def pay(): deposit_permission = flask.request.get_json() if deposit_permission is None: - e = flask.jsonify(error="no json in body"), - return e, 400 - r = requests.post(urljoin(BACKEND_URL, "pay"), json=deposit_permission) - if 200 != r.status_code: - return backend_error(r) - proposal_data = r.json()["contract_terms"] + return flask.jsonify(error="no json in body"), 400 + resp = requests.post(urljoin(BACKEND_URL, "pay"), + json=deposit_permission) + if resp.status_code != 200: + return backend_error(resp) + proposal_data = resp.json()["contract_terms"] article_name = proposal_data["extra"]["article_name"] payed_articles = flask.session["payed_articles"] = flask.session.get("payed_articles", {}) - if len(r.json()["refund_permissions"]) != 0: + + try: + resp.json()["refund_permissions"].pop() # we had some refunds on the article purchase already! - logger.info("Article %s was refunded, before /pay" % article_name) + LOGGER.info("Article %s was refunded, before /pay" % article_name) payed_articles[article_name] = "__refunded" - return flask.jsonify(r.json()), 200 + return flask.jsonify(resp.json()), 200 + except IndexError: + pass + if not deposit_permission["order_id"]: - logger.error("order_id missing from deposit_permission!") + LOGGER.error("order_id missing from deposit_permission!") return flask.jsonify(dict(error="internal error: ask for refund!")), 500 if article_name not in payed_articles: - logger.info("Article %s goes in state" % article_name) + LOGGER.info("Article %s goes in state" % article_name) payed_articles[article_name] = deposit_permission["order_id"] - return flask.jsonify(r.json()), 200 + return flask.jsonify(resp.json()), 200 @app.route("/history") def history(): qs = get_query_string().decode("utf-8") url = urljoin(BACKEND_URL, "history") - r = requests.get(url, params=dict(parse_qsl(qs))) - if 200 != r.status_code: - return backend_error(r) - return flask.jsonify(r.json()), r.status_code + resp = requests.get(url, params=dict(parse_qsl(qs))) + if resp.status_code != 200: + return backend_error(resp) + return flask.jsonify(resp.json()), resp.status_code @app.route("/backoffice") @@ -232,17 +234,17 @@ def track(): def track_transfer(): qs = get_query_string().decode("utf-8") url = urljoin(BACKEND_URL, "track/transfer") - r = requests.get(url, params=dict(parse_qsl(qs))) - if 200 != r.status_code: - return backend_error(r) - return flask.jsonify(r.json()), r.status_code + resp = requests.get(url, params=dict(parse_qsl(qs))) + if resp.status_code != 200: + return backend_error(resp) + return flask.jsonify(resp.json()), resp.status_code @app.route("/track/order") def track_order(): qs = get_query_string().decode("utf-8") url = urljoin(BACKEND_URL, "track/transaction") - r = requests.get(url, params=dict(parse_qsl(qs))) - if 200 != r.status_code: - return backend_error(r) - return flask.jsonify(r.json()), r.status_code + resp = requests.get(url, params=dict(parse_qsl(qs))) + if resp.status_code != 200: + return backend_error(resp) + return flask.jsonify(resp.json()), resp.status_code |