Пример #1
0
    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