diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/report_ops/custodians.py | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/python/report_ops/custodians.py b/python/report_ops/custodians.py new file mode 100644 index 00000000..8f952d57 --- /dev/null +++ b/python/report_ops/custodians.py @@ -0,0 +1,101 @@ +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() or ( + fname.startswith("BowdstWires") and bowdst_wire_recent + ): + if fname.startswith("BowdstWires"): + bowdst_wire_recent = False + p.write_bytes(attach.content) |
