aboutsummaryrefslogtreecommitdiffstats
path: root/python/Dawn
diff options
context:
space:
mode:
Diffstat (limited to 'python/Dawn')
-rw-r--r--python/Dawn/dawn.py30
-rw-r--r--python/Dawn/models.py85
-rw-r--r--python/Dawn/templates/trade_entry.html (renamed from python/Dawn/trade_entry.html)9
3 files changed, 70 insertions, 54 deletions
diff --git a/python/Dawn/dawn.py b/python/Dawn/dawn.py
index 2f1f3909..1f1e578b 100644
--- a/python/Dawn/dawn.py
+++ b/python/Dawn/dawn.py
@@ -1,15 +1,13 @@
-from models import BondDeal, Counterparties
-from wtforms_alchemy import ModelForm
-from sqlalchemy import create_engine, MetaData
-from sqlalchemy.orm import sessionmaker
-from jinja2 import Environment, FileSystemLoader
+from flask import Flask, request, render_template
+from models import db, ModelForm, BondDeal, Counterparties
-engine = create_engine('postgresql://dawn_user@debian/dawndb')
-Session = sessionmaker(bind=engine)
-session = Session()
+app = Flask(__name__)
+app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://dawn_user@debian/dawndb'
+app.config['SECRET_KEY'] = 'papa'
+db.init_app(app)
def list_counterparties():
- return session.query(Counterparties).order_by('name').\
+ return Counterparties.query.order_by('name').\
with_entities(Counterparties.code, Counterparties.name)
# Base.metadata.create_all(engine)
@@ -19,7 +17,13 @@ class BondForm(ModelForm):
model = BondDeal
include_foreign_keys = True
-form = BondForm()
-form.counterparty.choices = list_counterparties()
-jinja_env = Environment(loader = FileSystemLoader("."))
-print(jinja_env.get_template("trade_entry.html").render(form = form))
+@app.route('/', methods=['GET', 'POST'])
+def trade_entry():
+ form = BondForm()
+ form.counterparty.choices = list_counterparties()
+ if form.validate_on_submit():
+ return "Success!"
+ return render_template("trade_entry.html", form=form)
+
+if __name__=="__main__":
+ app.run(debug=True)
diff --git a/python/Dawn/models.py b/python/Dawn/models.py
index efcd2703..ed5752ad 100644
--- a/python/Dawn/models.py
+++ b/python/Dawn/models.py
@@ -1,52 +1,59 @@
-from sqlalchemy.ext.declarative import declarative_base
-from sqlalchemy import Boolean, Sequence, Column, Integer, String, Date, Float, ForeignKey
+from flask.ext.sqlalchemy import SQLAlchemy
+from flask.ext.wtf import Form
from sqlalchemy.dialects.postgresql import ENUM, OID
from wtforms import FileField, SelectField
+from wtforms_alchemy import model_form_factory
import datetime
-Base = declarative_base()
+db = SQLAlchemy()
-class Counterparties(Base):
+class Counterparties(db.Model):
__tablename__ = 'counterparties'
- code = Column(String(12), primary_key=True)
- name = Column(String)
- city = Column(String)
- state = Column(String(2))
- dtc_number = Column(Integer)
- sales_contact = Column(String)
- sales_email = Column(String)
- sales_phone = Column(String)
- valuation_contact1 = Column(String)
- valuation_email1 = Column(String)
- valuation_contact2 = Column(String)
- valuation_email2 = Column(String)
- valuation_contact3 = Column(String)
- valuation_email3 = Column(String)
- notes = Column(String)
+ code = db.Column(db.String(12), primary_key=True)
+ name = db.Column(db.String)
+ city = db.Column(db.String)
+ state = db.Column(db.String(2))
+ dtc_number = db.Column(db.Integer)
+ sales_contact = db.Column(db.String)
+ sales_email = db.Column(db.String)
+ sales_phone = db.Column(db.String)
+ valuation_contact1 = db.Column(db.String)
+ valuation_email1 = db.Column(db.String)
+ valuation_contact2 = db.Column(db.String)
+ valuation_email2 = db.Column(db.String)
+ valuation_contact3 = db.Column(db.String)
+ valuation_email3 = db.Column(db.String)
+ notes = db.Column(db.String)
BOND_STRAT = ENUM('M_STR_MAV', 'M_STR_SMEZZ', 'CSO_TRANCH',
'M_CLO_BB20', 'M_CLO_AAA', 'M_CLO_BBB', 'M_MTG_IO', 'M_MTG_THRU',
- 'M_MTG_GOOD', 'M_MTG_B4PR', 'M_MTG_RW', name='bond_strat', metadata=Base.metadata)
+ 'M_MTG_GOOD', 'M_MTG_B4PR', 'M_MTG_RW', name='bond_strat')
ASSET_CLASS = ENUM('CSO', 'Subprime', 'CLO', 'Tranches', 'Futures', 'Cash', 'FX', 'Cleared',
- name='asset_class', metadata=Base.metadata)
+ name='asset_class')
-class BondDeal(Base):
+class BondDeal(db.Model):
__tablename__ = 'bonds'
- dealid = Column(String(28), primary_key=True)
- folder = Column(BOND_STRAT, nullable=False)
- custodian = Column(String(12), nullable=False)
- cashaccount = Column(String(10), nullable=False)
- counterparty = Column(String, ForeignKey("counterparties.code"),
+ dealid = db.Column(db.String(28), primary_key=True)
+ folder = db.Column(BOND_STRAT, nullable=False)
+ custodian = db.Column(db.String(12), nullable=False)
+ cashaccount = db.Column(db.String(10), nullable=False)
+ counterparty = db.Column(db.String, db.ForeignKey("counterparties.code"),
info={'choices': [(None, None)]})
- trade_date = Column(Date, nullable = False, default = datetime.date.today)
- settle_date = Column(Date, nullable = False, default = datetime.date.today)
- cusip = Column(String(9))
- isin = Column(String(12))
- description = Column(String(32))
- buysell = Column(Boolean, nullable = False, info={'choices':[(0, 'sell'), (1, 'buy')]})
- faceamount = Column(Float, nullable=False)
- price = Column(Float, nullable=False)
- account = Column(String(10))
- accrued = Column(Float)
- asset_class = Column(ASSET_CLASS)
- ticket = Column(OID, info={'form_field_class': FileField})
+ trade_date = db.Column(db.Date, nullable = False, default = datetime.date.today)
+ settle_date = db.Column(db.Date, nullable = False, default = datetime.date.today)
+ cusip = db.Column(db.String(9))
+ isin = db.Column(db.String(12))
+ description = db.Column(db.String(32))
+ buysell = db.Column(db.Boolean, nullable = False, info={'choices':[(0, 'sell'), (1, 'buy')]})
+ faceamount = db.Column(db.Float, nullable=False)
+ price = db.Column(db.Float, nullable=False)
+ account = db.Column(db.String(10))
+ accrued = db.Column(db.Float)
+ asset_class = db.Column(ASSET_CLASS)
+ ticket = db.Column(OID, info={'form_field_class': FileField})
+
+BaseModelForm = model_form_factory(Form)
+class ModelForm(BaseModelForm):
+ @classmethod
+ def get_session(self):
+ return db.session
diff --git a/python/Dawn/trade_entry.html b/python/Dawn/templates/trade_entry.html
index 1ff23556..cc012130 100644
--- a/python/Dawn/trade_entry.html
+++ b/python/Dawn/templates/trade_entry.html
@@ -5,7 +5,7 @@
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
</head>
<body style="max-width:1024px; margin:0 auto">
- <form method="POST" class="form-horizontal" action="/submit">
+ <form method="POST" class="form-horizontal" action="/" enctype="multipart/form-data">
{% for field in form %}
<div class="form-group">
<label class="control-label col-md-2" for="{{ field.id }}">
@@ -16,6 +16,11 @@
</div>
</div>
{% endfor %}
-</form>
+ <div class="form-group">
+ <div class="col-md-offset-2 col-md-3">
+ <button type="submit" class="btn btn-default">Submit</button>
+ </div>
+ </div>
+ </form>
</body>
</html>