| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- #!/usr/bin/env python3
- """
- Script de limpieza para HokoriTemp
- Elimina archivos expirados de la base de datos y del sistema de archivos
- """
- import os
- import sys
- from datetime import datetime
- from database import cleanup_expired_files, get_all_files, hard_delete_file
- def cleanup_physical_files(upload_folder='uploads'):
- """Eliminar archivos físicos que ya no están en la base de datos"""
- if not os.path.exists(upload_folder):
- print(f"La carpeta {upload_folder} no existe.")
- return
-
- # Obtener todos los archivos en la base de datos
- db_files = get_all_files()
- db_filenames = {file['stored_filename'] for file in db_files}
-
- # Obtener todos los archivos físicos
- physical_files = os.listdir(upload_folder)
-
- # Encontrar archivos huérfanos (físicos pero no en BD)
- orphaned_files = []
- for filename in physical_files:
- if filename not in db_filenames:
- orphaned_files.append(filename)
-
- # Eliminar archivos huérfanos
- deleted_count = 0
- for filename in orphaned_files:
- file_path = os.path.join(upload_folder, filename)
- try:
- os.remove(file_path)
- deleted_count += 1
- print(f"Eliminado archivo huérfano: {filename}")
- except Exception as e:
- print(f"Error eliminando {filename}: {e}")
-
- print(f"Se eliminaron {deleted_count} archivos huérfanos.")
- def cleanup_expired_from_db():
- """Limpiar archivos expirados de la base de datos permanentemente"""
- try:
- from database import get_active_files, hard_delete_file
- import os
-
- # Obtener archivos activos (no expirados)
- active_files = get_active_files()
- active_file_ids = {file['id'] for file in active_files}
-
- # Obtener todos los archivos
- all_files = get_all_files()
-
- # Encontrar archivos expirados
- expired_files = []
- for file in all_files:
- if file['id'] not in active_file_ids:
- expired_files.append(file)
-
- # Eliminar archivos expirados permanentemente
- deleted_count = 0
- for file in expired_files:
- try:
- # Eliminar archivo físico
- file_path = os.path.join('uploads', file['stored_filename'])
- if os.path.exists(file_path):
- os.remove(file_path)
-
- # Eliminar de la base de datos
- hard_delete_file(file['id'])
- deleted_count += 1
- print(f"Eliminado archivo expirado: {file['original_filename']}")
- except Exception as e:
- print(f"Error eliminando archivo expirado {file['original_filename']}: {e}")
-
- print(f"Se eliminaron permanentemente {deleted_count} archivos expirados.")
- return deleted_count
- except Exception as e:
- print(f"Error limpiando base de datos: {e}")
- return 0
- def get_stats():
- """Mostrar estadísticas de la base de datos"""
- try:
- from database import get_file_stats
- stats = get_file_stats()
- print(f"\nEstadísticas:")
- print(f"- Total de archivos: {stats['total_files']}")
- print(f"- Archivos activos: {stats['active_files']}")
- print(f"- Total de descargas: {stats['total_downloads']}")
- except Exception as e:
- print(f"Error obteniendo estadísticas: {e}")
- def main():
- """Función principal del script de limpieza"""
- print("=== HokoriTemp - Script de Limpieza ===")
-
- # Verificar argumentos
- if len(sys.argv) > 1:
- command = sys.argv[1]
-
- if command == '--help' or command == '-h':
- print("""
- Uso: python cleanup.py [comando]
- Comandos disponibles:
- --help, -h Mostrar esta ayuda
- --stats Mostrar estadísticas de la base de datos
- --db-only Solo limpiar base de datos (no archivos físicos)
- --files-only Solo limpiar archivos físicos huérfanos
- --all Limpiar todo (por defecto)
- Ejemplos:
- python cleanup.py --stats
- python cleanup.py --db-only
- python cleanup.py --all
- """)
- return
-
- elif command == '--stats':
- get_stats()
- return
-
- elif command == '--db-only':
- print("Limpiando solo base de datos...")
- cleanup_expired_from_db()
- return
-
- elif command == '--files-only':
- print("Limpiando solo archivos físicos...")
- cleanup_physical_files()
- return
-
- # Limpieza completa por defecto
- print("Iniciando limpieza completa...")
-
- # Limpiar base de datos
- db_deleted = cleanup_expired_from_db()
-
- # Limpiar archivos físicos
- cleanup_physical_files()
-
- # Mostrar estadísticas finales
- get_stats()
-
- print("\nLimpieza completada.")
- if __name__ == '__main__':
- main()
|