Spaces:
Sleeping
Sleeping
File size: 1,624 Bytes
be85b16 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# 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
"""
|