================================================================================ GMAIL CLEANUP - CHALLENGE 2 SOLUTION Chapter 4: Building Email Utilities Challenge: Specialized Finders ================================================================================ PROBLEM: Add methods to find: 1. Emails older than N days 2. Emails with attachments > N MB 3. Emails from specific sender SOLUTION: ================================================================================ File: gmail_utils.py (GmailCleanup additions) from datetime import datetime, timedelta class GmailCleanup: # ... previous code ... def find_old_emails(self, days: int) -> list: """Find emails older than N days.""" cutoff = (datetime.now() - timedelta(days=days)).strftime('%Y/%m/%d') query = f"before:{cutoff}" return self.find_emails(query) def find_large_attachments(self, min_size_mb: int) -> list: """Find emails with attachments > N MB.""" min_bytes = min_size_mb * 1024 * 1024 query = f"has:attachment size:>{min_bytes}" return self.find_emails(query) def find_from_sender(self, sender: str) -> list: """Find emails from specific sender.""" query = f"from:{sender}" return self.find_emails(query) def find_by_subject(self, subject: str) -> list: """Find emails by subject keyword.""" query = f"subject:{subject}" return self.find_emails(query) USAGE ================================================================================ cleanup = GmailCleanup(service, config) # Find old emails (> 1 year) old = cleanup.find_old_emails(days=365) # Find large attachments (> 10MB) large = cleanup.find_large_attachments(min_size_mb=10) # Find from newsletter newsletters = cleanup.find_from_sender("newsletter@company.com") # Find by subject receipts = cleanup.find_by_subject("receipt") COMBINING QUERIES ================================================================================ # Multiple conditions query = "before:2020/01/01 has:attachment size:>5M" emails = cleanup.find_emails(query) # Exclude queries (using -) query = "before:2020/01/01 -from:important@work.com" emails = cleanup.find_emails(query) ================================================================================