import datetime import logging from serenitas.analytics.bbg_helpers import BBG_IP, init_bbg_session, retrieve_data from markit.import_quotes import get_basketids, get_bbg_tickers from serenitas.utils import SerenitasFileHandler from serenitas.utils.db import dbconn logger = logging.getLogger("bbg_quotes") fh = SerenitasFileHandler("bbg_quotes.log") logger.addHandler(fh) logger.setLevel(logging.INFO) workdate = datetime.date.today() serenitasdb = dbconn("serenitasdb") basket_ids = get_basketids(serenitasdb, workdate) bbg_tickers = set(get_bbg_tickers(serenitasdb, basket_ids, workdate)) logger.info("got bbg tickers") securities = [f"{ticker} Curncy" for ticker in bbg_tickers] fields = ["UPFRONT_RUNNING_SPREAD", "UPFRONT_BID", "UPFRONT_ASK", "CDS_RECOVERY_RT"] r = {} with init_bbg_session(BBG_IP) as session: for pcs in ["CBGN", "CMAN"]: # , 'CMAN', 'MSG1']: logger.info(f"Retrieving quotes for {pcs}") r[pcs] = retrieve_data( session, securities, fields, overrides={"PRICING_SOURCE": pcs} ) sql_str = f"INSERT INTO cds_quotes VALUES({','.join(['%s'] * 8)})" def build_tuple(k, v, workdate, source): return ( workdate, k.split()[0], v.get("UPFRONT_BID"), v.get("UPFRONT_ASK"), v.get("UPFRONT_RUNNING_SPREAD"), v.get("UPFRONT_RUNNING_SPREAD"), source, v.get("CDS_RECOVERY_RT"), ) for pcs in ["CBGN", "CMAN"]: logger.info(f"Inserting quotes for {pcs}") with serenitasdb.cursor() as c: c.executemany( sql_str, [build_tuple(k, v, workdate, pcs) for k, v in r[pcs].items()] ) serenitasdb.commit()