Spaces:
Running
Running
| import os | |
| import logging | |
| from huggingface_hub import HfApi | |
| logger = logging.getLogger(__name__) | |
| HF_TOKEN = os.getenv("HF_TOKEN") | |
| HF_STORAGE_REPO = os.getenv("HF_STORAGE_REPO", "Isaac105/melodix-stems") | |
| def get_hf_api(): | |
| if not HF_TOKEN: | |
| logger.warning("Falta variable de entorno HF_TOKEN. Operaciones de Hugging Face desactivadas.") | |
| return None | |
| return HfApi(token=HF_TOKEN) | |
| def upload_to_hf(file_path: str, object_name: str) -> str: | |
| """ | |
| Sube un archivo local al dataset de Hugging Face y retorna su URL pública de descarga. | |
| Lanza una excepción si HF_TOKEN no está configurado o si la subida falla. | |
| """ | |
| api = get_hf_api() | |
| if not api: | |
| raise RuntimeError( | |
| f"HF_TOKEN no está configurado en las variables de entorno. " | |
| f"No se puede subir '{object_name}' a Hugging Face Dataset '{HF_STORAGE_REPO}'." | |
| ) | |
| try: | |
| api.upload_file( | |
| path_or_fileobj=file_path, | |
| path_in_repo=object_name, | |
| repo_id=HF_STORAGE_REPO, | |
| repo_type="dataset" | |
| ) | |
| public_url = get_hf_download_url(object_name) | |
| logger.info(f"Archivo subido a Hugging Face Dataset: {object_name}. URL: {public_url}") | |
| return public_url | |
| except Exception as e: | |
| logger.error(f"Error subiendo archivo {object_name} a Hugging Face: {e}") | |
| raise e | |
| def delete_from_hf(object_name: str): | |
| """ | |
| Elimina un archivo del dataset de Hugging Face. | |
| """ | |
| api = get_hf_api() | |
| if not api: | |
| logger.warning(f"[Mock HF] Eliminando {object_name}") | |
| return | |
| try: | |
| api.delete_file( | |
| path_in_repo=object_name, | |
| repo_id=HF_STORAGE_REPO, | |
| repo_type="dataset" | |
| ) | |
| logger.info(f"Archivo eliminado de Hugging Face Dataset: {object_name}") | |
| except Exception as e: | |
| if "EntryNotFound" in str(e) or "404" in str(e): | |
| logger.info(f"El archivo {object_name} no existía en Hugging Face. Ignorado.") | |
| else: | |
| logger.error(f"Error eliminando de Hugging Face ({object_name}): {e}") | |
| def delete_folder_from_hf(prefix: str): | |
| """ | |
| Elimina una carpeta completa (ej. stems/task_id/) del dataset de Hugging Face. | |
| """ | |
| api = get_hf_api() | |
| if not api: | |
| logger.warning(f"[Mock HF] Eliminando carpeta con prefijo: {prefix}") | |
| return | |
| try: | |
| api.delete_folder( | |
| folder_path=prefix, | |
| repo_id=HF_STORAGE_REPO, | |
| repo_type="dataset" | |
| ) | |
| logger.info(f"Carpeta eliminada de Hugging Face Dataset: {prefix}") | |
| except Exception as e: | |
| if "EntryNotFound" in str(e) or "404" in str(e): | |
| logger.info(f"La carpeta {prefix} no existía en Hugging Face. Ignorado.") | |
| else: | |
| logger.error(f"Error eliminando carpeta '{prefix}' de Hugging Face: {e}") | |
| def get_hf_download_url(object_name: str) -> str: | |
| """ | |
| Devuelve la URL de descarga directa pública para un objeto en el dataset de Hugging Face. | |
| """ | |
| return f"https://huggingface.co/datasets/{HF_STORAGE_REPO}/resolve/main/{object_name}" | |