Coverage for backend / app / emails / utils.py: 100%
18 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-17 21:34 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-17 21:34 +0000
1"""Utility functions for email processing"""
3from email.utils import parseaddr
5from app import models
8def clean_email_address(sender_field: str) -> str:
9 """Extract a clean email address from the sender field
10 Handles formats like:
11 - 'John Doe <john.doe@gmail.com>'
12 - 'john.doe@gmail.com'
13 - '"John Doe" <john.doe@gmail.com>'"""
15 sanitized_field = sender_field.replace(",", " ").strip()
16 name, email = parseaddr(sanitized_field)
17 return email.lower().strip() if email else sanitized_field.lower().strip()
20def get_user_id_from_email(email: str, db) -> None | int:
21 """Get user id from email"""
23 entry = db.query(models.User).filter(models.User.email == email).first()
24 if entry:
25 return entry.id
26 else:
27 raise AssertionError(f"User with email '{email}' not found in database.")
30def build_multi_from_query(email_addresses: str | list[str]) -> str:
31 """Build a nested OR query string for multiple FROM email addresses
32 :param email_addresses: A single email address or a list of email addresses
33 :return: A query string for searching emails from multiple addresses"""
35 if isinstance(email_addresses, str):
36 email_addresses = [email_addresses]
38 query = f'FROM "{email_addresses[0]}"'
39 for email in email_addresses[1:]:
40 query = f'OR {query} FROM "{email}"'
41 return query