diff options
Diffstat (limited to 'python/yieldcurve.py')
| -rw-r--r-- | python/yieldcurve.py | 22 |
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"): |
