aboutsummaryrefslogtreecommitdiffstats
path: root/python/parse_emails.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/parse_emails.py')
-rw-r--r--python/parse_emails.py41
1 files changed, 24 insertions, 17 deletions
diff --git a/python/parse_emails.py b/python/parse_emails.py
index f0ea1885..b7922435 100644
--- a/python/parse_emails.py
+++ b/python/parse_emails.py
@@ -268,8 +268,10 @@ def parse_gs(fh, indextype, series, quotedate, ref):
expiry = pd.to_datetime(expiry, format='%d%b%y')
d.update({'fwdspread': fwdspread, 'fwdprice': fwdprice,
'expiry': expiry})
- fwd_index.append(d)
- option_stack[expiry] = parse_gs_block(fh, indextype)
+ fwd_index.append(d.copy())
+ option_stack[expiry] = parse_gs_block(fh, indextype)
+ else:
+ logging.error("Can't parse expiry line:", line)
fwd_index = pd.DataFrame.from_records(fwd_index,
index='quotedate')
return option_stack, fwd_index
@@ -303,8 +305,8 @@ def parse_email(email):
return (quotedate, indextype, series), \
parse_fun(fh, indextype, series, quotedate)
elif source == "GS":
- return (quotedate, indextype, series), \
- parse_fun(fh, indextype, series, quotedate, ref)
+ return (quotedate, indextype, series), \
+ parse_fun(fh, indextype, series, quotedate, ref)
else:
option_stack = parse_fun(fh, indextype, expiration_dates)
fwd_index = pd.DataFrame({'quotedate': quotedate,
@@ -318,17 +320,26 @@ def parse_email(email):
subject, email.name))
def write_todb(swaption_stack, index_data):
- from sqlalchemy import MetaData, Table
- from db import dbengine, nan_to_null
+ sql_str = "INSERT INTO swaption_ref_quotes({}) VALUES({}) ON CONFLICT DO NOTHING"
+ cols = index_data.columns
+ sql_str = sql_str.format(",".join(cols),
+ ",".join(["%s"]* len(cols)))
+ from db import dbconn, nan_to_null
import psycopg2
- serenitasdb = dbengine('serenitasdb')
+ conn = dbconn('serenitasdb')
psycopg2.extensions.register_adapter(float, nan_to_null)
- meta = MetaData(bind=serenitasdb)
- swaption_quotes = Table('swaption_quotes', meta, autoload=True)
- for r in swaption_stack.to_dict(orient='records'):
- serenitasdb.execute(swaption_quotes.insert(), r)
- #ins = swaption_quotes.insert().values(swaption_stack.to_dict(orient='records')).execute()
- index_data.to_sql('swaption_ref_quotes', serenitasdb, if_exists='append', index=False)
+ with conn.cursor() as c:
+ c.executemany(sql_str, index_data.itertuples(index=False))
+ conn.commit()
+
+ sql_str = "INSERT INTO swaption_quotes({}) VALUES({}) ON CONFLICT DO NOTHING"
+ cols = swaption_stack.columns
+ sql_str = sql_str.format(",".join(cols),
+ ",".join(["%s"]* len(cols)))
+ with conn.cursor() as c:
+ c.executemany(sql_str, swaption_stack.itertuples(index=False))
+ conn.commit()
+ conn.close()
def get_email_list(date):
"""returns a list of email file names for a given date
@@ -385,10 +396,6 @@ if __name__=="__main__":
index_data['index'] = index_data['index'].astype('category')
swaption_stack = pd.concat(swaption_stack, names=['quotedate', 'index', 'series'])
- # import feather
- # feather.write_dataframe(swaption_stack, '../../data/swaptions.fth')
- # feather.write_dataframe(index_data, '../../data/index_data.fth')
-
swaption_stack = swaption_stack.reset_index()
swaption_stack = swaption_stack.drop_duplicates(['quotedate', 'index', 'series', 'expiry', 'strike'])
index_data = index_data.reset_index()