diff options
Diffstat (limited to 'python/Dawn')
| -rw-r--r-- | python/Dawn/dawn.py | 42 | ||||
| -rw-r--r-- | python/Dawn/utils.py | 49 |
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}) |
