import argparse import datetime import logging import numpy as np import time from .cds import download_cds_data, download_composite_data from .loans import ( download_facility, insert_facility, download_marks, update_facility, download_recupdates, ) from .rates import downloadMarkitIRData from .import_quotes import * from pandas.tseries.offsets import BDay from serenitas.utils import SerenitasFileHandler from serenitas.utils.db import serenitas_pool # parse arguments parser = argparse.ArgumentParser() group = parser.add_mutually_exclusive_group(required=True) group.add_argument( "-l", "--loans", action="store_true", help="download markit loan data" ) group.add_argument("-c", "--cds", action="store_true", help="download markit cds data") group.add_argument("-r", "--rates", action="store_true", help="download markit IR data") parser.add_argument( "-i", "--insert-only", action="store_true", help="do not re-download data" ) parser.add_argument( "-s", "--same-day", action="store_true", dest="same_day", help="download same day reports", ) parser.add_argument("workdate", nargs="?", type=datetime.date.fromisoformat) def default_date(): return (datetime.date.today() - BDay(1)).date() args = parser.parse_args() historical = True if args.workdate is None: if not args.rates: historical = False if not args.same_day: workdate = default_date() else: workdate = datetime.date.today() else: workdate = datetime.date.today() else: workdate = args.workdate if args.loans: fh = SerenitasFileHandler("markit_loans.log") elif args.cds: fh = SerenitasFileHandler("markit_cds.log") elif args.rates: fh = SerenitasFileHandler("markit_rates.log") # set up logging logger = logging.getLogger("markit") logger.addHandler(fh) logger.setLevel(logging.INFO) if args.loans: payload = {"LEGALENTITY": "lmcg", "USERNAME": "serecapuser", "PASSWORD": "Welcome1"} download_facility(workdate, payload) logger.info("facility downloaded") insert_facility(workdate) logger.info("facility inserted") payload.update({"RELATIVEVERSION": np.busday_count(default_date(), workdate)}) download_marks(workdate, payload) logger.info("marks downloaded") payload.pop("RELATIVEVERSION") update_facility(workdate, payload) logger.info("facility updated") download_recupdates(workdate, payload) logger.info("recommanded updates downloaded") elif args.cds: if not args.insert_only: payload = { "user": "GuillaumeHorel", "password": "password", "version": "5", "format": "csv", "date": f"{workdate:%Y%m%d}", "type": "CDS", } # download_cds_data(payload, workdate, "COMPOSITES") if not args.same_day: download_cds_data(payload, workdate) else: pass # not permissioned # payload.update({"type": "fccds", "version": "6"}) # download_cds_data(payload, workdate, "SAME_DAY_FC_CDS_NEWYORK_CLOSE") payload.update({"type": "CredIndex", "version": 4}) if args.same_day: download_composite_data( payload, workdate, historical, ("SAME_DAY_INDICES",) ) else: download_composite_data(payload, workdate, historical) if not args.same_day: conn = serenitas_pool.getconn() remove_curves(conn, workdate) insert_cds(conn, workdate) copy_curves_forward(conn, workdate) if not args.insert_only: insert_index(conn, workdate) insert_tranche(conn, workdate) serenitas_pool.putconn(conn) elif args.rates: conn = serenitas_pool.getconn() for curr in ["USD", "EUR", "JPY"]: retry = 0 while retry < 10: try: downloadMarkitIRData(conn, workdate, curr) except ValueError as e: logger.error(e) logger.error(f"Could not download {curr} rates for date {workdate}") time.sleep(30) retry += 1 else: logger.info(f"Downloaded {curr} rates") break serenitas_pool.putconn(conn)