250 lines
No EOL
8 KiB
Python
250 lines
No EOL
8 KiB
Python
#!/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() |