diff options
| -rw-r--r-- | python/collateral/__main__.py | 24 | ||||
| -rw-r--r-- | python/collateral/common.py | 9 |
2 files changed, 19 insertions, 14 deletions
diff --git a/python/collateral/__main__.py b/python/collateral/__main__.py index 69c4ee12..37e8c2ff 100644 --- a/python/collateral/__main__.py +++ b/python/collateral/__main__.py @@ -5,8 +5,7 @@ from importlib import import_module from utils import SerenitasFileHandler from utils.db import dawn_engine, dbconn -from .common import get_bilateral_trades, send_email -from pandas.tseries.offsets import BDay +from .common import get_bilateral_trades, send_email, prev_business_day import argparse import datetime @@ -31,7 +30,7 @@ parser.add_argument( "-s", "--send-email", action="store_true", help="send email to Globeop" ) args = parser.parse_args() -counterparties = ["citi", "baml_isda", "ms", "gs", "bnp", "baml_fcm", "wells", "cs"] +counterparties = ("citi", "baml_isda", "ms", "gs", "bnp", "baml_fcm", "wells", "cs") if args.download: em = ExchangeMessage() for cp in counterparties: @@ -39,7 +38,7 @@ if args.download: for fund in ("Serenitas", "Brinker", "BowdSt"): cp_mod.download_files(em, fund=fund) -args.workdate -= BDay() +workdate = prev_business_day(args.workdate) cp_dict = { "Serenitas": { @@ -56,12 +55,11 @@ def run_collateral(cp, fund, positions, workdate, engine): lookback = 0 while lookback < 2: try: - return cp_mod.collateral( - workdate - BDay(lookback), positions, engine=engine, fund=fund - ) + return cp_mod.collateral(workdate, positions, engine=engine, fund=fund) except FileNotFoundError as e: logger.info(e) lookback += 1 + workdate = prev_business_day(workdate) except ValueError as e: logger.error(e) break @@ -74,24 +72,22 @@ fcm_mapping = {"baml_fcm": "BAML", "wells": "WF", "gs_fcm": "GS"} fund_mapping = {"Serenitas": "SERCGMAST", "Brinker": "BRINKER", "BowdSt": "BOWDST"} for fund in ("Serenitas", "Brinker", "BowdSt"): - bilat_positions = get_bilateral_trades( - args.workdate, fund_mapping[fund], dawn_engine - ) + bilat_positions = get_bilateral_trades(workdate, fund_mapping[fund], dawn_engine) for fcm in cp_dict[fund]["fcms"]: positions = pd.read_sql_query( "SELECT security_id, security_desc, maturity, " "folder, notional, currency " "FROM list_cds_positions_by_strat_fcm(%s, %s, %s)", dawn_engine, - params=(args.workdate.date(), fcm_mapping[fcm], fund_mapping[fund]), + params=(workdate, fcm_mapping[fcm], fund_mapping[fund]), index_col=["security_id", "maturity"], ) df[(fund, fcm.upper())] = run_collateral( - fcm, fund, positions, args.workdate, dawn_engine + fcm, fund, positions, workdate, dawn_engine ) for cp in cp_dict[fund]["isda_cps"]: df[(fund, cp.upper())] = run_collateral( - cp, fund, bilat_positions, args.workdate, dawn_engine + cp, fund, bilat_positions, workdate, dawn_engine ) @@ -113,4 +109,4 @@ conn.commit() conn.close() if args.send_email: - send_email(args.workdate, df[df.fund == "SERCGMAST"].drop("fund", axis=1)) + send_email(workdate, df[df.fund == "SERCGMAST"].drop("fund", axis=1)) diff --git a/python/collateral/common.py b/python/collateral/common.py index a7a34be6..3db7349e 100644 --- a/python/collateral/common.py +++ b/python/collateral/common.py @@ -131,3 +131,12 @@ def get_col(l, top, bottom, left, right): and int(c["top"]) >= top and int(c["top"]) < bottom ] + + +def prev_business_day(d: datetime.date): + if (offset := d.weekday() - 4) > 0: + return d - datetime.timedelta(days=offset) + elif offset == -4: + return d - datetime.timedelta(days=3) + else: + return d - datetime.timedelta(days=1) |
