from serenitas.utils.env import DAILY_DIR from serenitas.utils.exchange import ExchangeMessage import datetime from collateral.baml_isda import download_from_secure_id from bs4 import BeautifulSoup from urllib.parse import urlsplit, parse_qs, urlunsplit import logging import argparse logger = logging.getLogger(__name__) def download_messages(em, counterparty, start, end): for msg in em.get_msgs( 20, path=["Interest", counterparty], ): if counterparty == "CITI": base_dir = DAILY_DIR / f"{counterparty}_reports" / "Interest Statements" elif counterparty == "BAML": base_dir = ( DAILY_DIR / "Serenits" / "Test" / f"BoA_reports" / "Interest Statements" ) else: base_dir = ( DAILY_DIR / "Serenitas" / "Test" / f"{counterparty}_reports" / "Interest Statements" ) if (msg.datetime_sent.date() > datetime.date.fromisoformat(start)) and ( msg.datetime_sent.date() < datetime.date.fromisoformat(end) ): if counterparty == "BAML": soup = BeautifulSoup(msg.body, features="lxml") a = soup.find("a") url = urlsplit(a["href"]) query = parse_qs(url.query) base_url = urlunsplit(url[:2] + ("",) * 3) try: download_from_secure_id( query["id"][0], query["brand"][0], base_dir, base_url ) except ValueError as e: logging.error(e) continue continue for attach in msg.attachments: fname = attach.name if (counterparty == "CS") and not ("Interest" in fname): continue p = base_dir / fname if not p.parent.exists(): p.parent.mkdir(parents=True) if not p.exists(): p.write_bytes(attach.content) em = ExchangeMessage() counterparties = ["BAML", "BNP", "CITI", "CS", "GS", "MS"] parser = argparse.ArgumentParser(description="determine sender destination") parser.add_argument("start") parser.add_argument("end") args = parser.parse_args() for cp in counterparties: download_messages(em, cp, args.start, args.end)