from serenitas.ops.funds import Service from serenitas.ops.headers import HEADERS from serenitas.utils.exchange import ExchangeMessage, FileAttachment from .headers import get_bny_headers from .misc import _settlement_recipients, _cc_recipients class BNY(Service, service_name="BNY"): filepath_pattern = "BNY.{timestamp:%Y%m%d.%H%M%S}.{trade_tag}.csv" credential = "bny_upload" @classmethod def set_headers(cls, trade_type): cls.headers = get_bny_headers(trade_type) @classmethod def push_trade(cls, trade, action): cls.staging_queue.append(trade.to_bny(action)) @classmethod def upload(cls, buf, dest, fund, upload_type): super().upload(buf, dest, confirm=False) em = ExchangeMessage() em.send_email( f"BNY Upload Receipt {upload_type}", "", to_recipients=_settlement_recipients[fund], cc_recipients=_cc_recipients[fund], attach=(FileAttachment(name=dest, content=buf),), ) class UMB(Service, service_name="UMB"): filepath_pattern = "Serenitas.ALL.{timestamp:%Y%m%d.%H%M%S}.csv" credential = "umb" @classmethod def set_headers(cls, *args): cls.headers = HEADERS["bond"] + [ "DTC", "AccruedPayment", "PrincipalPayment", "CurrentFace", ] @classmethod def push_trade(cls, trade, action): cls.staging_queue.append(trade.to_umb(action)) def get_service(account_counterparty): match account_counterparty: case "UMB": return UMB case "BONY": return BNY case "BBH": return Service["BRINKER"] case _: return None