aboutsummaryrefslogtreecommitdiffstats
path: root/python/analytics/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/analytics/utils.py')
-rw-r--r--python/analytics/utils.py20
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