""" Utilities for persistent storage in Hugging Face Spaces. """ import os from pathlib import Path from typing import Optional def get_persistent_data_dir() -> Optional[Path]: """Get the persistent data directory if available. Returns: Path to persistent storage directory if available, None otherwise. """ if os.path.isdir("/data"): data_dir = Path("/data/app_data") data_dir.mkdir(exist_ok=True) return data_dir return None def get_cache_dir() -> Path: """Get the appropriate cache directory (persistent if available, temp otherwise). Returns: Path to cache directory. """ if os.path.isdir("/data"): cache_dir = Path("/data/.cache") cache_dir.mkdir(exist_ok=True) return cache_dir else: # Fallback to temp directory import tempfile return Path(tempfile.gettempdir()) / "app_cache" def save_uploaded_file(uploaded_file, filename: str) -> Optional[Path]: """Save an uploaded file to persistent storage. Args: uploaded_file: Gradio uploaded file object filename: Name to save the file as Returns: Path to saved file if successful, None otherwise. """ persistent_dir = get_persistent_data_dir() if persistent_dir and uploaded_file: save_path = persistent_dir / filename save_path.parent.mkdir(parents=True, exist_ok=True) # Copy the uploaded file to persistent storage import shutil shutil.copy2(uploaded_file, save_path) return save_path return None def is_persistent_storage_available() -> bool: """Check if persistent storage is available. Returns: True if persistent storage is available, False otherwise. """ return os.path.isdir("/data") def get_persistent_results_dir() -> Optional[Path]: """Get the persistent results directory for storing pipeline results. Returns: Path to persistent results directory if available, None otherwise. """ persistent_dir = get_persistent_data_dir() if persistent_dir: results_dir = persistent_dir / "results" results_dir.mkdir(exist_ok=True) return results_dir return None