#!/usr/bin/env python3 """ Démonstration des nouvelles fonctionnalités AASQA ============================================== Ce script illustre l'utilisation des nouvelles données enrichies des AASQA : sites web, départements, et fonctions utilitaires. Fonctionnalités démontrées: - Recherche AASQA par département - Informations complètes des organismes - Sites web et contacts - Nouvelles méthodes des classes de données """ import sys import os # Ajouter le répertoire parent au PYTHONPATH pour importer le package local sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from atmo_data_wrapper import ( AtmoDataClient, AASQA_CODES, get_aasqa_by_department, get_aasqa_info, get_aasqa_website, list_departments_by_aasqa ) def demo_department_search(): """Démonstration de la recherche par département""" print("🔍 RECHERCHE D'AASQA PAR DÉPARTEMENT") print("=" * 50) departments_test = ['54', '75', '13', '2A', '974', '99'] for dept in departments_test: aasqa_code = get_aasqa_by_department(dept) if aasqa_code: aasqa_info = get_aasqa_info(aasqa_code) print(f"📍 Département {dept}: {aasqa_info['organisme']} ({aasqa_info['region']})") else: print(f"❌ Département {dept}: Non trouvé") print() def demo_aasqa_details(): """Démonstration des informations détaillées AASQA""" print("📋 INFORMATIONS DÉTAILLÉES DES AASQA") print("=" * 50) # Quelques AASQA représentatives aasqa_samples = ['44', '11', '93', '01', '94'] for aasqa_code in aasqa_samples: info = get_aasqa_info(aasqa_code) if info: print(f"🏢 {info['organisme']}") print(f" 📍 Région: {info['region']}") print(f" 🌐 Site web: {info['site_web']}") print(f" 📋 Départements: {', '.join(info['departements'])}") print(f" 📊 Nombre de départements: {len(info['departements'])}") print() def demo_website_access(): """Démonstration de l'accès aux sites web""" print("🌐 SITES WEB DES AASQA") print("=" * 50) all_aasqa = list(AASQA_CODES.keys()) print("Liste des sites web par région:") print() for aasqa_code in all_aasqa: website = get_aasqa_website(aasqa_code) aasqa_info = get_aasqa_info(aasqa_code) if website and aasqa_info: print(f"• {aasqa_info['region']:<25} → {website}") print() def demo_department_coverage(): """Démonstration de la couverture départementale""" print("🗺️ COUVERTURE DÉPARTEMENTALE") print("=" * 50) # Statistiques sur la couverture total_departments = 0 largest_coverage = 0 largest_aasqa = "" print("Couverture par AASQA:") print() for aasqa_code in AASQA_CODES.keys(): departments = list_departments_by_aasqa(aasqa_code) aasqa_info = get_aasqa_info(aasqa_code) total_departments += len(departments) if len(departments) > largest_coverage: largest_coverage = len(departments) largest_aasqa = aasqa_info['organisme'] print(f"📊 {aasqa_info['organisme']:<30} : {len(departments):2d} département(s)") print() print(f"📈 Statistiques:") print(f" • Total départements couverts: {total_departments}") print(f" • Plus grande couverture: {largest_aasqa} ({largest_coverage} départements)") print() def demo_enhanced_data_models(): """Démonstration des nouvelles méthodes dans les modèles de données""" print("🎯 NOUVELLES MÉTHODES DES MODÈLES") print("=" * 50) try: # Connexion et récupération de données client = AtmoDataClient() success = client.auto_login() if not success: print("❌ Échec de la connexion API") return print("✅ Connexion API réussie") print() # Récupération d'indices ATMO pour test print("📥 Récupération de données de test...") atmo_data = client.get_indices_atmo(aasqa="44", format="geojson") # Grand Est if atmo_data and len(atmo_data) > 0: indice = atmo_data[0] print(f"🎯 Données exemple: {indice.lib_zone}") print() print("🆕 Nouvelles méthodes AASQA:") print(f" • get_aasqa_name(): {indice.get_aasqa_name()}") print(f" • get_aasqa_website(): {indice.get_aasqa_website()}") print(f" • get_aasqa_region(): {indice.get_aasqa_region()}") print(f" • get_aasqa_organisme(): {indice.get_aasqa_organisme()}") print() # Trouver l'AASQA depuis un département fictif dept_example = "54" # Meurthe-et-Moselle aasqa_found = get_aasqa_by_department(dept_example) print(f"🔍 Recherche par département {dept_example}: AASQA {aasqa_found}") if aasqa_found: deps = list_departments_by_aasqa(aasqa_found) print(f" • Départements couverts: {', '.join(deps)}") else: print("❌ Aucune donnée récupérée") except Exception as e: print(f"❌ Erreur: {e}") print() def demo_practical_usage(): """Démonstration d'usage pratique""" print("💡 EXEMPLES D'USAGE PRATIQUE") print("=" * 50) print("1️⃣ Trouver l'organisme responsable d'un département:") print() # Exemples pratiques examples = [ ("Nancy (54)", "54"), ("Paris (75)", "75"), ("Marseille (13)", "13"), ("Ajaccio (2A)", "2A"), ("Saint-Denis (974)", "974") ] for ville, dept in examples: aasqa_code = get_aasqa_by_department(dept) if aasqa_code: info = get_aasqa_info(aasqa_code) print(f" {ville:<15} → {info['organisme']}") print(f" {'':>15} Site: {info['site_web']}") else: print(f" {ville:<15} → Non trouvé") print() print("2️⃣ Vérification de cohérence:") print() # Vérification que tous les départements français sont couverts all_covered_depts = [] for aasqa_code in AASQA_CODES.keys(): all_covered_depts.extend(list_departments_by_aasqa(aasqa_code)) print(f" • Départements uniques couverts: {len(set(all_covered_depts))}") print(f" • Total d'entrées départements: {len(all_covered_depts)}") # Recherche de doublons seen = set() duplicates = set() for dept in all_covered_depts: if dept in seen: duplicates.add(dept) seen.add(dept) if duplicates: print(f" ⚠️ Départements en doublon: {duplicates}") else: print(f" ✅ Aucun doublon détecté") print() def main(): """Fonction principale""" print("DÉMONSTRATION DES FONCTIONNALITÉS AASQA ENRICHIES") print("=" * 60) print("Nouvelles données : sites web, départements, fonctions utilitaires") print() try: demo_department_search() demo_aasqa_details() demo_website_access() demo_department_coverage() demo_enhanced_data_models() demo_practical_usage() print("=" * 60) print("✅ TOUTES LES DÉMONSTRATIONS TERMINÉES AVEC SUCCÈS") print() print("📋 Nouvelles fonctionnalités disponibles:") print(" • Structure AASQA enrichie (sites web, départements)") print(" • Fonctions utilitaires de recherche") print(" • Nouvelles méthodes dans les modèles de données") print(" • Usage simplifié par département") except Exception as e: print(f"❌ Erreur lors de l'exécution: {e}") import traceback print("\nDétails de l'erreur:") print(traceback.format_exc()) if __name__ == "__main__": main()