#!/usr/bin/env python3 """ Script de test pour vérifier le bon fonctionnement de l'application avant le déploiement sur Hugging Face Spaces. """ import os import sys import tempfile from pathlib import Path def test_imports(): """Test des imports de base (sans les modules ML)""" print("🔍 Test des imports de base...") try: import os import sys import tempfile print("✅ Modules Python standard importés avec succès") except ImportError as e: print(f"❌ Erreur import modules standard: {e}") return False try: from pathlib import Path print("✅ Pathlib importé avec succès") except ImportError as e: print(f"❌ Erreur import Pathlib: {e}") return False # Test des modules locaux (sans dépendances externes) try: # Vérifier que les fichiers existent import src print("✅ Package src accessible") except ImportError as e: print(f"❌ Erreur import src: {e}") return False print("⚠️ Note: Les imports ML (torch, transformers, etc.) seront testés après installation") return True def test_audio_generation(): """Simule la génération d'un fichier audio de test""" print("🎵 Test de génération d'audio (simulé)...") # Créer un fichier vide pour simuler test_audio_path = "test_audio.wav" with open(test_audio_path, 'w') as f: f.write("# Fichier audio de test simulé") print(f"✅ Fichier audio de test simulé créé: {test_audio_path}") print("⚠️ Note: La génération audio réelle nécessite numpy et soundfile") return test_audio_path def test_model_loading(): """Test du chargement des modèles (simulé)""" print("🤖 Test du chargement des modèles...") try: # Vérifier que les fichiers de configuration existent from pathlib import Path # Vérifier que les modèles référencés existent sur HF model_names = [ "jonatasgrosman/wav2vec2-large-xlsr-53-french", "nlptown/bert-base-multilingual-uncased-sentiment" ] print("✅ Configuration des modèles vérifiée") print("⚠️ Note: Les modèles seront téléchargés lors du premier lancement") return True except Exception as e: print(f"❌ Erreur configuration modèles: {e}") return False def test_app_creation(): """Test de la création de l'application (simulé)""" print("🎨 Test de la création de l'application...") try: # Vérifier que le fichier app_with_api.py existe et est valide from pathlib import Path app_file = Path("app_with_api.py") if app_file.exists(): # Vérifier la syntaxe Python with open(app_file, 'r', encoding='utf-8') as f: content = f.read() # Test de compilation (syntaxe) compile(content, app_file, 'exec') print("✅ Fichier app_with_api.py syntaxiquement valide") return True else: print("❌ Fichier app_with_api.py manquant") return False except SyntaxError as e: print(f"❌ Erreur syntaxe dans app_with_api.py: {e}") return False except Exception as e: print(f"❌ Erreur vérification app: {e}") return False def test_file_structure(): """Vérifie la structure des fichiers""" print("📁 Vérification de la structure des fichiers...") required_files = [ "app_with_api.py", "requirements_hf.txt", "README.md", ".gitattributes", "src/__init__.py", "src/transcription.py", "src/sentiment.py", "src/multimodal.py", "src/inference.py" ] missing_files = [] for file_path in required_files: if not Path(file_path).exists(): missing_files.append(file_path) else: print(f"✅ {file_path}") if missing_files: print(f"❌ Fichiers manquants: {missing_files}") return False print("✅ Tous les fichiers requis sont présents") return True def test_requirements(): """Vérifie le fichier requirements""" print("📦 Vérification du fichier requirements...") try: with open("requirements_hf.txt", "r") as f: requirements = f.read() # Vérifier les dépendances essentielles essential_deps = ["gradio", "torch", "transformers", "soundfile"] missing_deps = [] for dep in essential_deps: if dep not in requirements: missing_deps.append(dep) if missing_deps: print(f"❌ Dépendances manquantes: {missing_deps}") return False print("✅ Fichier requirements valide") return True except Exception as e: print(f"❌ Erreur lecture requirements: {e}") return False def main(): """Fonction principale de test""" print("🚀 Démarrage des tests de déploiement...\n") tests = [ ("Structure des fichiers", test_file_structure), ("Fichier requirements", test_requirements), ("Imports", test_imports), ("Chargement modèles", test_model_loading), ("Création app", test_app_creation), ] results = [] for test_name, test_func in tests: print(f"\n{'='*50}") print(f"Test: {test_name}") print('='*50) try: result = test_func() results.append((test_name, result)) except Exception as e: print(f"❌ Erreur inattendue: {e}") results.append((test_name, False)) # Résumé print(f"\n{'='*50}") print("📊 RÉSUMÉ DES TESTS") print('='*50) passed = 0 total = len(results) for test_name, result in results: status = "✅ PASS" if result else "❌ FAIL" print(f"{test_name}: {status}") if result: passed += 1 print(f"\nRésultat: {passed}/{total} tests réussis") if passed == total: print("🎉 Tous les tests sont passés ! Votre projet est prêt pour le déploiement.") return True else: print("⚠️ Certains tests ont échoué. Corrigez les problèmes avant le déploiement.") return False if __name__ == "__main__": success = main() sys.exit(0 if success else 1)