aboutsummaryrefslogtreecommitdiffstats
path: root/python/Dawn
diff options
context:
space:
mode:
Diffstat (limited to 'python/Dawn')
-rw-r--r--python/Dawn/dawn.py19
-rw-r--r--python/Dawn/models.py22
-rw-r--r--python/Dawn/templates/trade_entry.html2
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>