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

1"""Utility functions for email processing""" 

2 

3from email.utils import parseaddr 

4 

5from app import models 

6 

7 

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>'""" 

14 

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() 

18 

19 

20def get_user_id_from_email(email: str, db) -> None | int: 

21 """Get user id from email""" 

22 

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.") 

28 

29 

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""" 

34 

35 if isinstance(email_addresses, str): 

36 email_addresses = [email_addresses] 

37 

38 query = f'FROM "{email_addresses[0]}"' 

39 for email in email_addresses[1:]: 

40 query = f'OR {query} FROM "{email}"' 

41 return query