py_atmo_data_wrapper/examples/example_aasqa_utilities.py
2025-07-14 17:56:57 +02:00

250 lines
No EOL
8 KiB
Python
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.

#!/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()