aboutsummaryrefslogtreecommitdiffstats
path: root/python/monthly_interest.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/monthly_interest.py')
-rw-r--r--python/monthly_interest.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/python/monthly_interest.py b/python/monthly_interest.py
new file mode 100644
index 00000000..1d693e48
--- /dev/null
+++ b/python/monthly_interest.py
@@ -0,0 +1,56 @@
+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
+
+logger = logging.getLogger(__name__)
+
+
+def download_messages(em, counterparty):
+ for msg in em.get_msgs(
+ 20,
+ path=["Interest", counterparty],
+ ):
+ if counterparty == "CITI":
+ base_dir = DAILY_DIR / f"{counterparty}_reports" / "Interest Statements"
+ else:
+ base_dir = (
+ DAILY_DIR
+ / "Serenitas"
+ / f"{counterparty}_reports"
+ / "Interest Statements"
+ )
+ if msg.datetime_sent.date() > datetime.date(2021, 5, 1):
+ 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"]
+
+for cp in counterparties:
+ download_messages(em, cp)