Files
rpa_vision_v3/scripts/validate_imports.sh
Dom a27b74cf22 v1.0 - Version stable: multi-PC, détection UI-DETR-1, 3 modes exécution
- Frontend v4 accessible sur réseau local (192.168.1.40)
- Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard)
- Ollama GPU fonctionnel
- Self-healing interactif
- Dashboard confiance

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:23:51 +01:00

145 lines
4.2 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Script de validation des imports pour la CI.
#
# Valide que:
# 1. Aucun import circulaire n'existe
# 2. Les interfaces abstraites sont correctes
# 3. Les lazy imports fonctionnent
# 4. Les composants critiques sont importables
#
# Auteur: Dom, Alice Kiro
# Date: 20 décembre 2024
set -e # Arrêter en cas d'erreur
echo "🔍 Validation des imports RPA Vision V3..."
# Couleurs pour l'affichage
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Fonction pour afficher les erreurs
error() {
echo -e "${RED}$1${NC}"
exit 1
}
# Fonction pour afficher les succès
success() {
echo -e "${GREEN}$1${NC}"
}
# Fonction pour afficher les infos
info() {
echo -e "${YELLOW} $1${NC}"
}
# Vérifier que nous sommes dans le bon répertoire
if [ ! -f "validate_circular_imports.py" ]; then
error "Script validate_circular_imports.py non trouvé. Exécuter depuis la racine du projet."
fi
# 1. Validation des imports circulaires
info "Étape 1: Validation des imports circulaires..."
python3 validate_circular_imports.py || error "Imports circulaires détectés"
success "Aucun import circulaire détecté"
# 2. Tests unitaires des imports
info "Étape 2: Tests unitaires des imports..."
python3 -m pytest tests/unit/test_circular_imports.py -v -q || error "Tests unitaires des imports échoués"
success "Tests unitaires des imports réussis"
# 3. Tests de propriété
info "Étape 3: Tests de propriété des imports..."
python3 -m pytest tests/property/test_circular_imports_property.py -v -q || error "Tests de propriété échoués"
success "Tests de propriété réussis"
# 4. Validation de la structure des imports
info "Étape 4: Validation de la structure des imports..."
python3 -c "
import sys
sys.path.insert(0, '.')
# Test des imports de base
from core.models import RawSession, ScreenState, UIElement
from core.models import get_workflow, get_action, get_target_spec
from core.interfaces import ITargetResolver, IActionExecutor, IErrorHandler
# Test des lazy imports
Workflow = get_workflow()
Action = get_action()
TargetSpec = get_target_spec()
# Vérifier que les interfaces sont abstraites
import inspect
assert inspect.isabstract(ITargetResolver)
assert inspect.isabstract(IActionExecutor)
assert inspect.isabstract(IErrorHandler)
print('Structure des imports validée')
" || error "Structure des imports invalide"
success "Structure des imports validée"
# 5. Validation que TYPE_CHECKING fonctionne
info "Étape 5: Validation TYPE_CHECKING..."
python3 -c "
from typing import TYPE_CHECKING
import core.models as models
# Vérifier que les imports conditionnels ne sont pas disponibles à l'exécution
assert not hasattr(models, 'Workflow')
assert not hasattr(models, 'Action')
# Mais que les lazy imports sont disponibles
assert hasattr(models, 'get_workflow')
assert hasattr(models, 'get_action')
print('TYPE_CHECKING fonctionne correctement')
" || error "TYPE_CHECKING ne fonctionne pas correctement"
success "TYPE_CHECKING validé"
# 6. Test de performance des imports
info "Étape 6: Test de performance des imports..."
python3 -c "
import time
import sys
sys.path.insert(0, '.')
start_time = time.time()
# Importer les modules de base
from core.models import RawSession, ScreenState, UIElement
from core.interfaces import ITargetResolver, IActionExecutor, IErrorHandler
# Utiliser les lazy imports
from core.models import get_workflow, get_action
Workflow = get_workflow()
Action = get_action()
end_time = time.time()
import_time = end_time - start_time
print(f'Temps d\'import: {import_time:.3f}s')
# Vérifier que les imports sont rapides (< 1 seconde)
if import_time > 1.0:
print(f'ATTENTION: Imports lents ({import_time:.3f}s)')
exit(1)
else:
print('Performance des imports acceptable')
" || error "Imports trop lents"
success "Performance des imports acceptable"
echo ""
echo -e "${GREEN}🎉 Validation des imports complète!${NC}"
echo ""
echo "Résumé:"
echo " ✅ Aucun import circulaire"
echo " ✅ Interfaces abstraites correctes"
echo " ✅ Lazy imports fonctionnels"
echo " ✅ TYPE_CHECKING configuré"
echo " ✅ Performance acceptable"
echo ""
echo -e "${GREEN}Le système respecte les bonnes pratiques d'imports Python.${NC}"