def post_new_curve(): body = request.get_json() yyyymmdd = body.get('date') currency = body.get('ccy') ccy = Currency.query.filter_by(ccy=currency).one_or_none() if ccy is None: abort(404, f"There is no currency {currency}") date_datetime = to_datetime(yyyymmdd) date = Date.query.filter_by(date=date_datetime).one_or_none() if date is None: date = Date(date_datetime) date.insert() yield_dict = get_markit_yiled(yyyymmdd, currency)[1] curve = Curve(date.id, ccy.id) try: curve.insert() except: abort(409, "Curve already exist") tenors = Tenor.query.all() for tenor in tenors: Spread(tenor.id, curve.id, yield_dict[tenor.tenor]).insert() tenor_5y = Tenor.query.filter_by(tenor='5Y').one() try: spread = Spread.query.filter_by(curve_id=curve.id, tenor_id=tenor_5y.id).one() except: abort(422, "Unable to query 5y spread for posted curve.") return jsonify({ 'success': True, 'status_code': 200, 'curve': { 'date_id': curve.date_id, 'ccy_id': curve.ccy_id }, 'spread': spread.spread, }), 200