| | |
| | """ |
| | 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() |
| |
|
| | |
| | HF_TOKEN = os.getenv("HF_TOKEN") |
| | USERNAME = "Edoruin" |
| |
|
| | |
| | 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.""" |
| | |
| | |
| | if not os.path.exists(local_file): |
| | print(f"⚠️ {description}: Archivo no encontrado ({local_file}), usando datos vacíos") |
| | data = [] |
| | else: |
| | |
| | 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 |
| | |
| | |
| | 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() |
| |
|