aboutsummaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/risk_insight/__init__.py100
-rw-r--r--python/risk_insight/views.py97
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")