import datetime from flask import Blueprint from flask import current_app from flask import jsonify from flask import request from flask import session from nanoid import generate from capsulflask.auth import account_required from capsulflask.db import get_model bp = Blueprint("publicapi", __name__, url_prefix="/api") @bp.route("/capsul/create", methods=["POST"]) @account_required def capsul_create(): email = session["account"][0] from .console import _create, get_account_balance, get_payments, get_vms vm_sizes = get_model().vm_sizes_dict() operating_systems = get_model().operating_systems_dict() public_keys_for_account = get_model().list_ssh_public_keys_for_account(session["account"]) account_balance = get_account_balance(get_vms(), get_payments(), datetime.datetime.utcnow()) capacity_avaliable = current_app.config["HUB_MODEL"].capacity_avaliable(512*1024*1024) affordable_vm_sizes = dict() for key, vm_size in vm_sizes.items(): # if a user deposits $7.50 and then creates an f1-s vm which costs 7.50 a month, # then they have to delete the vm and re-create it, they will not be able to, they will have to pay again. # so for UX it makes a lot of sense to give a small margin of 25 cents for usability sake if vm_size["dollars_per_month"] <= account_balance+0.25: affordable_vm_sizes[key] = vm_size request.json['ssh_authorized_key_count'] = 1 id, errors = _create( email, vm_sizes, operating_systems, public_keys_for_account, affordable_vm_sizes, request.json) if id is not None: return jsonify( id=id, ) return jsonify(errors=errors)