diff options
Diffstat (limited to 'python/analytics/utils.py')
| -rw-r--r-- | python/analytics/utils.py | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/python/analytics/utils.py b/python/analytics/utils.py index 09145b41..3d5c0da4 100644 --- a/python/analytics/utils.py +++ b/python/analytics/utils.py @@ -1,10 +1,11 @@ import datetime import numpy as np import pandas as pd +from . import dbconn from .exceptions import MissingDataError from scipy.special import h_roots from dateutil.relativedelta import relativedelta, WE -from functools import partial, wraps +from functools import partial, wraps, lru_cache from pyisda.date import pydate_to_TDate from pandas.api.types import CategoricalDtype from pandas.tseries.offsets import CustomBusinessDay @@ -187,3 +188,20 @@ def get_external_nav(engine, trade_id, value_date=None, trade_type="swaption"): return pd.read_sql_query( query, engine, params=(trade_id,), parse_dates=["date"], index_col=["date"] ) + + +@lru_cache(32) +def get_fx(currency: str, value_date: datetime.date): + if currency == "USD": + return 1.0 + conn = dbconn("dawndb") + with conn.cursor() as c: + c.execute("SELECT * FROM fx where date=%s", (value_date,)) + rec = c.fetchone() + r = getattr(rec, currency.lower() + "usd", None) + if r is None: + raise MissingDataError( + f"No {currency.upper()}USD fx rate available for {value_date}" + ) + conn.close() + return r |
