from serenitas.utils.exchange import ExchangeMessage from serenitas.utils.env import DAILY_DIR import warnings import datetime from .misc import get_dir, dt_from_fname import gpg class NT: @classmethod def download_reports(cls, date=datetime.date.today()): em = ExchangeMessage() for msg in em.get_msgs(path=["SeleneOps", "Passport"]): for attach in msg.attachments: message_time = attach.last_modified_time if attach.name == "Attachment1.pgp" and message_time.date() == date: dest = get_dir(message_time.date(), archived=False) dest.mkdir(exist_ok=True, parents=True) with attach.fp as fp: plaintext, result, verify_result = gpg.Context().decrypt( fp.read(), passphrase="Serenitas1" ) fname = ( "custodian_wires" if "custodian" in verify_result.file_name else "cash" ) dest = dest / f"{fname}_{message_time:%Y%m%d%H%M}.csv" with open(dest, "w") as csvFile: text = plaintext.decode("utf-8").replace("\t", ",") csvFile.write(text) class UMB: @classmethod def download_reports(cls, date=datetime.date.today()): em = ExchangeMessage() for msg in em.get_msgs(count=20, path=["NYops", "Powerstation"]): for attach in msg.attachments: timestamp = attach.last_modified_time if ( attach.name.startswith("cash_reporting") and timestamp.date() == date ): dest = get_dir(timestamp.date(), archived=False) dest.mkdir(exist_ok=True, parents=True) p = dest / f"umb_{timestamp:%Y%m%d%H%M}.xlsx" if not p.exists(): p.write_bytes(attach.content) class BNY: @classmethod def download_reports(cls, date=datetime.date.today()): em = ExchangeMessage() bowdst_wire_recent = True for msg in em.get_msgs( 20, path=["BowdoinOps", "Reports"], subject__startswith="Document(s) from Reporting", ): if msg.sender == "notify@bnymellon.com": for attach in msg.attachments: fname = attach.name if fname.endswith("csv"): base_name = fname.removesuffix(".csv") file_type, date_part = base_name.split("_") match file_type: case ( "Asset Detail" | "Net Investment Earned Income by Security" | "Settled Cash Statement" ): date = datetime.datetime.strptime( date_part, "%d %b %Y" ).date() case "BowdstWires": try: date = datetime.datetime.strptime( date_part, "%Y%m%d%H%M%S" ).date() except ValueError: date = datetime.datetime.strptime( date_part, "%d %b %Y%H%M%S" ).date() case "Live-cash": date = datetime.datetime.strptime( date_part, "%Y%m%d%H%M%S" ).date() case _: warnings.warn(f"Unknown report type {file_type}") continue p = DAILY_DIR / str(date) / "Reports" / fname if not p.parent.exists(): p.parent.mkdir(parents=True, exist_ok=True) if not p.exists(): p.write_bytes(attach.content)