diff options
Diffstat (limited to 'python/Dawn/dawn.py')
| -rw-r--r-- | python/Dawn/dawn.py | 61 |
1 files changed, 56 insertions, 5 deletions
diff --git a/python/Dawn/dawn.py b/python/Dawn/dawn.py index abbb1407..98ff330f 100644 --- a/python/Dawn/dawn.py +++ b/python/Dawn/dawn.py @@ -1,5 +1,8 @@ from flask import Flask, request, render_template from models import db, ModelForm, BondDeal, Counterparties +from sqlalchemy.sql import text +from sqlalchemy import create_engine +import pandas as pd app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://dawn_user@debian/dawndb' @@ -10,13 +13,46 @@ def list_counterparties(): return Counterparties.query.order_by('name').\ with_entities(Counterparties.code, Counterparties.name) -# Base.metadata.create_all(engine) +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 BondForm(ModelForm): class Meta: model = BondDeal include_foreign_keys = True - exclude = ['dealid'] #we generate it with a trigger at the server level + exclude = ['dealid', 'lastupdate'] #we generate it with a trigger at the server level @app.route('/', methods=['GET', 'POST']) def trade_entry(): @@ -37,12 +73,27 @@ def trade_entry(): @app.route('/trade/<int:tradeid>', methods=['GET', 'POST']) def trade_update(tradeid): - bond_form = BondForm(obj = BondDeal().query.get(tradeid)) + trade = BondDeal() + bond_form = BondForm(obj = trade.query.get(tradeid)) bond_form.counterparty.choices = list_counterparties() + if bond_form.is_submitted(): + if bond_form.validate(): + bond_form.populate_obj(trade) + return redirect(url_for('list_trades')) + else: + return "something wrong!" return render_template("trade_entry.html", form=bond_form) +@app.route('/blotter/') +def list_trades(): + trade = BondDeal() + trade_list = trade.query.order_by(trade.trade_date) + return render_template('blotter.html', trades=trade_list.all()) + if __name__=="__main__": - #db.drop_all(app=app) - #db.create_all(app=app) db.init_app(app) + # db.drop_all(app=app) + # db.create_all(app=app) + # add_triggers() + # load_counterparties() app.run(debug=True) |
