fix content extraction for multipart mbna

This commit is contained in:
Keenan Tims 2025-04-24 18:47:45 -07:00
parent d1845cc5d9
commit d0f69611dc
2 changed files with 16 additions and 7 deletions

View File

@ -58,7 +58,7 @@ class MinimalBankParser(TransactionParser):
return msg["From"] == "Minimal Bank <alerts@minimalbank.com>" and "Transaction Alert" in msg["Subject"]
def extract(self, msg):
body = msg.get_content()
body = msg.get_body().get_content()
amount = ... # Extract amount from body
date = ... # Extract date from body
payee = ... # Extract payee from body

View File

@ -62,10 +62,13 @@ class RogersBankParser(TransactionParser):
)
def extract(self, msg: EmailMessage) -> Optional[Transaction]:
body = msg.get_content()
body = msg.get_body()
if body is None:
raise TransactionParsingFailed("No body of message found")
matches = self.EXTRACT_RE.search(body)
content = body.get_content()
if content is None:
raise TransactionParsingFailed("No content of message found")
matches = self.EXTRACT_RE.search(content)
if matches is None:
raise TransactionParsingFailed("No matches for extraction RE")
amount = Decimal(matches[1])
@ -97,10 +100,13 @@ class MBNAParser(TransactionParser):
)
def extract(self, msg: EmailMessage) -> Optional[Transaction]:
body = msg.get_content()
body = msg.get_body()
if body is None:
raise TransactionParsingFailed("No body of message found")
matches = self.EXTRACT_RE.search(body)
content = body.get_content()
if content is None:
raise TransactionParsingFailed("No content of message found")
matches = self.EXTRACT_RE.search(content)
if matches is None:
raise TransactionParsingFailed("No matches for extraction RE")
amount = Decimal(matches[1])
@ -129,10 +135,13 @@ class BMOParser(TransactionParser):
return msg["From"] == "bmoalerts@bmo.com"
def extract(self, msg: EmailMessage) -> Optional[Transaction]:
body = msg.get_content()
body = msg.get_body(preferencelist=("html", "plain"))
if body is None:
raise TransactionParsingFailed("No body of message found")
soup = BeautifulSoup(body, "html.parser")
content = body.get_content()
if content is None:
raise TransactionParsingFailed("No content of message found")
soup = BeautifulSoup(content, "html.parser")
matches = self.EXTRACT_RE.search(soup.get_text())
if matches is None:
raise TransactionParsingFailed("No matches for extraction RE")