diff options
Diffstat (limited to 'python/Dawn')
| -rw-r--r-- | python/Dawn/dawn.py | 19 | ||||
| -rw-r--r-- | python/Dawn/models.py | 22 | ||||
| -rw-r--r-- | python/Dawn/templates/trade_entry.html | 2 |
3 files changed, 32 insertions, 11 deletions
diff --git a/python/Dawn/dawn.py b/python/Dawn/dawn.py index 1f1e578b..f227593e 100644 --- a/python/Dawn/dawn.py +++ b/python/Dawn/dawn.py @@ -1,5 +1,6 @@ from flask import Flask, request, render_template from models import db, ModelForm, BondDeal, Counterparties +import pdb app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://dawn_user@debian/dawndb' @@ -19,11 +20,19 @@ class BondForm(ModelForm): @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) + bond_form = BondForm() + bond_form.counterparty.choices = list_counterparties() + if bond_form.is_submitted(): + if bond_form.validate(): + bond = BondDeal() + bond_form.populate_obj(bond) + bond.dealid = 'uniqid' + db.session.add(bond) + db.session.commit() + return "Success!" + else: + print(bond_form.errors) + return render_template("trade_entry.html", form=bond_form) if __name__=="__main__": app.run(debug=True) diff --git a/python/Dawn/models.py b/python/Dawn/models.py index ed5752ad..66db7983 100644 --- a/python/Dawn/models.py +++ b/python/Dawn/models.py @@ -1,12 +1,22 @@ from flask.ext.sqlalchemy import SQLAlchemy -from flask.ext.wtf import Form +from flask_wtf import Form +from flask_wtf.file import FileField from sqlalchemy.dialects.postgresql import ENUM, OID -from wtforms import FileField, SelectField +from sqlalchemy.types import TypeDecorator, LargeBinary +from wtforms import SelectField +from wtforms.validators import Length from wtforms_alchemy import model_form_factory import datetime db = SQLAlchemy() +class MyBinary(TypeDecorator): + impl = LargeBinary + + def process_bind_param(self, value, dialect): + return value.stream.getbuffer() + + class Counterparties(db.Model): __tablename__ = 'counterparties' code = db.Column(db.String(12), primary_key=True) @@ -38,11 +48,11 @@ class BondDeal(db.Model): 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)]}) + info={'choices': [(None, None)]}) 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)) + cusip = db.Column(db.String(9), info={'validators': Length(9,9)}) + isin = db.Column(db.String(12), info={'validator': Length(12, 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) @@ -50,7 +60,7 @@ class BondDeal(db.Model): 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}) + ticket = db.Column(MyBinary, info={'form_field_class': FileField}) BaseModelForm = model_form_factory(Form) class ModelForm(BaseModelForm): diff --git a/python/Dawn/templates/trade_entry.html b/python/Dawn/templates/trade_entry.html index cc012130..49fc0f66 100644 --- a/python/Dawn/templates/trade_entry.html +++ b/python/Dawn/templates/trade_entry.html @@ -8,9 +8,11 @@ <form method="POST" class="form-horizontal" action="/" enctype="multipart/form-data"> {% for field in form %} <div class="form-group"> + {% if field.type != 'CSRFTokenField' %} <label class="control-label col-md-2" for="{{ field.id }}"> {{ field.label.text }} </label> + {% endif %} <div class="col-md-3"> {{ field(class_="form-control") }} </div> |
