def calculate(self): if 'calculator' not in request.form or \ not Calculator.query.filter_by( template=request.form['calculator']): return Response(json.dumps( { 'message': "Dict not okay. You must supply a valid " "calculator in the POST request." } )), 404 template_name = request.form['calculator'] template = os.path.join('formulae', template_name) variables, success = helpers.get_template_variables(template) if not success: return Response(json.dumps( { 'message': "Can't find calculator {:}".format( template_name) } )), 404 # Check that all variables are present in the POST'd form form_schema = Schema( {v: Coerce(float) for v in variables}, required=True, extra=True ) supplied = set([k for k, v in request.form.iteritems() if v]) try: formula_vars = form_schema(request.form) except MultipleInvalid: missing = list(variables - supplied) return Response(json.dumps( { 'missing': missing } )), 400 # Evaluate the formula with the variables! return render_template(template, **formula_vars)
def get_calculator_variables(self, cid): calculator = Calculator.query.get(cid) if not calculator: return Response("Can't find calculator #{:}".format(cid)), 404 template = os.path.join('formulae', calculator.template) variables, success = helpers.get_template_variables(template) if not success: return Response( "Can't find calculator {:}".format(calculator)), 404 # TODO is there a way to get `labels` straight out of the template? labels = ast.literal_eval(render_template(template, get_labels=True)) labels['calculator'] = (calculator.template, ) return 'You need to supply {:} in the post request to {:}'.format( {k: v[0] for k, v in labels.iteritems()}, url_for('Endpoint:calculate', _external=True))
def calculate(self): if 'calculator' not in request.form or \ not Calculator.query.filter_by( template=request.form['calculator']): return Response( json.dumps({ 'message': "Dict not okay. You must supply a valid " "calculator in the POST request." })), 404 template_name = request.form['calculator'] template = os.path.join('formulae', template_name) variables, success = helpers.get_template_variables(template) if not success: return Response( json.dumps({ 'message': "Can't find calculator {:}".format(template_name) })), 404 # Check that all variables are present in the POST'd form form_schema = Schema({v: Coerce(float) for v in variables}, required=True, extra=True) supplied = set([k for k, v in request.form.iteritems() if v]) try: formula_vars = form_schema(request.form) except MultipleInvalid: missing = list(variables - supplied) return Response(json.dumps({'missing': missing})), 400 # Evaluate the formula with the variables! return render_template(template, **formula_vars)
def get_calculator_variables(self, cid): calculator = Calculator.query.get(cid) if not calculator: return Response("Can't find calculator #{:}".format(cid)), 404 template = os.path.join('formulae', calculator.template) variables, success = helpers.get_template_variables(template) if not success: return Response("Can't find calculator {:}".format( calculator)), 404 # TODO is there a way to get `labels` straight out of the template? labels = ast.literal_eval(render_template(template, get_labels=True)) labels['calculator'] = (calculator.template,) return 'You need to supply {:} in the post request to {:}'.format( {k: v[0] for k, v in labels.iteritems()}, url_for('Endpoint:calculate', _external=True) )