aboutsummaryrefslogtreecommitdiffstats
path: root/python/Dawn
diff options
context:
space:
mode:
Diffstat (limited to 'python/Dawn')
-rw-r--r--python/Dawn/dawn.py42
-rw-r--r--python/Dawn/utils.py49
2 files changed, 53 insertions, 38 deletions
diff --git a/python/Dawn/dawn.py b/python/Dawn/dawn.py
index 7b465e36..c937a88b 100644
--- a/python/Dawn/dawn.py
+++ b/python/Dawn/dawn.py
@@ -1,11 +1,11 @@
from flask import Flask, request, render_template, redirect, url_for, send_from_directory
from models import db, ModelForm, BondDeal, Counterparties
-from sqlalchemy.sql import text
from sqlalchemy import create_engine
from sqlalchemy.exc import IntegrityError
import pandas as pd
import os
import datetime
+from utils import load_counterparties, add_triggers, bump_rev, simple_serialize
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://dawn_user@debian/dawndb'
@@ -16,40 +16,10 @@ def cp_choices():
return Counterparties.query.order_by('name').\
with_entities(Counterparties.code, Counterparties.name)
-def load_counterparties():
- counterparties = pd.read_csv("/home/share/CorpCDOs/data/counterparties.csv")
- counterparties[['city', 'state']] = counterparties.Location.str.split(", ", expand=True)
- counterparties.drop(['Location', 'Valuation Contact4', 'Valuation Contact4 Email'], axis=1, inplace=True)
- counterparties.rename(columns ={'CODE': 'code',
- 'DTC Number': 'dtc_number',
- 'Email1': 'sales_email',
- 'FIRM': 'name',
- 'Phone': 'sales_phone',
- 'Sales Contact': 'sales_contact',
- 'Valuation Contact1': 'valuation_contact1',
- 'Valuation Contact1 Email': 'valuation_email1',
- 'Valuation Contact2': 'valuation_contact2',
- 'Valuation Contact2 Email': 'valuation_email2',
- 'Valuation Contact3': 'valuation_contact3',
- 'Valuation Contact3 Email': 'valuation_email3',
- 'Valuation Note': 'notes'}, inplace=True)
- engine = create_engine('postgresql://dawn_user@debian/dawndb')
- counterparties.to_sql('counterparties', engine, if_exists='append', index=False)
-def add_triggers():
- engine = create_engine('postgresql://dawn_user@debian/dawndb')
- engine.execute(text("""
- CREATE OR REPLACE FUNCTION mydealid()
- RETURNS TRIGGER AS $$
- BEGIN
- UPDATE bonds SET dealid = 'SC_' ||left(asset_class::text,3)||id WHERE bonds.id = NEW.id;
- RETURN NEW;
- END;
- $$ language plpgsql"""))
- engine.execute(text("""CREATE TRIGGER dealid
- AFTER INSERT ON bonds
- FOR EACH ROW
- EXECUTE PROCEDURE mydealid()"""))
+class CounterpartyForm(ModelForm):
+ class Meta:
+ model = Counterparties
class BondForm(ModelForm):
class Meta:
@@ -57,10 +27,6 @@ class BondForm(ModelForm):
include_foreign_keys = True
exclude = ['dealid', 'lastupdate'] #we generate it with a trigger at the server level
-class CounterpartyForm(ModelForm):
- class Meta:
- model = Counterparties
-
@app.route('/trades/<int:tradeid>', methods=['GET', 'POST'])
@app.route('/trades/', defaults={'tradeid': None}, methods=['GET', 'POST'])
def trade_manage(tradeid):
diff --git a/python/Dawn/utils.py b/python/Dawn/utils.py
new file mode 100644
index 00000000..b478f3ad
--- /dev/null
+++ b/python/Dawn/utils.py
@@ -0,0 +1,49 @@
+import pandas as pd
+from sqlalchemy.sql import text
+import os
+import re
+from pickle import dumps
+
+def load_counterparties(engine):
+ counterparties = pd.read_csv("/home/share/CorpCDOs/data/counterparties.csv")
+ counterparties[['city', 'state']] = counterparties.Location.str.split(", ", expand=True)
+ counterparties.drop(['Location', 'Valuation Contact4', 'Valuation Contact4 Email'], axis=1, inplace=True)
+ counterparties.rename(columns ={'CODE': 'code',
+ 'DTC Number': 'dtc_number',
+ 'Email1': 'sales_email',
+ 'FIRM': 'name',
+ 'Phone': 'sales_phone',
+ 'Sales Contact': 'sales_contact',
+ 'Valuation Contact1': 'valuation_contact1',
+ 'Valuation Contact1 Email': 'valuation_email1',
+ 'Valuation Contact2': 'valuation_contact2',
+ 'Valuation Contact2 Email': 'valuation_email2',
+ 'Valuation Contact3': 'valuation_contact3',
+ 'Valuation Contact3 Email': 'valuation_email3',
+ 'Valuation Note': 'notes'}, inplace=True)
+ counterparties.to_sql('counterparties', engine, if_exists='append', index=False)
+
+def add_triggers(engine):
+ engine.execute(text("""
+ CREATE OR REPLACE FUNCTION mydealid()
+ RETURNS TRIGGER AS $$
+ BEGIN
+ UPDATE bonds SET dealid = 'SC_' ||left(asset_class::text,3)||id WHERE bonds.id = NEW.id;
+ RETURN NEW;
+ END;
+ $$ language plpgsql"""))
+ engine.execute(text("""CREATE TRIGGER dealid
+ AFTER INSERT ON bonds
+ FOR EACH ROW
+ EXECUTE PROCEDURE mydealid()"""))
+
+def bump_rev(filename):
+ (begin, end) = os.path.splitext(filename)
+ m = re.search("\srev(\d)$", begin)
+ rev_number = 1
+ if m:
+ rev_number += int(m.groups()[0])
+ return "{0} rev{1}{2}".format(begin, rev_number, end)
+
+def simple_serialize(obj):
+ return dumps({c.name: getattr(obj, c.name) for c in obj.__table__.columns})