#!/usr/bin/env python3 """ Script para migrar datos locales existentes a Hugging Face Datasets. Ejecutar DESPUÉS de crear los datasets vacíos con setup_datasets.py """ import os import json from datasets import Dataset from dotenv import load_dotenv load_dotenv() # Configuración HF_TOKEN = os.getenv("HF_TOKEN") USERNAME = "Edoruin" # Mapeo de archivos locales a datasets MIGRATIONS = [ { "local_file": "/app/data/users.json", "dataset_name": f"{USERNAME}/makerpage-users", "data_key": "users", "description": "Usuarios" }, { "local_file": "/app/data/classrooms.json", "dataset_name": f"{USERNAME}/makerpage-classrooms", "data_key": "classrooms", "description": "Aulas/Cursos" }, { "local_file": "/app/data/prestamos.json", "dataset_name": f"{USERNAME}/makerpage-loans", "data_key": "loans", "description": "Préstamos" }, { "local_file": "/app/data/faces.json", "dataset_name": f"{USERNAME}/makerpage-faces", "data_key": "faces", "description": "Rostros" } ] def migrate_file(local_file, dataset_name, data_key, description): """Migra un archivo JSON local a un dataset de HF.""" # Verificar si el archivo existe if not os.path.exists(local_file): print(f"⚠️ {description}: Archivo no encontrado ({local_file}), usando datos vacíos") data = [] else: # Leer datos locales try: with open(local_file, 'r') as f: data = json.load(f) print(f"📂 {description}: {len(data)} registros encontrados") except Exception as e: print(f"❌ {description}: Error leyendo archivo - {e}") return False # Subir a Hugging Face try: dataset_dict = {data_key: [data]} dataset = Dataset.from_dict(dataset_dict) dataset.push_to_hub( dataset_name, token=HF_TOKEN, private=True ) print(f"✅ {description}: Migrado exitosamente a {dataset_name}\n") return True except Exception as e: print(f"❌ {description}: Error subiendo a HF - {e}\n") return False def main(): if not HF_TOKEN: print("❌ ERROR: No se encontró HF_TOKEN") return print("🔄 Iniciando migración de datos locales a Hugging Face Datasets\n") print("=" * 60) success_count = 0 for migration in MIGRATIONS: if migrate_file(**migration): success_count += 1 print("=" * 60) print(f"\n✨ Migración completada: {success_count}/{len(MIGRATIONS)} datasets actualizados") if success_count == len(MIGRATIONS): print("\n🎉 ¡Todos los datos han sido migrados exitosamente!") print("\n📋 Próximos pasos:") print("1. Reinicia tu Hugging Face Space") print("2. Verifica que los datos aparezcan correctamente") print("3. Ahora puedes hacer factory rebuild sin perder datos") else: print("\n⚠️ Algunos datasets no se pudieron migrar. Revisa los errores arriba.") if __name__ == "__main__": main()