diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/risk_insight/__init__.py | 100 | ||||
| -rw-r--r-- | python/risk_insight/views.py | 97 |
2 files changed, 99 insertions, 98 deletions
diff --git a/python/risk_insight/__init__.py b/python/risk_insight/__init__.py index 114c1185..4dabc1c9 100644 --- a/python/risk_insight/__init__.py +++ b/python/risk_insight/__init__.py @@ -1,99 +1,3 @@ -from flask import Flask, render_template, jsonify, request, g -import os, csv, yaml -import datetime -import psycopg2 - +from flask import Flask app = Flask(__name__) - -basedir = "/home/share/CorpCDOs" - -def get_attach_from_name(index_type, series): - if index_type.lower() == "ig": - if series == 9: - attach = [0, 3, 7, 10, 15, 30, 100] - else: - attach = [0, 3, 7, 15, 100] - elif index_type.lower() == "hy": - attach = [0, 15, 25, 35, 100] - elif index_type.lower() == "xo": - attach = [0, 10, 20, 35, 100] - elif index_type.lower() == "eu": - if series == 9: - attach = [0, 3, 6, 9, 12, 22, 100] - else: - attach = [0, 3, 6, 12, 100] - return attach - -def get_db(): - db = getattr(g, '_database', None) - if db is None: - db = g._database = psycopg2.connect(database="serenitasdb", - user="serenitas_user", - host="debian") - return db - -@app.teardown_appcontext -def close_connection(exception): - db = getattr(g, '_database', None) - if db is not None: - db.close() - -@app.route("/_data_tranches") -def get_risk_numbers(): - index = request.args.get("i") - series = request.args.get("s", 0, int) - tenor = request.args.get("t") - greek = request.args.get("g") - data = [] - db = get_db() - attach = get_attach_from_name(index, series) - sqlstr = "SELECT to_char(date, 'YYYY/MM/DD'), \"{0}\" from risk_numbers " \ - "WHERE index=%s and series=%s and tenor=%s ORDER BY date".format(greek) - with db.cursor() as c: - c.execute(sqlstr, (index.upper(), series, tenor)) - data = [[val[0]]+val[1] for val in c] - return jsonify(labels=["Date"] + ["{0}-{1} {2}".format(l, u, greek) for l, u in zip(attach[:-1], attach[1:])], - data=data) - -@app.route("/_data_indices") -def get_indices_quotes(): - index = request.args.get("i") - series = request.args.get("s", 0, int) - tenor = request.args.get("t") - what = request.args.get("w") - data = [] - db = get_db() - sqlstr = "SELECT to_char(date, 'YYYY/MM/DD'), {0} " \ - "from index_quotes WHERE index=%s and series=%s " \ - "and tenor=%s ORDER BY date" - query_columns = {'quotes': "closeprice, modelprice", - 'adjquotes': "adjcloseprice, adjmodelprice", - 'basis': "closeprice-modelprice", - 'theta': "theta", - 'duration': "duration"} - labels = {'quotes': ["Date", "Close", "FV"], - 'adjquotes': ["Date", "AdjClose", "AdjFV"], - 'basis': ["Date", "Basis"], - 'theta': ["Date", "Theta"], - 'duration': ["Date", "Duration"]} - sqlstr = sqlstr.format(query_columns[what]) - with db.cursor() as c: - c.execute(sqlstr, (index.upper(), series, tenor)) - data = c.fetchall() - return jsonify(labels = labels[what], - data = data) - -@app.route("/tranches.html") -def tranches(): - with open(os.path.join(basedir, "code", "etc", "runs.yml")) as fh: - runs = yaml.load(fh) - series_list = sorted(list(set([int(name[2:]) for name in runs['name']]))) - return render_template("tranches.html", series=series_list) - -@app.route("/indices.html") -def indices(): - return render_template("indices.html", series=[9, 10, 11, 13] + list(range(16, 25))) - -@app.route("/") -def main(): - return render_template("index.html") +import risk_insight.views diff --git a/python/risk_insight/views.py b/python/risk_insight/views.py new file mode 100644 index 00000000..b0766707 --- /dev/null +++ b/python/risk_insight/views.py @@ -0,0 +1,97 @@ +from risk_insight import app +from flask import render_template, jsonify, request, g +import os, csv, yaml +import datetime +import psycopg2 + +basedir = "/home/share/CorpCDOs" +def get_attach_from_name(index_type, series): + if index_type.lower() == "ig": + if series == 9: + attach = [0, 3, 7, 10, 15, 30, 100] + else: + attach = [0, 3, 7, 15, 100] + elif index_type.lower() == "hy": + attach = [0, 15, 25, 35, 100] + elif index_type.lower() == "xo": + attach = [0, 10, 20, 35, 100] + elif index_type.lower() == "eu": + if series == 9: + attach = [0, 3, 6, 9, 12, 22, 100] + else: + attach = [0, 3, 6, 12, 100] + return attach + +def get_db(): + db = getattr(g, '_database', None) + if db is None: + db = g._database = psycopg2.connect(database="serenitasdb", + user="serenitas_user", + host="debian") + return db + +@app.teardown_appcontext +def close_connection(exception): + db = getattr(g, '_database', None) + if db is not None: + db.close() + +@app.route("/_data_tranches") +def get_risk_numbers(): + index = request.args.get("i") + series = request.args.get("s", 0, int) + tenor = request.args.get("t") + greek = request.args.get("g") + data = [] + db = get_db() + attach = get_attach_from_name(index, series) + sqlstr = "SELECT to_char(date, 'YYYY/MM/DD'), \"{0}\" from risk_numbers " \ + "WHERE index=%s and series=%s and tenor=%s ORDER BY date".format(greek) + with db.cursor() as c: + c.execute(sqlstr, (index.upper(), series, tenor)) + data = [[val[0]]+val[1] for val in c] + return jsonify(labels=["Date"] + ["{0}-{1} {2}".format(l, u, greek) for l, u in zip(attach[:-1], attach[1:])], + data=data) + +@app.route("/_data_indices") +def get_indices_quotes(): + index = request.args.get("i") + series = request.args.get("s", 0, int) + tenor = request.args.get("t") + what = request.args.get("w") + data = [] + db = get_db() + sqlstr = "SELECT to_char(date, 'YYYY/MM/DD'), {0} " \ + "from index_quotes WHERE index=%s and series=%s " \ + "and tenor=%s ORDER BY date" + query_columns = {'quotes': "closeprice, modelprice", + 'adjquotes': "adjcloseprice, adjmodelprice", + 'basis': "closeprice-modelprice", + 'theta': "theta", + 'duration': "duration"} + labels = {'quotes': ["Date", "Close", "FV"], + 'adjquotes': ["Date", "AdjClose", "AdjFV"], + 'basis': ["Date", "Basis"], + 'theta': ["Date", "Theta"], + 'duration': ["Date", "Duration"]} + sqlstr = sqlstr.format(query_columns[what]) + with db.cursor() as c: + c.execute(sqlstr, (index.upper(), series, tenor)) + data = c.fetchall() + return jsonify(labels = labels[what], + data = data) + +@app.route("/tranches.html") +def tranches(): + with open(os.path.join(basedir, "code", "etc", "runs.yml")) as fh: + runs = yaml.load(fh) + series_list = sorted(list(set([int(name[2:]) for name in runs['name']]))) + return render_template("tranches.html", series=series_list) + +@app.route("/indices.html") +def indices(): + return render_template("indices.html", series=[9, 10, 11, 13] + list(range(16, 26))) + +@app.route("/") +def main(): + return render_template("index.html") |
