from serenitas.analytics.dates import prev_business_day from serenitas.utils.exchange import ExchangeMessage import logging import argparse import datetime from .sma import ( IsoselSMA, BowdstSMA, PositionReport, BondPosition, FuturePosition, TranchePosition, CDXPosition, IRSwaptionPosition, CDXSwaptionPosition, ) from .cash import NTCashReport, UMBCashReport, BNYCashReport from .admin import AccruedReport, AllReport from .wires import BowdstWire, NTWire from .custodians import upload_to_custodian logger = logging.getLogger(__name__) parser = argparse.ArgumentParser() parser.add_argument( "-s", "--sma_positions", action="store_true", help="upload sma positions to hedgemark", ) parser.add_argument( "-c", "--cash_reports", action="store_true", help="process cash reports to database" ) parser.add_argument( "-i", "--isosel_reports", action="store_true", help="download isosel reports to database", ) parser.add_argument( "-w", "--wire_reports", action="store_true", help="download wires to db" ) parser.add_argument( "-sc", "--send_to_custodians", action="store_true", help="upload trade files to notify custodians", ) parser.add_argument( "-n", "--no-upload", action="store_true", help="do not upload, just create files" ) parser.add_argument( "date", nargs="?", type=datetime.date.fromisoformat, default=datetime.date.today(), ) args = parser.parse_args() cob = date = prev_business_day(args.date) if args.sma_positions: for sma_cls in ( IsoselSMA, BowdstSMA, ): sma = sma_cls(cob) try: sma.email_positions() except ValueError as e: logger.warning(e) if args.cash_reports: for report_cls in ( NTCashReport, UMBCashReport, BNYCashReport, ): report = report_cls(args.date) try: report.to_db() except ValueError as e: logger.warning(e) if args.isosel_reports: for report_cls in ( AccruedReport, AllReport, ): try: report_cls.to_db(cob) except ValueError as e: logger.info(e) if args.wire_reports: for wire_report in (BowdstWire, NTWire): try: wire_report.to_db(args.date) except ValueError as e: logger.info(e) if args.send_to_custodians: em = ExchangeMessage() for account in ( "BBH", "UMB", ): try: upload_to_custodian(account, args.date, not args.no_upload, em) except ValueError as e: logger.info(e)