================================================================================ GMAIL CLEANUP - CHALLENGE 3 SOLUTION Chapter 4: Building Email Utilities Challenge: Statistics & Reporting ================================================================================ PROBLEM: Extend class with: 1. Track deleted/archived count 2. Calculate storage freed 3. Generate cleanup report SOLUTION: ================================================================================ File: gmail_utils.py (GmailCleanup stats) class GmailCleanup: # ... previous code ... def __init__(self, service, config): self.service = service self.config = config self.deleted_count = 0 self.archived_count = 0 self.total_storage_freed = 0 # in bytes self.deleted_emails = [] # track details def delete_email(self, message_id: str) -> bool: """Delete email and track storage.""" try: details = self.get_email_details(message_id) self.service.users().messages().delete( userId='me', id=message_id ).execute() self.deleted_count += 1 if details: self.total_storage_freed += details['size_mb'] self.deleted_emails.append(details) return True except Exception as e: print(f"❌ Error: {e}") return False def get_stats(self) -> dict: """Get cleanup statistics.""" return { 'deleted': self.deleted_count, 'archived': self.archived_count, 'storage_freed_mb': round(self.total_storage_freed, 2), 'emails': self.deleted_emails } def print_report(self): """Print cleanup summary.""" stats = self.get_stats() print("\n" + "=" * 60) print("CLEANUP REPORT") print("=" * 60) print(f"Emails deleted: {stats['deleted']}") print(f"Emails archived: {stats['archived']}") print(f"Storage freed: {stats['storage_freed_mb']:.2f} MB") print("=" * 60) USAGE ================================================================================ cleanup = GmailCleanup(service, config) # Delete 10 old emails old_emails = cleanup.find_old_emails(days=365) for email in old_emails[:10]: cleanup.delete_email(email['id']) # Print report cleanup.print_report() # Get stats stats = cleanup.get_stats() print(f"Freed: {stats['storage_freed_mb']} MB") EXAMPLE OUTPUT ================================================================================ ============================================================ CLEANUP REPORT ============================================================ Emails deleted: 10 Emails archived: 0 Storage freed: 45.32 MB ============================================================ ================================================================================