#!/usr/bin/env python3 """ Cleanup script for expired files using expiry database Works with both local storage and Backblaze B2 storage backends """ import os import sys from datetime import datetime from pathlib import Path # Add the project root to Python path project_root = Path(__file__).parent sys.path.append(str(project_root)) from src.config import config from src.storage import StorageManager from expiry_db import ExpiryDatabase def main(): """Main cleanup function""" print("๐Ÿงน Sharey Cleanup Script (Database-driven)") print("=" * 50) print(f"โฐ Started at: {datetime.utcnow().isoformat()}") try: # Load configuration print("โœ… Loaded configuration from config.json") # Initialize storage manager storage_manager = StorageManager(config) backend_info = storage_manager.get_backend_info() print(f"๐Ÿ“ Storage backend: {backend_info['type']}") # Initialize expiry database expiry_db = ExpiryDatabase() # Get expired files from database expired_files = expiry_db.get_expired_files() if not expired_files: print("โœ… No expired files found.") return 0 print(f"๐Ÿ—‘๏ธ Found {len(expired_files)} expired files to delete:") deleted_count = 0 for file_info in expired_files: file_path = file_info['file_path'] expires_at = file_info['expires_at'] storage_backend = file_info['storage_backend'] try: print(f"๐Ÿ—‘๏ธ Deleting expired file: {file_path} (expired: {expires_at})") # Delete from storage backend if storage_manager.delete_file(file_path): # Remove from expiry database expiry_db.remove_file(file_path) deleted_count += 1 print(f"โœ… Deleted: {file_path}") else: print(f"โŒ Failed to delete from storage: {file_path}") except Exception as e: print(f"โŒ Error deleting {file_path}: {e}") print("=" * 50) print(f"โœ… Cleanup completed! Deleted {deleted_count} expired files.") # Show database stats stats = expiry_db.get_stats() print(f"๐Ÿ“Š Database stats:") print(f" โ€ข Total tracked files: {stats.get('total_files', 0)}") print(f" โ€ข Active files: {stats.get('active_files', 0)}") print(f" โ€ข Expired files: {stats.get('expired_files', 0)}") return deleted_count except Exception as e: print(f"โŒ Cleanup failed: {e}") return -1 finally: print(f"โฐ Finished at: {datetime.utcnow().isoformat()}") if __name__ == "__main__": result = main() sys.exit(0 if result >= 0 else 1)