diff options
Diffstat (limited to 'python/Dawn')
| -rw-r--r-- | python/Dawn/dawn.py | 30 | ||||
| -rw-r--r-- | python/Dawn/models.py | 85 | ||||
| -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> |
