aboutsummaryrefslogtreecommitdiffstats
path: root/python/yieldcurve.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/yieldcurve.py')
-rw-r--r--python/yieldcurve.py22
1 files changed, 19 insertions, 3 deletions
diff --git a/python/yieldcurve.py b/python/yieldcurve.py
index 934d5bc4..d1abc601 100644
--- a/python/yieldcurve.py
+++ b/python/yieldcurve.py
@@ -22,7 +22,7 @@ from pyisda.curve import YieldCurve, BadDay
import warnings
from db import dbengine, dbconn
-def get_curves(currency="USD", date=None):
+def load_curves(currency="USD", date=None):
"""load the prebuilt curve from the database"""
if date:
sql_str = "SELECT curve FROM {}_curves WHERE effective_date=%s".format(currency)
@@ -40,8 +40,24 @@ def get_curves(currency="USD", date=None):
return {d: YieldCurve.from_bytes(lz4.block.decompress(curve))
for d, curve in c}
-_USD_curves = get_curves("USD")
-_EUR_curves = get_curves("EUR")
+_USD_curves = load_curves("USD")
+_EUR_curves = load_curves("EUR")
+
+def get_curve(effective_date, currency="USD"):
+ curves = globals()[f'_{currency}_curves']
+ if isinstance(effective_date, datetime.datetime):
+ effective_date = effective_date.date()
+ if effective_date in curves:
+ return curves[effective_date]
+ else:
+ warnings.warn("cache miss for date: {}".format(effective_date),
+ RuntimeWarning)
+ settings = Settings()
+ settings.evaluation_date = Date.from_datetime(effective_date)
+ ql_yc = YC(currency=currency)
+ jp_yc = ql_to_jp(ql_yc)
+ curves[d] = jp_yc
+ return jp_yc
def getMarkitIRData(effective_date = datetime.date.today(),
currency = "USD"):