from flask import Blueprint, request, jsonify, abort from api.models.product import Material from api.models.contract_customer import ContractCustomer from api.models import market as market_model from api.lib.prices import wallpaper_price, canvas_price from api.validators import validate_territory, validate_number, validate_keys_exists mod = Blueprint('prices', __name__, url_prefix='/prices') @mod.route("/wallpaper", methods=['GET']) def wallpaper(): validate_keys_exists(request.args, 'width', 'height', 'territory') validate_number(request.args.get('width'), request.args.get('height')) validate_territory(request.args.get('territory')) market = market_model.from_territory(request.args.get('territory')) params = { 'width': request.args.get('width', type=int), 'height': request.args.get('height', type=int), 'market': market, } dealerurl = request.args.get('dealerurl') if dealerurl: reseller = ContractCustomer.query.filter_by( dealerstore=True, dealerurl=dealerurl, country=market.territory).first() if reseller: params['reseller'] = reseller materials = Material.query.wallpapers().all() data = [] for material in materials: data.append({ 'material': material.name, 'material_id': material.id, 'price': wallpaper_price(material_price=material.price, **params), }) return jsonify(data=data) @mod.route('/canvas', methods=['GET']) def canvas(): validate_keys_exists(request.args, 'width', 'height', 'territory') validate_number(request.args.get('width'), request.args.get('height')) validate_territory(request.args.get('territory')) market = market_model.from_territory(request.args.get('territory')) params = { 'width': request.args.get('width', type=int), 'height': request.args.get('height', type=int), 'market': market } dealerurl = request.args.get('dealerurl') if dealerurl: reseller = ContractCustomer.query.filter_by( dealerstore=True, dealerurl=dealerurl, country=market.territory).first() if reseller: params['reseller'] = reseller data = [] for framed in [True, False]: data.append({ 'framed': framed, 'price': canvas_price(framed=framed, **params) }) return jsonify(data=data)