Spaces:
Sleeping
Sleeping
| # Example usage in routes and app.py | |
| """ | |
| In app.py (startup): | |
| from services.drive_service import DriveService | |
| from services.backup_service import initialize_backup_service | |
| drive_service = DriveService() | |
| backup_service = initialize_backup_service( | |
| drive_service, | |
| min_interval_seconds=30 # 30 seconds between backups | |
| ) | |
| In routes (e.g., payments.py): | |
| from fastapi import BackgroundTasks | |
| from services.backup_service import get_backup_service | |
| @router.post("/verify") | |
| async def verify_payment(background_tasks: BackgroundTasks, ...): | |
| # ... payment logic ... | |
| # Trigger backup in background (non-blocking) | |
| backup_service = get_backup_service() | |
| background_tasks.add_task(backup_service.backup_async) | |
| return {"success": True} | |
| In app.py (shutdown): | |
| from services.backup_service import get_backup_service | |
| @app.on_event("shutdown") | |
| async def shutdown(): | |
| backup_service = get_backup_service() | |
| # Force backup on shutdown (ignore debouncing) | |
| await backup_service.backup_async(force=True) | |
| How it works: | |
| 1. User A pays β backup starts in background | |
| 2. User B pays (1s later) β sees backup in progress, skips | |
| 3. User C pays (2s later) β sees backup in progress, skips | |
| 4. Backup completes (5s) | |
| 5. User D pays (10s after first) β only 10s elapsed, skips (debounce) | |
| 6. User E pays (35s after first) β 35s > 30s, new backup starts! | |
| Benefits: | |
| - β No concurrent uploads | |
| - β Response returns immediately | |
| - β Minimal Drive API usage | |
| - β No wasted resources | |
| """ | |