Makerpage / migrate_data.py
Edoruin's picture
fix secrets no found
fad9b47
#!/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()